全文引自這里,很棒的一篇文章
-
what
由于不同廠商的瀏覽器或某瀏覽器的不同版本(IE6~IE11,F(xiàn)irefox/Safari/Opera/Chrome等),對css的支持、解析不一樣。這時(shí),我們?yōu)榱双@得統(tǒng)一的頁面效果,就需要針對不同的瀏覽器或不同的版本寫特定的css樣式,把這個(gè)針對不同瀏覽器/不同版本寫相應(yīng)的css code的過程叫做css hack。 -
how
由于不同的瀏覽器和瀏覽器的各版本對css的支持及解析結(jié)果不一樣,以及css優(yōu)先級對瀏覽器展現(xiàn)效果的影響,我們可以據(jù)此針對不同的瀏覽器情景應(yīng)用不同的css。
-
css hack 分類
有三種表現(xiàn)形式,css屬性前綴法,選擇器前綴法,以及IE條件注釋法。- 屬性前綴法(即類內(nèi)部hack)
- 選擇器前綴法
- IE條件注釋法
css hack一般是將適用范圍廣,被識(shí)別能力強(qiáng)的css定義在前面。
- css hack方式一:條件注釋法(適用于IE10以下,IE10以后不再支持條件注釋)
- 條件注釋屬性:
- gt:greater than,選擇條件版本以上版本,不包含條件版本。
lt: less than ,選擇條件版本以下版本,不包含條件版本。
gte:greater than or equal ,選擇條件版本以上版本,包含條件版本。
lte:less than or equal ,選擇條件版本以下版本,包含條件版本。
?。哼x擇條件版本以外所有版本,無論高低。
- gt:greater than,選擇條件版本以上版本,不包含條件版本。
- 實(shí)例
<div class="div5">非IE</div>
html腳本中平常的注釋方法``,條件注釋法只有IE10以下的IE瀏覽器可以識(shí)別,對于別的瀏覽器那么就只能看見的是一對封閉的不起作用的注釋。對于非IE 的注釋,注意里面有一個(gè)`
-
css hack方式二:類內(nèi)屬性前綴法
屬性前綴是在CSS樣式屬性名上加上一些只有特定瀏覽器才能識(shí)別的hack前綴,已達(dá)到預(yù)期的頁面展現(xiàn)效果。
以下討論的是標(biāo)準(zhǔn)模式中的hack方法 - 規(guī)則
*color:IE5.5、6、7
+color : IE5.5、6、7
#color : IE5.5、6、7
-color:IE5.5、6
_color: IE5.5、6
這幾個(gè)當(dāng)中,我喜歡用*與 _
color\0 : IE8、9、10、11(12以上沒測)(此處有些地方說歐朋也識(shí)別,可是我測試?yán)?,不管用,不知道?。?br> color\9 : IE6、7、8、9、10(11不支持)
color\9\0:IE8、9、10(其他不支持)
\9\0取了共集
color:red!important;提高該設(shè)置的優(yōu)先級 - css hack方式三:選擇器前綴法
- 規(guī)則
@media screen\9{……}(只對IE6、7生效)
@media \0screen{……}(只對IE8生效)
@media \0screen,screen\9{……}(對IE6,7,8生效)
@media screen\0{……}(只對IE8、9、10生效)
@media screen and (min-width:0\0){……}(只對IE9,10有效)
@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){……}(對IE10,11有效,以上沒測)
- hack 利弊
盡量避免使用css hack,但有些情況下,為了顧及用戶體驗(yàn)實(shí)現(xiàn)向下兼容,不得已才使用hack。但過多使用會(huì)造成html文檔混亂不堪,增加管理和維護(hù)的負(fù)擔(dān)。