
這些統(tǒng)計(jì)中比較有趣的部分是,IE6、IE7、IE8之間的數(shù)值很接近,這防止了單個(gè)Microsoft的瀏覽器占居統(tǒng)治地位——與過(guò)去的情況相反。根據(jù)這些令人遺憾的統(tǒng)計(jì)結(jié)果,在為客戶開(kāi)發(fā)網(wǎng)站的時(shí)候開(kāi)發(fā)人員對(duì)所有當(dāng)前使用的IE瀏覽器做全面的測(cè)試是必要的,而且這樣在個(gè)人項(xiàng)目上也可以拉攏更多的用戶。
多謝那些JavaScript庫(kù)(框架),跨瀏覽器的Javascript的測(cè)試已經(jīng)像當(dāng)前形勢(shì)所允許的那樣接近完美了。但在CSS開(kāi)發(fā)中還不是這樣,特別是關(guān)系到IE目前存在的三個(gè)版本。
本文嘗試為希望了解CSS對(duì)IE6、IE7、IE8的支持的不同的開(kāi)發(fā)者提供一份詳細(xì)的、易用的參考。本參考包含以下情況的概述和兼容情況:
- 三個(gè)瀏覽器中的一個(gè)支持而另外兩個(gè)不支持的條目
- 三個(gè)瀏覽器中的兩個(gè)支持而另外一個(gè)不支持的條目
本文不討論:
因此,本文的中心是三個(gè)瀏覽器中的不同,而不是必要的支持缺陷。該列表被分為以下五個(gè)部分:
- 選擇器與繼承
- 偽類與偽元素
- 屬性支持
- 其它各種技術(shù)
- 重要bug和不兼容問(wèn)題
選擇器與繼承
子選擇器
示例
描述
子選擇器選擇一個(gè)特定父級(jí)元素的所有直接子級(jí)元素,在上面的例子中,body是父元素,p是子元素。
支持情況
Bugs
IE7中,如果在父級(jí)標(biāo)簽和子級(jí)標(biāo)簽之間有一個(gè)HTML注釋,子選擇器將不會(huì)工作。
鏈類
示例
.class1.class2.class3 { background: #fff;}描述
鏈類用于送一個(gè)HTML元素有多個(gè)class聲明的情況,就像這樣:
<div class="class1 class2 class3"><p>Content here.</p></div>
支持情況
Bugs
IE6好像支持這種情況,因?yàn)樗芷ヅ滏溨械淖詈笠粋€(gè)class到使用該class的元素上,然而,它并不能限制一個(gè)使用鏈中所有class的元素。
屬性選擇器
示例
描述
該選擇器允許一個(gè)元素被定位只要它有指定的屬性。在上面的例子中,所有的帶有href屬性的a標(biāo)簽都會(huì)被限定,而沒(méi)有href屬性的a標(biāo)簽不會(huì)被限定。
支持情況
臨近兄弟選擇器
示例
描述
該選擇器定位臨近到指定元素的兄弟標(biāo)簽。上面的例子將會(huì)限定p標(biāo)簽,但是他必須是h1標(biāo)簽的兄弟而且要直接尾隨在h1標(biāo)簽的后面。比如:
<h1>heading</h1><p>Content here.</p><p>Content here.</p>
在上面的代碼中,CSS樣式將只對(duì)第一個(gè)p有效。因?yàn)樗莌1的兄弟而且緊跟著h1。第二個(gè)p也是h1的一個(gè)兄弟,但是它沒(méi)有緊跟著h1。
支持情況
Bugs
在IE7中,如果在兄弟之間有一個(gè)HTML注釋,臨近兄弟選擇器將無(wú)效。
普通兄弟選擇器
示例
描述
該選擇器定位一個(gè)指定元素后面的所有兄弟元素。將此選擇器應(yīng)用到上面的那個(gè)例子,將會(huì)對(duì)兩個(gè)p標(biāo)簽都有效。當(dāng)然,如果有一個(gè)p元素出現(xiàn)在h1之前,那個(gè)p元素不會(huì)被匹配。
支持情況
偽類和偽元素
:hover后面的后代選擇器
示例
a:hover span { color: #0f0;}描述
一個(gè)元素可以被:hover偽類后面的選擇器定位,就像后代選擇器一樣。上面的例子,在鼠標(biāo)懸停的時(shí)候,將會(huì)改變a元素內(nèi)的span元素中的文字的顏色。
支持情況
鏈偽類
示例
a:first-child:hover { color: #0f0;}描述
偽類可以鏈起來(lái)以縮小元素選擇。上面的例子會(huì)定位每一個(gè)父級(jí)元素下的第一個(gè)a標(biāo)簽,并將hover偽類P應(yīng)用到它上。
支持情況
非錨點(diǎn)元素中的:hover
示例
div:hover { color: #f00;}描述
:hover偽類可以應(yīng)用到任何元素的懸停狀態(tài),而不只是a標(biāo)簽。
支持情況
:first-child偽類
示例
div li:first-child { background: blue;}描述
改偽類定位每一個(gè)指定的元素的父級(jí)元素的第一個(gè)子元素。
支持情況
Bugs
IE7中,如果要定位的第一個(gè)子元素之前有HTML注釋,first-child偽類將會(huì)無(wú)效。
:focus偽類
示例
a:focus { border: 1px solid red;}描述
該偽類定位有鍵盤(pán)焦點(diǎn)的所有元素。
支持情況
:before 和:after 偽類
示例
#box:before { content: "本段文字在盒子前面";}#box:after { content: "本段文字在盒子后面";}描述
這兩個(gè)偽元素分別在指定元素的前面和后面添加生成的內(nèi)容,結(jié)合content屬性一起使用。
支持情況
屬性支持
由position產(chǎn)生的實(shí)際大小
示例
#box { position: absolute; top: 0; right: 100px; left: 0; bottom: 200px; background: blue;}描述
定義top, right, bottom, 和left 值到絕對(duì)定位的元素上將給這個(gè)元素實(shí)際的大小(寬度和高度),雖然并沒(méi)有設(shè)定使寬度和高度值。
支持情況
Min-Height 與 Min-Width
示例
#box { min-height: 500px; min-width: 300px;}描述
這兩個(gè)屬性分別指定元素的寬和高的最小值,允許一個(gè)盒子可以比指定的最小值更大,但是不能更小。它們兩個(gè)可以一起使用,也可以分開(kāi)來(lái)用。
支持情況
Max-Height 和Max-Width
示例
#box { max-height: 500px; max-width: 300px;}描述
這兩個(gè)屬性分別指定元素的高和寬的最大值,允許一個(gè)盒子比這個(gè)指定的最大值小,但是不能更大。它們也可以同時(shí)使用或者單獨(dú)使用。
支持情況
透明邊框顏色
示例
#box { border: solid 1px transparent;}描述
一個(gè)透明的邊框色允許一個(gè)邊框和邊框色可見(jiàn)(或者不透明)時(shí)占用一樣的空間。
支持情況
固定位置元素
示例
描述
position屬性的這個(gè)值允許一個(gè)元素絕對(duì)的相對(duì)于窗口定位。
支持情況
固定位置的背景圖
示例
#box { background-image: url(images/bg.jpg); background-position: 0 0; background-attachment: fixed;}描述
background-attachment屬性的值為fixed允許一個(gè)背景圖片絕對(duì)地相對(duì)于窗口定位。
支持情況
Bugs
就像position:fixed一樣,IE6同樣不支持background-positon的fixed值 。然而,在IE6中只有在這個(gè)值用于根元素的時(shí)候才有效。
屬性值“inherit”
示例
#box { display: inherit;}描述
將值inherit 應(yīng)用到一個(gè)屬性那個(gè)允許一個(gè)元素從它的包含元素繼承計(jì)算的值。
支持情況
Bugs
IE6 和IE7 不支持inherit 值除了direction 和visibility 屬性。
表格單元的邊框空白
示例
table td { border-spacing: 3px;}描述
該屬性設(shè)置相鄰的表格單元的邊框之間的空白。
支持情況
在表格中渲染空單元格
示例
table { empty-cells: show;}描述
該屬性,只應(yīng)用于元素的display屬性被設(shè)置為 table-cell的元素,允許空單元格渲染他們的邊框和背景。否則,它們將不可見(jiàn)。
支持情況
表格標(biāo)題的水平位置
示例
table { caption-side: bottom;}描述
這個(gè)屬性允許將一個(gè)表格的標(biāo)題放到表格的底部——默認(rèn)是頭部。
支持情況
修剪區(qū)域
示例
#box { clip:rect(20px, 300px, 200px, 100px)}描述
該屬性指定一個(gè)盒子的一個(gè)區(qū)域可見(jiàn),剩下的部分修剪掉,或者不可見(jiàn)。
支持情況
Bugs
有趣的是,該如果不使用隔開(kāi)各個(gè)值的逗號(hào),IE6和IE7也可以用這個(gè)屬性。(比如,使用空格隔開(kāi)剪切的值。)
打印頁(yè)面中的orphanes和widows
示例
p { orphans: 4;}p { widows: 4;}描述
orphans屬性設(shè)定在打印頁(yè)面底部顯示的最少行數(shù)。而widows 屬性用來(lái)設(shè)定打印頁(yè)面頭部至少顯示的段落的行數(shù)。
支持情況
盒子內(nèi)的頁(yè)面分割
示例
#box { page-break-inside: avoid;}描述
該屬性設(shè)定分頁(yè)是否發(fā)生在一個(gè)指定元素內(nèi)。
支持情況
Outline 屬性
示例
#box { outline: solid 1px red;}描述
outline 是outline-style, outline-width, 和outline-color的縮寫(xiě)。該屬性要優(yōu)于border屬性,因?yàn)樗粫?huì)影響文檔流,因而u更有助于調(diào)試布局問(wèn)題。
支持情況
display屬性的替代值
示例
#box { display: inline-block;}描述
display 屬性通常設(shè)置為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
支持情況
處理可折疊空白
示例
p { white-space: pre-line;}div { white-space: pre-wrap;}描述
white-space屬性的pre-line值設(shè)定將多個(gè)空白元素折疊為一個(gè)空白,同時(shí)允許明確的設(shè)置斷行。white-space 屬性的pre-wrap 值不會(huì)將多個(gè)空白折疊為一個(gè),不過(guò)也允許明確的設(shè)置斷行。
支持情況
其它各種技術(shù)
@import的媒體類型
示例
@import url("styles.css") screen;描述
就像上面的例子那樣,引入的樣式表文件的媒體類型聲明在文件地址的后面。在該例子中,媒體類型是”screen”。
支持情況
Bugs
盡管IE6 和IE7 支持 @import,它們?cè)诿襟w類型被指定的時(shí)候會(huì)無(wú)效,甚至?xí)鹫鼲import規(guī)則無(wú)效。
計(jì)數(shù)遞增
示例
h2 { counter-increment: headers;}h2:before { content: counter(headers) ". ";}描述
該CSS 技術(shù)允許你自動(dòng)增加出現(xiàn)在指定元素前面的編號(hào),結(jié)合before偽元素一起使用。
推薦閱讀: CSS content, counter-increment 和 counter-reset詳解
支持情況
生成內(nèi)容的引用字符
示例
q { quotes: "'" "'";}q:before { content: open-quote;}q:after { content: close-quote;}描述
指定用于生成內(nèi)容的引用呼號(hào),用于q標(biāo)簽。
支持情況
重要bug和不兼容性問(wèn)題
下面是在上文中沒(méi)有提到的IE6和IE7的眾多bug。當(dāng)然這個(gè)列表不包括在這三個(gè)瀏覽器中都不支持的條目。
IE6 Bugs
- 不支持用樣式設(shè)置
<abbr> 元素 - 不支持以連字符和下劃線開(kāi)頭的class和ID名
<select> 元素總是出現(xiàn)在堆疊最上面,而無(wú)視z-index值 如果錨點(diǎn)的偽類沒(méi)有使用正確的順序(:link, :visited, :hover),:hover 偽類將無(wú)效 - 一個(gè)屬性的
!important 聲明會(huì)被同一規(guī)則中同一屬性的沒(méi)有使用!important的第二個(gè)聲明覆蓋。 height 表現(xiàn)類似于min-height width 表現(xiàn)類似于min-width - 左右margin雙倍
- 圓點(diǎn)邊框(dotted)看起來(lái)像虛線邊框(dashed)
text-decoration的 line-through 值在文字上看起來(lái)比別的瀏覽器要高一些 - 有序列表如果有一個(gè)固定結(jié)構(gòu)(haslayout為true,不能設(shè)置li的高度/寬度/zoom等激活haslayout的值),序號(hào)就不會(huì)增加,而是保持為1
- 列表元素不支持
list-style-type的所有可用的值 - 如果列表?xiàng)l目浮動(dòng),指定的
list-style-image 將不會(huì)顯示 - 不完全支持
@font-face - 某些選擇器會(huì)錯(cuò)誤的匹配注釋和文檔聲明
- 如果一個(gè)ID 選擇器結(jié)合一個(gè)類選擇器不匹配,同樣的ID選擇器結(jié)合不同的類選擇器也將被當(dāng)作不匹配。
IE7 Bugs
- 有序列表如果有一個(gè)固定結(jié)構(gòu)(haslayout為true,不能設(shè)置li的高度/寬度/zoom等激活haslayout的值),序號(hào)就不會(huì)增加,而是保持為1
- 列表元素不支持
list-style-type的所有可用的值 - 如果列表?xiàng)l目浮動(dòng),指定的
list-style-image 將不會(huì)顯示 - 不完全支持
@font-face - 某些選擇器會(huì)錯(cuò)誤的匹配注釋和文檔聲明