CSS hack合集

2018-06-19 18:45 更新
      本來已經(jīng)拋棄IE6|7|8了,可是最近發(fā)現(xiàn)要考慮IE兼容性的網(wǎng)站還是有不少的,所以這兩天了解了一下CSS HACK,在這里簡單地總結(jié)一下!


1、何為HACK?

簡單的說,HACK就是只有特定瀏覽器才能識別這段hack代碼。Hack也可以說是讓前端最為頭疼的問題,因為要寫N多種兼容代碼。當然,IE是最讓人蛋疼的。

一般來說,CSS HACK有3種表現(xiàn)形式:
  • CSS屬性前綴法::比如 IE6能識別下劃線"_"和星號" * ",IE7能識別星號" * ",但不能識別下劃線"_",IE6~IE10都認識"\9",但firefox對前面三個都不能認識。
  • CSS選擇器前綴法:比如 IE6能識別*html .class{},IE7能識別*+html .class{}或者*:first-child+html .class{}。
  • IE條件注釋法:針對所有IE, <!--[if IE]>IE瀏覽器顯示的內(nèi)容 <![endif]-->。比如:針對IE6及以下版本: <!--[if lt IE 6]>只在IE6-顯示的內(nèi)容 <![endif]-->。這類Hack不僅對CSS生效,對寫在判斷語句里面的所有代碼都會生效(注:IE10+已經(jīng)不再支持條件注釋)。

下面將對這三種形式一一分析!

2、CSS 屬性前綴法

這里提供一個測試實例(所有下面的代碼都可以在這個實例里找到):測試實例

(1)IE6(_)

.test1 { _color: red; }


(2)IE7及其以下版本(*)

如下設(shè)置,IE7及其以下版本中都會生效:

.test2 { *color: yellow; }

如果是在選擇器上設(shè)置,則只會在IE6中生效:

*html .test { color: gold; }


(3)IE6/IE7/IE8(\9)

網(wǎng)上的資料說只有IE6/IE7/IE8中生效,可是經(jīng)測試,在IE9/IE10中也同樣生效(如果知道原因的,請告知):

.test3 { color: purple\9; }


(4)IE8/IE9/IE10/IE11(\0)

在IE8/IE9/IE10/IE11中生效:

.test4 { color: green\0; }


(5)IE6(-)

在IE6中生效:

.test5 { -color: pink; }


(6)IE6/IE7(+)

在IE6/IE7中生效:

.test6 { +color: gold; }


(7)IE6/IE7(*+)

如果在類的屬性上加,會在IE6/IE7都生效:

.test7 { *+color: blue; }


如果在選擇器上加,只會在IE7生效:

*+html .test { color: black; }


(8)!important

除了IE6,其他瀏覽器中都生效:

.test8 { color: #fff !important; }


(9)IE9/IE10(\9\0)

.test9 { color: orange\9\0; }


一般寫HACK的順序:從最新版本到低版本,比如:新版本、IE(10/9/8)、IE(7/6)

color: black;  /* 所有 */

color: white !important; /* 除了IE6外 */

color: orange\9\0; /* IE 9/10 */

color: green\0;  /* IE 8/9/10 */

*color: yellow;   /* IE6/7 */

+color: gold;  /* IE6/7 */

*+color: blue; /* IE6/7 */

_color: red;  /* IE6 */


3、CSS選擇器前綴法

(1)*

只在IE6中生效:

*html .test21 { color: gold; }


(2)*+

只在IE7中生效:

*+html .test22 { color: blue; }


(3)IE6/IE7
在IE6/IE7中生效:

@media screen\9 {   

  .test23 { color: purple; }  

}

(4)IE6/IE7/IE8
在IE6/IE7/IE8中生效:

@media \0screen\,screen\9 {   

  .test24 { color: gold; }  

}

(5)IE8
在IE8中生效:

@media \0screen {   

  .test25 { color: orange; }  

}

(6)IE8/IE9/IE10/IE11

在IE8/IE9/IE10/IE11中生效:

@media screen\0 {   

  .test26 { color: green; }  

}

(7)IE9/IE10/IE11
在IE9/IE10/IE11中生效:

@media screen and (min-width: 0\0) {   

  .test27 { color: red; }  

}


4、條件注釋

下面的N表示版本。

(1)IE

<!--[if IE]> 所有IE中生效 <![endif]-->


(2)IE N

比如:只在IE 7中生效:

<!--[if IE 7]>  只在IE7生效 <![endif]-->


注意:版本之間要留空格,比如:IE7是無效的,應(yīng)該是IE 7。

(3)gt

gt符號表示大于運算符。比如:在IE7以上(不包含IE7)生效

<!--[if gt IE 6]>  在IE6以上生效 <![endif]-->


(4)!

!符號表示非運算符。比如:在IE 6上不生效

<!--[if ! IE 6]>  在IE6上不生效(非IE6生效) <![endif]-->


也可以這樣(所有IE都不生效):

<!--[if ! IE]>  所有IE中都不生效(非IE生效) <![endif]-->


(5)lt

lt符號表示小于運算符。比如:IE6以下(不包含IE6)版本

<!--[if lt IE 6]>  IE6以下可生效 <![endif]-->


(6)lte

lte符號表示小于或等于運算符:

<!--[if lte IE 6]>  IE6及IE6以下可生效 <![endif]-->


(7) gte

gte符號表示大于或等于運算符:

<!--[if gte IE 6]>  IE6及IE6以上可生效 <![endif]-->


(8)&

&符號表示AND運算符:

<!--[if (gt IE 6)&(lt IE 8)]> IE6版本以上且IE8版本以下可生效 <![endif]-->


(9) |

|符號表示OR運算符:

<!--[if (IE 6)|(IE 7)]>  IE6或IE7可生效 <![endif]-->


注:IE10+已經(jīng)不再支持條件注釋。

5、針對其他瀏覽器的HACK

(1)針對火狐

只在火狐中有效:

@-moz-document url-prefix() {

  .test { color: red; }

}


(2)支持所有Gecko內(nèi)核的瀏覽器(包括火狐)


*>.test { color: blue; }


(3)針對Webkit內(nèi)核瀏覽器


@media all and (min-width:0px) { color: purple; }


6、CSS選擇器的優(yōu)先級


相同權(quán)值情況下,CSS樣式的優(yōu)先級是:就近原則(也就是相同權(quán)值的,后設(shè)置的優(yōu)先):

.a { color: red; }

.b { color: blue; }


<div class="b a">我會是藍色的,而不是紅色</div>

   

優(yōu)先級規(guī)則:

  • 內(nèi)聯(lián)樣式 > 嵌入樣式 > 外部樣式   
  • ID(100) > 類選擇符(10) > 標簽(1) > 通配選擇器(*)
  • 在支持!important的情況下,其優(yōu)先級最高。


參考文章:


如果發(fā)現(xiàn)有錯誤,歡迎在下方評論區(qū)指正!



以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號