CSS忍者:安全的CSS hacks秘籍
通過條件判斷引入樣式表
使我們能很容易在 IE 瀏覽器中通過條件注釋語句加載指定樣式表,而其他非 IE 內(nèi)核瀏覽器則自動(dòng)忽略這段蹩腳的 HTML注釋。下面是一個(gè)例子:
- <!--[if IE 8]><link rel="stylesheet" href="ie8.css"><![endif]-->
- <!--[if IE 7]><link rel="stylesheet" href="ie7.css"><![endif]-->
- <!--[if IE 6]><link rel="stylesheet" href="ie6.css"><![endif]-->
這段代碼會(huì)導(dǎo)致 IE8、IE7、IE6 各自加載對(duì)應(yīng)的樣式文件。這事實(shí)上是非常牛逼的,條件注釋給按瀏覽器加載各自不同的樣式表提供了可能,但同時(shí)需要維護(hù)多個(gè)樣式文件。
CSS hacks
這事實(shí)上是個(gè)齷齪的做法,能解決問題又不符合規(guī)范,看著也很頭大。大部分人看著它只能束手無策而又逼不得已?,F(xiàn)在可以來簡(jiǎn)單回顧一下IE 的 CSS hacks 常用的幾個(gè)方法:
- _selector{property:value;} //IE6
- *selector{property:value;} //IE6 & IE7
- selector{property:value\9;} //IE6 & IE7 & IE8
這個(gè)一般人都知道,就不多說了。但面臨的一個(gè)現(xiàn)實(shí)問題是,\9 這個(gè) hack 不只是針對(duì) IE8 以及更老版本奏效,IE9 最終的發(fā)行版依舊會(huì)受到這個(gè) hack 的影響。而 IE9 本身在 CSS 上的各種缺陷又是被修復(fù)的。如果將來 IE10、IE11 來了,那又怎么辦?顯然 \9 并不是一個(gè)嚴(yán)謹(jǐn)?shù)陌踩姆桨浮?/p>
另外,采用不同的 X-UA-Compatible 模式也會(huì)影響不同版本的 IE 渲染差異。建議設(shè)置默認(rèn)渲染模式如下:
- <meta http-equiv="X-UA-Compatible" content="IE=Edge">//標(biāo)準(zhǔn) IE 模式
那咋整呢?咋整咋整咋整?沒事,下面還有更絕的。
通過條件判斷插入指定類
既然可以用條件判斷,那么直接為不同 IE 版本輸出單獨(dú)用于設(shè)定樣式的鉤子類好了。直接上代碼:
- <!--[if !IE]><html><![endif]--> // 非 IE 瀏覽器的情況,不添加任何作用類
- <!--[if IE 6]><html class="ie6"><![endif]-->
- <!--[if IE 7]><html class="ie7"><![endif]-->
- <!--[if IE 8]><html class="ie8"><![endif]-->
如果要是 IE9、IE10 再想出現(xiàn)什么神奇的行為藝術(shù)的話,繼續(xù)添加指定作用類就行咯。并且你的樣式表也會(huì)變得異常干凈、整潔、美觀:
- .selector { color: black; }
- .ie8 .selector { color: green; } /* IE8 */
- .ie7 .selector { color: blue; } /* IE7 */
- .ie6 .selector { color: red; } /* IE6 */
當(dāng)然,標(biāo)準(zhǔn)模式的 X-UA-Compatible 聲明還是必須的,以防頁面被強(qiáng)制按照低版本的 IE 來渲染。
關(guān)于條件注釋的參考資料:http://msdn.microsoft.com/en-us/library/ms537512.aspx
【編輯推薦】