淺談CSS在IE6、7、8中的差別

來源:互聯網
上載者:User
CSS在Internet Explorer 6, 7 和8中的差別,相信對你有所協助。

關於瀏覽器的最離奇的統計結果之一就是Internet Explorer 版本6,7和8共存。截至本文,Internet Explorer各個版本總共佔據了大約65%的市場份額。在網站開發社區,這個數字要小很多,統計顯示大概只有40%。

這些統計中比較有趣的部分是,IE6、IE7、IE8之間的數值很接近,這防止了單個Microsoft的瀏覽器占居統治地位——與過去的情況相反。根據這些令人遺憾的統計結果,在為客戶開發網站的時候開發人員對所有當前使用的IE瀏覽器做全面的測試是必要的,而且這樣在個人項目上也可以拉攏更多的使用者。

多謝那些JavaScript庫(架構),跨瀏覽器的Javascript的測試已經像當前形勢所允許的那樣接近完美了。但在CSS開發中還不是這樣,特別是關係到IE目前存在的三個版本。

本文嘗試為希望瞭解CSS對IE6、IE7、IE8的支援的不同的開發人員提供一份詳細的、易用的參考。本參考包含以下情況的概述和相容情況:

  • 三個瀏覽器中的一個支援而另外兩個不支援的條目
  • 三個瀏覽器中的兩個支援而另外一個不支援的條目

本文不討論:

  • 三個瀏覽器都不支援的條目
  • 私人屬性

因此,本文的中心是三個瀏覽器中的不同,而不是必要的支援缺陷。該列表被分為以下五個部分:

  • 選取器與繼承
  • 偽類與虛擬元素
  • 屬性支援
  • 其它各種技術
  • 重要bug和不相容問題

選取器與繼承

子選取器

樣本
body > p {color:#fff;}
描述

子選取器選擇一個特定父級元素的所有直接子級元素,在上面的例子中,body是父元素,p是子項目。

支援情況
IE6
No IE7
Yes IE8
Yes
Bugs

IE7中,如果在父級標籤和子級標籤之間有一個HTML注釋,子選取器將不會工作。

鏈類

樣本
.class1.class2.class3{background:#fff;}
描述

鏈類用於送一個HTML元素有多個class聲明的情況,就像這樣:

<divclass="class1 class2 class3"><p>Content here.</p></div>
支援情況
IE6
No IE7
Yes IE8
Yes
Bugs

IE6好像支援這種情況,因為它能匹配鏈中的最後一個class到使用該class的元素上,然而,它並不能限制一個使用鏈中所有class的元素。

屬性選取器

樣本
a[href]{color:#0f0;}
描述

該選取器允許一個元素被定位只要它有指定的屬性。在上面的例子中,所有的帶有href屬性的a標籤都會被限定,而沒有href屬性的a標籤不會被限定。

支援情況
IE6
No IE7
Yes IE8
Yes

臨近兄弟選取器

樣本
h1+p {color:#f00;}
描述

該選取器定位臨近到指定元素的兄弟標籤。上面的例子將會限定p標籤,但是他必須是h1標籤的兄弟而且要直接尾隨在h1標籤的後面。比如:

<h1>heading</h1><p>Content here.</p><p>Content here.</p>

在上面的代碼中,CSS樣式將只對第一個p有效。因為它是h1的兄弟而且緊跟著h1。第二個p也是h1的一個兄弟,但是它沒有緊跟著h1。

支援情況
IE6
No IE7
Yes IE8
Yes
Bugs

在IE7中,如果在兄弟之間有一個HTML注釋,臨近兄弟選取器將無效。

普通兄弟選取器

樣本
h1~p {color:#f00;}
描述

該選取器定位一個指定元素後面的所有兄弟元素。將此選取器應用到上面的那個例子,將會對兩個p標籤都有效。當然,如果有一個p元素出現在h1之前,那個p元素不會被匹配。

支援情況
IE6
No IE7
Yes IE8
Yes

偽類和虛擬元素

:hover後面的後代選取器

樣本
a:hover span {color:#0f0;}
描述

一個元素可以被:hover偽類後面的選取器定位,就像後代選取器一樣。上面的例子,在滑鼠移至上方的時候,將會改變a元素內的span元素中的文字的顏色。

支援情況
IE6
No IE7
Yes IE8
Yes

鏈偽類

樣本
a:first-child:hover {color:#0f0;}
描述

偽類可以鏈起來以縮小元素選擇。上面的例子會定位每一個父級元素下的第一個a標籤,並將hover偽類P應用到它上。

支援情況
IE6
No IE7
Yes IE8
Yes

非錨點元素中的:hover

樣本
div:hover {color:#f00;}
描述

:hover偽類可以應用到任何元素的懸停狀態,而不只是a標籤。

支援情況
IE6
No IE7
Yes IE8
Yes

:first-child偽類

樣本
div li:first-child {background:blue;}
描述

改偽類定位每一個指定的元素的父級元素的第一個子項目。

支援情況
IE6
No IE7
Yes IE8
Yes
Bugs

IE7中,如果要定位的第一個子項目之前有HTML注釋,first-child偽類將會無效。

:focus偽類

樣本
a:focus {border:1pxsolidred;}
描述

該偽類定位有鍵盤焦點的所有元素。

支援情況
IE6
No IE7
No IE8
Yes

:before 和:after 偽類

樣本
#box:before {content:"本段文字在盒子前面";} #box:after {content:"本段文字在盒子後面";}
描述

這兩個虛擬元素分別在指定元素的前面和後面添加產生的內容,結合content屬性一起使用。

支援情況
IE6
No IE7
No IE8
Yes

屬性支援

由position產生的實際大小

樣本
#box{position:absolute;top:0;right:100px;left:0;bottom:200px;background:blue;}
描述

定義top, right, bottom, 和left 值到絕對位置的元素上將給這個元素實際的大小(寬度和高度),雖然並沒有設定使寬度和高度值。

支援情況
IE6
No IE7
Yes IE8
Yes

Min-Height 與 Min-Width

樣本
#box{min-height:500px;min-width:300px;}
描述

這兩個屬性分別指定元素的寬和高的最小值,允許一個盒子可以比指定的最小值更大,但是不能更小。它們兩個可以一起使用,也可以分開來用。

支援情況
IE6
No IE7
Yes IE8
Yes

Max-Height 和Max-Width

樣本
#box{max-height:500px;max-width:300px;}
描述

這兩個屬性分別指定元素的高和寬的最大值,允許一個盒子比這個指定的最大值小,但是不能更大。它們也可以同時使用或者單獨使用。

支援情況
IE6
No IE7
Yes IE8
Yes

透明邊框顏色

樣本
#box{border:solid1pxtransparent;}
描述

一個透明的邊框色允許一個邊框和邊框色可見(或者不透明)時佔用一樣的空間。

支援情況
IE6
No IE7
Yes IE8
Yes

固定位置元素

樣本
#box{position:fixed;}
描述

position屬性的這個值允許一個元素絕對的相對於視窗定位。

支援情況
IE6
No IE7
Yes IE8
Yes

固定位置的背景圖

樣本
#box{background-image:url(images/bg.jpg);background-position:00;background-attachment:fixed;}
描述

background-attachment屬性的值為fixed允許一個背景圖片絕對地相對於視窗定位。

支援情況
IE6
No IE7
Yes IE8
Yes
Bugs

就像position:fixed一樣,IE6同樣不支援background-positon的fixed值 。然而,在IE6中只有在這個值用於根項目的時候才有效。

屬性值“inherit”

樣本
#box{display:inherit;}
描述

將值inherit 應用到一個屬性那個允許一個元素從它的包含元素繼承計算的值。

支援情況
IE6
No IE7
No IE8
Yes
Bugs

IE6 和IE7 不支援inherit 值除了directionvisibility 屬性。

表格單元的邊框空白

樣本
table td {border-spacing:3px;}
描述

該屬性設定相鄰的表格單元的邊框之間的空白。

支援情況
IE6
No IE7
No IE8
Yes

在表格中渲染空儲存格

樣本
table {empty-cells:show;}
描述

該屬性,只應用於元素的display屬性被設定為 table-cell的元素,允許空儲存格渲染他們的邊框和背景。否則,它們將不可見。

支援情況
IE6
No IE7
No IE8
Yes

表格標題的水平位置

樣本
table {caption-side:bottom;}
描述

這個屬性允許將一個表格的標題放到表格的底部——預設是頭部。

支援情況
IE6
No IE7
No IE8
Yes

修剪地區

樣本
#box{clip:rect(20px,300px,200px,100px)}
描述

該屬性指定一個盒子的一個地區可見,剩下的部分修剪掉,或者不可見。

支援情況
IE6
No IE7
No IE8
Yes
Bugs

有趣的是,該如果不使用隔開各個值的逗號,IE6和IE7也可以用這個屬性。(比如,使用空格隔開剪下的值。)

列印頁面中的orphanes和widows

樣本
p {orphans:4;} p {widows:4;}
描述

orphans屬性設定在列印頁面底部顯示的最少行數。而widows 屬性用來設定列印頁面頭部至少顯示的段落的行數。

支援情況
IE6
No IE7
No IE8
Yes

盒子內的頁面分割

樣本
#box{page-break-inside:avoid;}
描述

該屬性設定分頁是否發生在一個指定元素內。

支援情況
IE6
No IE7
No IE8
Yes

Outline 屬性

樣本
#box{outline:solid1pxred;}
描述

outlineoutline-style, outline-width, 和outline-color的縮寫。該屬性要優於border屬性,因為它不會影響文檔流,因而u更有助於調試布局問題。

支援情況
IE6
No IE7
No IE8
Yes

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
支援情況
IE6
No IE7
No IE8
Yes

處理可摺疊空白

樣本
p {white-space: pre-line;} div {white-space: pre-wrap;}
描述

white-space屬性的pre-line值設定將多個空白元素摺疊為一個空白,同時允許明確的設定斷行。white-space 屬性的pre-wrap 值不會將多個空白摺疊為一個,不過也允許明確的設定斷行。

支援情況
IE6
No IE7
No IE8
Yes

其它各種技術

@import的媒體類型

樣本
@import url("styles.css") screen;
描述

就像上面的例子那樣,引入的樣式表檔案的媒體型別宣告在檔案地址的後面。在該例子中,媒體類型是”screen”。

支援情況
IE6
No IE7
No IE8
Yes
Bugs

儘管IE6 和IE7 支援 @import,它們在媒體類型被指定的時候會無效,甚至會引起正@import規則無效。

計數遞增

樣本
h2 {counter-increment: headers;}h2:before {content: counter(headers)". ";}
描述

該CSS 技術允許你自動增加出現在指定元素前面的編號,結合before虛擬元素一起使用。

支援情況
IE6
No IE7
No IE8
Yes

產生內容的引用字元

樣本
q {quotes:"'""'";} q:before {content:open-quote;} q:after {content:close-quote;}
描述

指定用於產生內容的引用呼號,用於q標籤。

支援情況
IE6
No IE7
No IE8
Yes

重要bug和不相容性問題

下面是在上文中沒有提到的IE6和IE7的眾多bug。當然這個列表不包括在這三個瀏覽器中都不支援的條目。

IE6 Bugs

  • 不支援用樣式設定<abbr> 元素
  • 不支援以連字號和底線開頭的class和ID名
  • <select> 元素總是出現在堆疊最上面,而無視z-index值
  • 如果錨點的偽類沒有使用正確的順序(:link, :visited, :hover),:hover 偽類將無效
  • 一個屬性的!important 聲明會被同一規則中同一屬性的沒有使用!important的第二個聲明覆蓋。
  • height 表現類似於min-height
  • width 表現類似於min-width
  • 左右margin雙倍
  • 圓點邊框(dotted)看起來像虛線邊框(dashed)
  • text-decorationline-through 值在文字上看起來比別的瀏覽器要高一些
  • 有序列表如果有一個固定結構(haslayout為true,不能設定li的高度/寬度/zoom等啟用haslayout的值),序號就不會增加,而是保持為1
  • 列表元素不支援list-style-type的所有可用的值
  • 如果列表條目浮動,指定的list-style-image 將不會顯示
  • 不完全支援 @font-face
  • 某些選取器會錯誤的匹配注釋和文檔聲明
  • 如果一個識別碼選取器結合一個類別選取器不匹配,同樣的ID選取器結合不同的類別選取器也將被當作不匹配。

IE7 Bugs

  • 有序列表如果有一個固定結構(haslayout為true,不能設定li的高度/寬度/zoom等啟用haslayout的值),序號就不會增加,而是保持為1
  • 列表元素不支援list-style-type的所有可用的值
  • 如果列表條目浮動,指定的list-style-image 將不會顯示
  • 不完全支援 @font-face
  • 某些選取器會錯誤的匹配注釋和文檔聲明


相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.