讓IE6/IE7/IE8支持CSS3屬性的8種方法介紹
發(fā)布時(shí)間:2013-09-23 10:43:06 作者:佚名
我要評(píng)論

IE瀏覽器暫不支持CSS3的一些屬性。國(guó)外的工程師們,不安于此現(xiàn)狀,他們總是盡量使用一些手段使IE瀏覽器也能支持CSS3屬性,到目前為止,有不少可以讓IE支持部分CSS3屬性的工具
我們都知道,IE瀏覽器暫不支持CSS3的一些屬性。國(guó)外的工程師們,不安于此現(xiàn)狀,他們總是盡量使用一些手段使IE瀏覽器也能支持CSS3屬性,我覺(jué)得這些都是很有意義,很有價(jià)值的工作,可以推動(dòng)整個(gè)技術(shù)領(lǐng)域的進(jìn)步的。到目前為止,有不少可以讓IE支持部分CSS3屬性的工具。例如:
1. Dean Edwards的IE7.js (以及 IE8.js, IE9.js)
這個(gè)玩意估計(jì)是試圖讓IE支持CSS3屬性的鼻祖,還算蠻強(qiáng)大,就是性能開(kāi)銷(xiāo)較大,要解析很多文件腳本,給DOM添加大量的元素以及ClassName。
2. Aaron Gustafson的 eCSStender
此方法支持@font-face, CSS3 選擇器, 以及 CSS3 Backgrounds 和 Borders。
3. Drew Diller的 DD_roundies
這是一個(gè)基于IE VML實(shí)現(xiàn)一些CSS3效果的。
4. Remiz Rahnas的border-radius.htc
此方法使用htc文件,配合VML實(shí)現(xiàn),缺點(diǎn)在于不能自動(dòng)適應(yīng)目標(biāo)元素的位置和大小,所以不能適用于動(dòng)態(tài)腳本環(huán)境。
5. Nick Fetchak的 ie-css3.htc
關(guān)于此方法,我在前面的"讓IE6/IE7/IE8瀏覽器支持CSS3屬性"這篇文章中已經(jīng)做過(guò)介紹。我是建議您看看這篇文章,倒不是ie-css3.htc這個(gè)玩意多么好,而是文中對(duì)htc文件以及VML預(yù)言做了些介紹,對(duì)于您了解IE下實(shí)現(xiàn)類(lèi)似CSS3效果原理有所了解。
6. Keith Clark的ie-css3.js
這是個(gè)與IE7.js類(lèi)似的項(xiàng)目,其選擇器可借助其他JavaScript庫(kù),所以其本身較小。
7. zoltandulac的cssSandpaper
這是一個(gè)使用IE濾鏡實(shí)現(xiàn)一些CSS3屬性的方法。
8. css3pie的css3 PIE.htc
支持:border-radius圓角 、 box-shadow 盒陰影 、 gradient漸變 、 multiple background images多背景 。
下面對(duì)第8第方法的做一下簡(jiǎn)單介紹:
官方網(wǎng)站:http://css3pie.com/
使用方法:
第一步:下載css3 PIE.htc 文件
第二步:將PIE.htc文件上傳到你的網(wǎng)站目錄中,上傳到目錄哪里都可以,只要你記住這個(gè)目錄。
第三步:創(chuàng)建html文件,寫(xiě)一段css3代碼,并引入PIE.htc,如下面這段:
#id {
border: 1px solid #999;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
behavior: url(path/to/PIE.htc);
}
注意:.htc 文件路徑是相對(duì)于html文件的路徑,而不是相對(duì)于css文件。
已知的一些問(wèn)題:
此方法并不是萬(wàn)能的,也有一些局限性和需要注意的地方。
1. z-index相關(guān)問(wèn)題
IE下這些CSS3效果實(shí)現(xiàn)是借助于VML,由VML繪制圓角或是投影效果的容器元素,然后這個(gè)容器元素作為目標(biāo)元素的后兄弟節(jié)點(diǎn)插入,如果目標(biāo)元素position:absolute 或是 position:relative,則這個(gè)css3-container元素將會(huì)設(shè)置與之一樣的z-index值,在DOM tree中,同級(jí)的元素總是后面的覆蓋前面的,所以這樣就實(shí)現(xiàn)了覆蓋,又避免了可能有其他元素正好插入其中。
所以,問(wèn)題來(lái)了,如果目前元素的position屬性為static,也就是默認(rèn)屬性,則z-index屬性是沒(méi)有用的,無(wú)覆蓋可言,所以此時(shí)IE瀏覽器下CSS3的渲染是不會(huì)成功的。要解決也很簡(jiǎn)單,設(shè)置目標(biāo)元素position:relative或是設(shè)置祖先元素position:relative并賦予一個(gè)z-index值(不可為-1)。
2. 相當(dāng)路徑的問(wèn)題
IE瀏覽器的behavior 屬性是相對(duì)于HTML文檔而言的,與CSS其他的屬性不一樣,不是相對(duì)于CSS文檔而言的。這使得使用pie.htc文件不怎么方便。如果絕對(duì)路徑于根目錄,則CSS文件不方便移動(dòng);如果相對(duì)路徑與HTML文檔,則pie.htc文件在不同HTML頁(yè)面見(jiàn)的重用性大大降低。同時(shí),諸如border-image后面的URL屬性路徑也不好處理。
3. 縮寫(xiě)的問(wèn)題
使用PIE實(shí)現(xiàn)IE下的CSS3渲染(其他方法也是一樣),只能使用縮寫(xiě)的形式,例如圓角效果,我們可以設(shè)置border-top-left-radius表示左上圓角,但是PIE確實(shí)不支持這種寫(xiě)法的,只能是老老實(shí)實(shí)的縮寫(xiě)。
4. 提供正確的Content-Type
要想讓IE瀏覽器支持htc文件,需要一個(gè)有著"text/x-component" 字樣的content-type 頭部,否則,會(huì)忽視behavior。絕大數(shù)web服務(wù)器提供了正確的content-type,但是還有一部分則有問(wèn)題。
如果您發(fā)現(xiàn)在您的機(jī)子上PIE方法無(wú)效,也就是htc文件這里指pie.htc文件無(wú)效,檢查您的服務(wù)器配置,可能其需要更新到最新的content-type。例如對(duì)于Apache,您可以在.htaccess文件中做如下處理:
AddType text/x-component .htc
但是,由于某種原因,您無(wú)法修改服務(wù)器配置(例如公用主機(jī),或是空間服務(wù)商提供的服務(wù)器),您可以用一個(gè)PHP文件來(lái)間接調(diào)用htc文件。我只要給你看下這個(gè)PHP文件的代碼您就知道什么意思了,如下:
<?php
header( 'Content-type: text/x-component' );
include( 'pie.htc' );
?>
通過(guò)PHP文件來(lái)增加一個(gè)含有"text/x-component"字樣的Content-type頭,同時(shí)調(diào)用pie.htc文件。
關(guān)于上面所示的php文件,您可以狠狠地點(diǎn)擊這里:pie.php(右鍵 – [目標(biāo)|鏈接另存為]),或者您可以直接新建一個(gè)php文件,把上面的兩行代碼復(fù)制進(jìn)去?;蛘咴诒疚奶峁┑脑即虬Y源的wrappers文件夾里面也有此php文件,不過(guò)名稱(chēng)是大寫(xiě)的。
如果您使用上述php文件,您需要將pie.php和pie.htc放在同一個(gè)文件夾目錄下,同時(shí)CSS中的behavior寫(xiě)法應(yīng)該是:
behavior: url(pie.php);
以上為一些常見(jiàn)的主要的問(wèn)題,當(dāng)然,在復(fù)雜的頁(yè)面情況下,還會(huì)有其他意想不到的情況,這里,祝您好運(yùn)了!
1. Dean Edwards的IE7.js (以及 IE8.js, IE9.js)
這個(gè)玩意估計(jì)是試圖讓IE支持CSS3屬性的鼻祖,還算蠻強(qiáng)大,就是性能開(kāi)銷(xiāo)較大,要解析很多文件腳本,給DOM添加大量的元素以及ClassName。
2. Aaron Gustafson的 eCSStender
此方法支持@font-face, CSS3 選擇器, 以及 CSS3 Backgrounds 和 Borders。
3. Drew Diller的 DD_roundies
這是一個(gè)基于IE VML實(shí)現(xiàn)一些CSS3效果的。
4. Remiz Rahnas的border-radius.htc
此方法使用htc文件,配合VML實(shí)現(xiàn),缺點(diǎn)在于不能自動(dòng)適應(yīng)目標(biāo)元素的位置和大小,所以不能適用于動(dòng)態(tài)腳本環(huán)境。
5. Nick Fetchak的 ie-css3.htc
關(guān)于此方法,我在前面的"讓IE6/IE7/IE8瀏覽器支持CSS3屬性"這篇文章中已經(jīng)做過(guò)介紹。我是建議您看看這篇文章,倒不是ie-css3.htc這個(gè)玩意多么好,而是文中對(duì)htc文件以及VML預(yù)言做了些介紹,對(duì)于您了解IE下實(shí)現(xiàn)類(lèi)似CSS3效果原理有所了解。
6. Keith Clark的ie-css3.js
這是個(gè)與IE7.js類(lèi)似的項(xiàng)目,其選擇器可借助其他JavaScript庫(kù),所以其本身較小。
7. zoltandulac的cssSandpaper
這是一個(gè)使用IE濾鏡實(shí)現(xiàn)一些CSS3屬性的方法。
8. css3pie的css3 PIE.htc
支持:border-radius圓角 、 box-shadow 盒陰影 、 gradient漸變 、 multiple background images多背景 。
下面對(duì)第8第方法的做一下簡(jiǎn)單介紹:
官方網(wǎng)站:http://css3pie.com/
使用方法:
第一步:下載css3 PIE.htc 文件
第二步:將PIE.htc文件上傳到你的網(wǎng)站目錄中,上傳到目錄哪里都可以,只要你記住這個(gè)目錄。
第三步:創(chuàng)建html文件,寫(xiě)一段css3代碼,并引入PIE.htc,如下面這段:
復(fù)制代碼
代碼如下:#id {
border: 1px solid #999;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
behavior: url(path/to/PIE.htc);
}
注意:.htc 文件路徑是相對(duì)于html文件的路徑,而不是相對(duì)于css文件。
已知的一些問(wèn)題:
此方法并不是萬(wàn)能的,也有一些局限性和需要注意的地方。
1. z-index相關(guān)問(wèn)題
IE下這些CSS3效果實(shí)現(xiàn)是借助于VML,由VML繪制圓角或是投影效果的容器元素,然后這個(gè)容器元素作為目標(biāo)元素的后兄弟節(jié)點(diǎn)插入,如果目標(biāo)元素position:absolute 或是 position:relative,則這個(gè)css3-container元素將會(huì)設(shè)置與之一樣的z-index值,在DOM tree中,同級(jí)的元素總是后面的覆蓋前面的,所以這樣就實(shí)現(xiàn)了覆蓋,又避免了可能有其他元素正好插入其中。
所以,問(wèn)題來(lái)了,如果目前元素的position屬性為static,也就是默認(rèn)屬性,則z-index屬性是沒(méi)有用的,無(wú)覆蓋可言,所以此時(shí)IE瀏覽器下CSS3的渲染是不會(huì)成功的。要解決也很簡(jiǎn)單,設(shè)置目標(biāo)元素position:relative或是設(shè)置祖先元素position:relative并賦予一個(gè)z-index值(不可為-1)。
2. 相當(dāng)路徑的問(wèn)題
IE瀏覽器的behavior 屬性是相對(duì)于HTML文檔而言的,與CSS其他的屬性不一樣,不是相對(duì)于CSS文檔而言的。這使得使用pie.htc文件不怎么方便。如果絕對(duì)路徑于根目錄,則CSS文件不方便移動(dòng);如果相對(duì)路徑與HTML文檔,則pie.htc文件在不同HTML頁(yè)面見(jiàn)的重用性大大降低。同時(shí),諸如border-image后面的URL屬性路徑也不好處理。
3. 縮寫(xiě)的問(wèn)題
使用PIE實(shí)現(xiàn)IE下的CSS3渲染(其他方法也是一樣),只能使用縮寫(xiě)的形式,例如圓角效果,我們可以設(shè)置border-top-left-radius表示左上圓角,但是PIE確實(shí)不支持這種寫(xiě)法的,只能是老老實(shí)實(shí)的縮寫(xiě)。
4. 提供正確的Content-Type
要想讓IE瀏覽器支持htc文件,需要一個(gè)有著"text/x-component" 字樣的content-type 頭部,否則,會(huì)忽視behavior。絕大數(shù)web服務(wù)器提供了正確的content-type,但是還有一部分則有問(wèn)題。
如果您發(fā)現(xiàn)在您的機(jī)子上PIE方法無(wú)效,也就是htc文件這里指pie.htc文件無(wú)效,檢查您的服務(wù)器配置,可能其需要更新到最新的content-type。例如對(duì)于Apache,您可以在.htaccess文件中做如下處理:
復(fù)制代碼
代碼如下:AddType text/x-component .htc
但是,由于某種原因,您無(wú)法修改服務(wù)器配置(例如公用主機(jī),或是空間服務(wù)商提供的服務(wù)器),您可以用一個(gè)PHP文件來(lái)間接調(diào)用htc文件。我只要給你看下這個(gè)PHP文件的代碼您就知道什么意思了,如下:
復(fù)制代碼
代碼如下:<?php
header( 'Content-type: text/x-component' );
include( 'pie.htc' );
?>
通過(guò)PHP文件來(lái)增加一個(gè)含有"text/x-component"字樣的Content-type頭,同時(shí)調(diào)用pie.htc文件。
關(guān)于上面所示的php文件,您可以狠狠地點(diǎn)擊這里:pie.php(右鍵 – [目標(biāo)|鏈接另存為]),或者您可以直接新建一個(gè)php文件,把上面的兩行代碼復(fù)制進(jìn)去?;蛘咴诒疚奶峁┑脑即虬Y源的wrappers文件夾里面也有此php文件,不過(guò)名稱(chēng)是大寫(xiě)的。
如果您使用上述php文件,您需要將pie.php和pie.htc放在同一個(gè)文件夾目錄下,同時(shí)CSS中的behavior寫(xiě)法應(yīng)該是:
復(fù)制代碼
代碼如下:behavior: url(pie.php);
以上為一些常見(jiàn)的主要的問(wèn)題,當(dāng)然,在復(fù)雜的頁(yè)面情況下,還會(huì)有其他意想不到的情況,這里,祝您好運(yùn)了!
相關(guān)文章
- 這篇文章主要介紹了淺談原生頁(yè)面兼容IE9問(wèn)題的解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起2020-12-16
新版chrome瀏覽器設(shè)置允許跨域的實(shí)現(xiàn)
這篇文章主要介紹了新版chrome瀏覽器設(shè)置允許跨域的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起2020-11-30css hack之\9和\0就可能對(duì)hack IE11\IE9\IE8無(wú)效
每次設(shè)計(jì)一張網(wǎng)頁(yè)或一個(gè)表單,都被各種瀏覽器的兼容問(wèn)題傷透腦筋,尤其是IE家族。在做兼容性設(shè)計(jì)時(shí),我們往往會(huì)使用各種瀏覽器能識(shí)別的獨(dú)特語(yǔ)法進(jìn)行hack,從而達(dá)到各種瀏覽2020-03-20css區(qū)分ie8/ie9/ie10/ie11 chrome firefox的代碼
這篇文章主要介紹了css區(qū)分ie8/ie9/ie10/ie11 chrome firefox的代碼,需要的朋友可以參考下2020-03-20- 這篇文章主要介紹了解決CSS瀏覽器兼容性問(wèn)題的4種方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)2020-02-28
常見(jiàn)的瀏覽器兼容性問(wèn)題(小結(jié))
這篇文章主要介紹了常見(jiàn)的瀏覽器兼容性問(wèn)題(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)2020-02-20- 這篇文章主要介紹了border-radius IE8兼容處理的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)2020-02-12
淺談?dòng)龅降膸讉€(gè)瀏覽器兼容性問(wèn)題
這篇文章主要介紹了淺談?dòng)龅降膸讉€(gè)瀏覽器兼容性問(wèn)題,詳細(xì)的介紹了幾種我遇到的問(wèn)題和解決方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-26- 這篇文章主要介紹了base64圖片在各種瀏覽器的兼容性處理的相關(guān)資料,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-14
對(duì)常見(jiàn)的css屬性進(jìn)行瀏覽器兼容性總結(jié)(推薦)
這篇文章主要介紹了對(duì)常見(jiàn)的css屬性進(jìn)行瀏覽器兼容性總結(jié)(推薦)的相關(guān)資料,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-20