別誤會(huì),IE是不支持CSS3高級(jí)選擇器,包括最新的IE8(詳見(jiàn)《CSS選擇器的瀏覽器支持》),但是CSS選擇器的確是很有用的,它可以大大的簡(jiǎn)化我們的工作,提高我們的代碼效率,并讓我們很方便的制作高可維護(hù)性的頁(yè)面。
然而IE對(duì)高級(jí)CSS選擇器特別是CSS3選擇器的支持讓我們一直不能將CSS選擇器推廣應(yīng)用。不過(guò),雖然我們無(wú)法左右瀏覽器的市場(chǎng)份額,卻可以通過(guò)一些技術(shù)改善我們的工作。我們也可以使用其它的一些技術(shù),讓IE可以變相支持CSS3選擇器。
一位來(lái)自英國(guó)的網(wǎng)頁(yè)開(kāi)發(fā)工程師Keith Clark開(kāi)發(fā)了一個(gè)JavaScript方案來(lái)使IE支持CSS3選擇器。該腳本支持從IE5到IE8的各個(gè)版本。
用法
你只需要下載Robert Nyman的DOMAssistant腳本和ie-css3.js并將它們?cè)谀愕捻?yè)面的head標(biāo)簽中導(dǎo)入,如下:
<head> <script type="text/javascript" src="DOMAssistantCompressed-2.7.4.js"></script> <script type="text/javascript" src="ie-css3.js"></script> </head>
支持的選擇器
- nth-child
- nth-last-child
- nth-of-type
- nth-last-of-type
- first-child
- last-child
- only-child
- first-of-type
- last-of-type
- only-of-type
- empty
ie-css3的一些限制
- 樣式表必須通過(guò)<link>標(biāo)簽引入。頁(yè)面級(jí)的樣式表或者內(nèi)聯(lián)的樣式表將無(wú)效。不過(guò)
- 可以在外部樣式文件中使用@import 導(dǎo)入其它樣式文件;
- 樣式表文件必須和頁(yè)面放在同一個(gè)域名下面;
- 使用file://路徑的樣式文件將由于瀏覽器的安全問(wèn)題而不起作用;
- :not()選擇器尚不支持;
- 該方法不是動(dòng)態(tài)的,樣式被應(yīng)用之后再改變DOM,將會(huì)無(wú)效。
如何工作的?
ie-css3.js下載頁(yè)面的每一個(gè)樣式文件并解析它的CSS3偽選擇器。如果一個(gè)選擇器被找到,它就會(huì)被替換為同名的CSS class。比如: div:nth-child(2) 將會(huì)變成 div._iecss-nth-child-2 。然后,Robert Nyman的DOMAssistant用于尋找匹配元素CSS3選擇器的DOM節(jié)點(diǎn)然后將相應(yīng)的CSS類添加給它。
最終,元素的樣式表會(huì)被新的版本替代,然后用CSS3選擇器對(duì)相應(yīng)元素添加對(duì)應(yīng)的樣式。
避免IE的CSS解釋器
根據(jù)W3C的規(guī)定,一個(gè)瀏覽器應(yīng)該無(wú)視它不認(rèn)識(shí)的CSS規(guī)則。這就出現(xiàn)一個(gè)問(wèn)題——我們需要利用樣式表文件中的CSS3選擇器,但是IE會(huì)將它們丟棄。
為了避免這個(gè)問(wèn)題,每一個(gè)樣式文件都會(huì)通過(guò)XMLHttpRequest下載。這允許該腳本繞開(kāi)瀏覽器內(nèi)置的CSS解釋器并能夠讀取原始的CSS文件。
- 訪問(wèn)項(xiàng)目主頁(yè)
- 下載ie-css3.js
- 下載DOMAssistant
替代方案
顯然這個(gè)也并非完美的方案,對(duì)于Ajax網(wǎng)站來(lái)說(shuō),它基本上是不能用的,因?yàn)樵谏傻臉邮奖肀粦?yīng)用之后再改變DOM,就不會(huì)有效了。但是事實(shí)上我們可以自己來(lái)自定義一個(gè)ie-css3的。只是沒(méi)有它這個(gè)這么智能。
出處:前端觀察
責(zé)任編輯:bluehearts
上一頁(yè) 下一頁(yè) 在IE中使用高級(jí)CSS3選擇器 [2]
◎進(jìn)入論壇網(wǎng)頁(yè)制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評(píng)論。
|