關於瀏覽器的最離奇的統計結果之一就是Internet Explorer 版本6,7和8共存。截至本文,Internet Explorer各個版本總共佔據了大約65%的市場份額。在網站開發社區,這個數字要小很多,統計顯示大概只有40%。
這些統計中比較有趣的部分是,IE6、IE7、IE8之間的數值很接近,這防止了單個Microsoft的瀏覽器佔居統治地位——與過去的情況相反。根據這些令人遺憾的統計結果,在為客戶開發網站的時候開發人員對所有當前使用的IE瀏覽器做全面的測試是必要的,而且這樣在個人項目上也可以拉攏更多的用戶。
多謝那些JavaScript庫(框架),跨瀏覽器的Javascript的測試已經像當前形勢所允許的那樣接近完美了。但在CSS開發中還不是這樣,特別是關係到IE目前存在的三個版本。
本文嘗試為希望了解CSS對IE6、IE7、IE8的支持的不同的開發者提供一份詳細的、易用的參考。本參考包含以下情況的概述和兼容情況:
三個瀏覽器中的一個支持而另外兩個不支持的條目
三個瀏覽器中的兩個支持而另外一個不支持的條目
本文不討論:
三個瀏覽器都不支持的條目
私有屬性
因此,本文的中心是三個瀏覽器中的不同,而不是必要的支持缺陷。該列表被分為五個部分
選擇器與繼承
子選擇器
示例
body > p {
color: #fff;
}
描述
子選擇器選擇一個特定父級元素的所有直接子級元素,在上面的例子中,body是父元素,p是子元素。
支持情況
IE6No
IE7Yes
IE8Yes
Bugs
IE7中,如果在父級標籤和子級標籤之間有一個HTML註釋,子選擇器將不會工作。
鏈類
示例
.class1.class2.class3 {
background: #fff;
}
描述
鏈類用於送一個HTML元素有多個class聲明的情況,就像這樣:
Content here.
支持情況
IE6No
IE7Yes
IE8Yes
Bugs
IE6好像支持這種情況,因為它能匹配鏈中的最後一個class到使用該class的元素上,然而,它並不能限制一個使用鏈中所有class的元素。
屬性選擇器
示例
a[href] {
color: #0f0;
}
描述
該選擇器允許一個元素被定位只要它有指定的屬性。在上面的例子中,所有的帶有href屬性的a標籤都會被限定,而沒有href屬性的a標籤不會被限定。
支持情況
IE6No
IE7Yes
IE8Yes
臨近兄弟選擇器
示例
h1+p {
color: #f00;
}
描述
該選擇器定位臨近到指定元素的兄弟標籤。上面的例子將會限定p標籤,但是他必須是h1標籤的兄弟而且要直接尾隨在h1標籤的後面。比如:
heading
Content here.
Content here.
在上面的代碼中,CSS樣式將只對第一個p有效。因為它是h1的兄弟而且緊跟著h1。第二個p也是h1的一個兄弟,但是它沒有緊跟著h1。
支持情況
IE6No
IE7Yes
IE8Yes
Bugs
在IE7中,如果在兄弟之間有一個HTML註釋,臨近兄弟選擇器將無效。
普通兄弟選擇器
示例
h1~p {
color: #f00;
}
描述
該選擇器定位一個指定元素後面的所有兄弟元素。將此選擇器應用到上面的那個例子,將會對兩個p標籤都有效。當然,如果有一個p元素出現在h1之前,那個p元素不會被匹配。
支持情況
IE6No
IE7Yes
IE8Yes
偽類和偽元素
:hover後面的後代選擇器
示例
a:hover span {
color: #0f0;
}
描述
一個元素可以被:hover偽類後面的選擇器定位,就像後代選擇器一樣。上面的例子,在鼠標懸停的時候,將會改變a元素內的span元素中的文字的顏色。
支持情況
IE6No
IE7Yes
IE8Yes
鏈偽類
示例
a:first-child:hover {
color: #0f0;
}
描述
偽類可以鏈起來以縮小元素選擇。上面的例子會定位每一個父級元素下的第一個a標籤,並將hover偽類P應用到它上。
支持情況
IE6No
IE7Yes
IE8Yes
非錨點元素中的:hover
示例
div:hover {
color: #f00;
}
描述
:hover偽類可以應用到任何元素的懸停狀態,而不只是a標籤。
支持情況
IE6No
IE7Yes
IE8Yes
:first-child偽類
示例
div li:first-child {
background: blue;
}
描述
改偽類定位每一個指定的元素的父級元素的第一個子元素。
支持情況
IE6No
IE7Yes
IE8Yes
Bugs
IE7中,如果要定位的第一個子元素之前有HTML註釋,first-child偽類將會無效。
:focus偽類
示例
a:focus {
border: 1px solid red;
}
描述
該偽類定位有鍵盤焦點的所有元素。
支持情況
IE6No
IE7No
IE8Yes
:before和:after偽類
示例
#box:before {
content: "本段文字在盒子前面";
}
#box:after {
content: "本段文字在盒子後面";
}
描述
這兩個偽元素分別在指定元素的前面和後面添加生成的內容,結合content屬性一起使用。
支持情況
IE6No
IE7No
IE8Yes
屬性支持
由position產生的實際大小
示例
#box {
position: absolute;
top: 0;
right: 100px;
left: 0;
bottom: 200px;
background: blue;
}
描述
定義top, right, bottom,和left 值到絕對定位的元素上將給這個元素實際的大小(寬度和高度),雖然並沒有設定使寬度和高度值。
支持情況
IE6No
IE7Yes
IE8Yes
Min-Height與Min-Width
示例
#box {
min-height: 500px;
min-width: 300px;
}
描述
這兩個屬性分別指定元素的寬和高的最小值,允許一個盒子可以比指定的最小值更大,但是不能更小。它們兩個可以一起使用,也可以分開來用。
支持情況
IE6No
IE7Yes
IE8Yes
Max-Height和Max-Width
示例
#box {
max-height: 500px;
max-width: 300px;
}
描述
這兩個屬性分別指定元素的高和寬的最大值,允許一個盒子比這個指定的最大值小,但是不能更大。它們也可以同時使用或者單獨使用。
支持情況
IE6No
IE7Yes
IE8Yes
透明邊框顏色
示例
#box {
border: solid 1px transparent;
}
描述
一個透明的邊框色允許一個邊框和邊框色可見(或者不透明)時佔用一樣的空間。
支持情況
IE6No
IE7Yes
IE8Yes
固定位置元素
示例
#box {
position: fixed;
}
描述
position屬性的這個值允許一個元素絕對的相對於窗口定位。
支持情況
IE6No
IE7Yes
IE8Yes
固定位置的背景圖
示例
#box {
background-image: url(images/bg.jpg);
background-position: 0 0;
background-attachment: fixed;
}
描述
background-attachment屬性的值為fixed允許一個背景圖片絕對地相對於窗口定位。
支持情況
IE6No
IE7Yes
IE8Yes
Bugs
就像position:fixed一樣,IE6同樣不支持background-positon的fixed值。然而,在IE6中只有在這個值用於根元素的時候才有效。
屬性值“inherit”
示例
#box {
display: inherit;
}
描述
將值inherit 應用到一個屬性那個允許一個元素從它的包含元素繼承計算的值。
支持情況
IE6No
IE7No
IE8Yes
Bugs
IE6和IE7不支持inherit 值除了direction 和visibility 屬性。
表格單元的邊框空白
示例
table td {
border-spacing: 3px;
}
描述
該屬性設置相鄰的表格單元的邊框之間的空白。
支持情況
IE6No
IE7No
IE8Yes
在表格中渲染空單元格
示例
table {
empty-cells: show;
}
描述
該屬性,只應用於元素的display屬性被設置為table-cell的元素,允許空單元格渲染他們的邊框和背景。否則,它們將不可見。
支持情況
IE6No
IE7No
IE8Yes
表格標題的水平位置
示例
table {
caption-side: bottom;
}
描述
這個屬性允許將一個表格的標題放到表格的底部——默認是頭部。
支持情況
IE6No
IE7No
IE8Yes
修剪區域
示例
#box {
clip:rect(20px, 300px, 200px, 100px)
}
描述
該屬性指定一個盒子的一個區域可見,剩下的部分修剪掉,或者不可見。
支持情況
IE6No
IE7No
IE8Yes
Bugs
有趣的是,該如果不使用隔開各個值的逗號,IE6和IE7也可以用這個屬性。 (比如,使用空格隔開剪切的值。)
打印頁面中的orphanes和widows
示例
p {
orphans: 4;
}
p {
widows: 4;
}
描述
orphans屬性設定在打印頁面底部顯示的最少行數。而widows 屬性用來設定打印頁面頭部至少顯示的段落的行數。
支持情況
IE6No
IE7No
IE8Yes
盒子內的頁面分割
示例
#box {
page-break-inside: avoid;
}
描述
該屬性設定分頁是否發生在一個指定元素內。
支持情況
IE6No
IE7No
IE8Yes
Outline屬性
示例
#box {
outline: solid 1px red;
}
描述
outline 是outline-style, outline-width,和outline-color的縮寫。該屬性要優於border屬性,因為它不會影響文檔流,因而u更有助於調試佈局問題。
支持情況
IE6No
IE7No
IE8Yes
display屬性的替代值
示例
#box {
display: inline-block;
}
描述
display 屬性通常設置為block, inline,或none。替代值包括:
inline-block
inline-table
list-item
run-in
table
table-caption
table-cell
table-column
table-column-group
table-footer-group
table-header-group
table-row
table-row-group
支持情況
IE6No
IE7No
IE8Yes
處理可折疊空白
示例
p {
white-space: pre-line;
}
div {
white-space: pre-wrap;
}
描述
white-space屬性的pre-line值設定將多個空白元素折疊為一個空白,同時允許明確的設置斷行。white-space 屬性的pre-wrap 值不會將多個空白折疊為一個,不過也允許明確的設置斷行。
支持情況
IE6No
IE7No
IE8Yes
其它各種技術
@import的媒體類型
示例
@import url("styles.css") screen;
描述
就像上面的例子那樣,引入的樣式表文件的媒體類型聲明在文件地址的後面。在該例子中,媒體類型是”screen”。
支持情況
IE6No
IE7No
IE8Yes
Bugs
儘管IE6和IE7支持 @import,它們在媒體類型被指定的時候會無效,甚至會引起正@import規則無效。
計數遞增
示例
h2 {
counter-increment: headers;
}
h2:before {
content: counter(headers) ". ";
}
描述
該CSS技術允許你自動增加出現在指定元素前面的編號,結合before偽元素一起使用。
支持情況
IE6No
IE7No
IE8Yes
生成內容的引用字符
示例
q {
quotes: "'" "'";
}
q:before {
content: open-quote;
}
q:after {
content: close-quote;
}
描述
指定用於生成內容的引用呼號,用於q標籤。
支持情況
IE6No
IE7No
IE8Yes
重要bug和不兼容性問題
下面是在上文中沒有提到的IE6和IE7的眾多bug。當然這個列表不包括在這三個瀏覽器中都不支持的條目。
IE6 Bugs
不支持用樣式設置 元素
不支持以連字符和下劃線開頭的class和ID名
