天天看點

淺談CSS hack

什麼是CSS hack?

由于不同的浏覽器,比如Internet Explorer 6,Internet Explorer 7,Mozilla Firefox等,對CSS的解析認識不一樣,是以會導緻生成的頁面效果不一樣,得不到我們所需要的頁面效果。

  這個時候我們就需要針對不同的浏覽器去寫不同的CSS,讓它能夠同時相容不同的浏覽器,能在不同的浏覽器中也能得到我們想要的頁面效果。

  這個針對不同的浏覽器寫不同的CSS code的過程,就叫CSS hack,也叫寫CSS hack。

  CSS Hack的原理是什麼

  由于不同的浏覽器對CSS的支援及解析結果不一樣,還由于CSS中的優先級的關系。我們就可以根據這個來針對不同的浏覽器來寫不同的CSS。

  比如 IE6能識别下劃線"_"和星号" * ",IE7能識别星号" * ",但不能識别下劃線"_",而firefox兩個都不能認識。等等

  書寫順序,一般是将識别能力強的浏覽器的CSS寫在後面。下面如何寫裡面說得更詳細些。

  如何寫CSS Hack

  比如要分辨IE6和firefox兩種浏覽器,可以這樣寫:

  <style>

  div{

  background:green; /* for firefox */

  *background:red; /* for IE6 */

  }

  </style>

  我在IE6中看到是紅色的,在firefox中看到是綠色的。

  解釋一下:

  上面的css在firefox中,它是認識不了後面的那個帶星号的東東是什麼的,于是将它過濾掉,不予理睬,解析得到的結果是:div{background:green},于是理所當然這個div的背景是綠色的。

  在IE6中呢,它兩個background都能識别出來,它解析得到的結果是:div{background:green;background:red;},于是根據優先級别,處在後面的red的優先級高,于是當然這個div的背景顔色就是紅色的了。

  CSS hack:區分IE6,IE7,firefox

  差別不同浏覽器,CSS hack寫法:

  差別IE6與FF:

  background:orange;*background:blue;

  差別IE6與IE7:

  background:green !important;background:blue;

  差別IE7與FF:

  background:orange; *background:green;

  差別FF,IE7,IE6:

  background:orange;*background:green;_background:blue;

  background:orange;*background:green !important;*background:blue;

  注:IE都能識别*;标準浏覽器(如FF)不能識别*;

  IE6能識别*,但不能識别 !important,

  IE7能識别*,也能識别!important;

  FF不能識别*,但能識别!important;

  IE6 IE7 FF

  * √ √ ×

  !important × √ √

  浏覽器優先級别:FF<IE7<IE6,CSS hack書寫順序一般為FF IE7 IE6

  以: " #demo {width:100px;} "為例;

  #demo {width:100px;} /*被FIREFOX,IE6,IE7執行.*/

  * html #demo {width:120px;} /*會被IE6執行,之前的定義會被後來的覆寫,是以#demo的寬度在IE6就為120px; */

  *+html #demo {width:130px;} /*會被IE7執行*/

  ---------------

  是以最後,#demo的寬度在三個浏覽器的解釋為:

  FIREFOX:100px;

  ie6:120px;

  ie7:130px;