CSS 在IE6, IE7 和IE8中的差別

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