IE瀏覽器單獨寫CSS樣式的幾種方法

因為萬惡的 IE 存在各種的不標準,因此,在進行頁面開發(fā)時不免要為 IE 單獨寫一些 CSS 。熟悉的方法有 IE hacks 和條件注釋 CSS(Conditional Stylesheets),下面,不妨討論一下這兩種方法的優(yōu)缺點。
IE hacks
舉個例子,一個元素在其他瀏覽中的左邊距是 30px ,而在 IE6 中則設置為 20px ,可以如下編寫:
.demo {margin-left: 30px; _margin-left: 20px; }
對我個人而言,喜歡條件注釋 CSS 是勝于 IE hacks ,光是 IE hacks 里面帶有“hacks”這個單詞已經(jīng)讓人很不舒服,總覺得這是偏方,而且是很偏的解決方案。但是,IE hacks 也有它的優(yōu)點——
1.CSS hacks 內(nèi)嵌在普通的 CSS 里面,不會產(chǎn)生更多 HTTP 請求。
2.CSS hacks 內(nèi)嵌在普通的 CSS 里面,編寫時比較方便。
當然,它的缺點也很明顯——
1.它是不標準的產(chǎn)物。
2.內(nèi)嵌在其他 CSS 中,不便維護。尤其是當 hacks 的數(shù)量比較多的時候維護簡直是個惡夢。
3.內(nèi)嵌在其他 CSS 中,即使在非 IE 瀏覽器中也會被加載,浪費資源。
條件注釋 CSS
同樣是上面的例子,如果使用條件注釋 CSS ,可以如下編寫:
HTML:
<!--[if IE 6 ]>
<link rel="stylesheet" type="text/css" media="all" href="./ie6.css" />
<![endif]-->
ie6.css
.demo {margin-left: 20px; }
這里說明一下:條件注釋是一種 IE 專有的、對常規(guī)(X)HTML 注釋的 Miscrosoft 擴展。從 W3C 標準來說,它也是不標準的產(chǎn)物,但它是微軟官方推出的針對 IE 進行開發(fā)的方式,并且條件注釋對于其他所有瀏覽器作為常規(guī)注釋出現(xiàn),因此對其他瀏覽器無害。
條件注釋 CSS 的好處是在獨立的 CSS 文件中編寫,能準確控制在特定的 IE 中加載,不會造成資源浪費,并且便于維護。缺點就是會產(chǎn)生多余的 HTTP 請求,尤其是當你需要兼容的 IE 版本很多的時候,你就需要產(chǎn)生多個 HTTP 請求,這對于本來通道數(shù)目就少的低版本 IE 來說無疑會影響頁面加載速度。
顯然,以上兩種方法都不是很好的方法,因此,接下來介紹一種相對來說更好的解決方案。
條件注釋 html 標簽
這種方案也是利用條件注釋,但并不是對 CSS 使用條件注釋,而是對 html 標簽使用條件注釋,引入不同的 class ,從而區(qū)分不同的 IE 以及其他瀏覽器。例如:
<!DOCTYPE html>
<!--[if IE 6 ]> <html class="ie6 lte_ie6 lte_ie7 lte_ie8" lang="zh-CN"> <![endif]-->
<!--[if lte IE 6 ]> <html class="lte_ie6 lte_ie7 lte_ie8" lang="zh-CN"> <![endif]-->
<!--[if lte IE 7 ]> <html class="lte_ie7 lte_ie8" lang="zh-CN"> <![endif]-->
<!--[if lte IE 8 ]> <html class="lte_ie8" lang="zh-CN"> <![endif]-->
<!--[if (gte IE 9)|!(IE)]><!--><html lang="zh-CN"><!--<![endif]-->
然后把針對特定 IE 的 CSS 加上相應的 class 并寫在普通 CSS 文件里即可。例如上面的例子則可以在 CSS 文件里編寫:
.ie6 .demo {margin-left: 20px; }
這種方法吸收了條件注釋表達式的好處同時又不會產(chǎn)生多余的 HTTP 請求,只是由于這些針對特定 IE 的 CSS 與普通的 CSS 放在一起,即不是相應的 IE 也會被加載,因此如果 CSS 數(shù)目比較多的話就會像使用 hacks 那樣,造成浪費,開發(fā)者需要根據(jù)具體情況選擇方法。
相關文章
- 在IE8、IE9上可能好好的,當我們在IE6、IE7或者是其他的瀏覽器上再瀏覽這些頁面時,可能會發(fā)現(xiàn)我們的頁面已經(jīng)面目全非了,那么如何解決兼容問題呢,本文就為大家一一道來2014-05-04