北大青鳥(niǎo)課程講解之:css hack

北京北大青鳥(niǎo)學(xué)校學(xué)術(shù)部老師講解:CSS hack由于不同的瀏覽器,比如Internet Explorer 6,Internet Explorer 7,Mozilla Firefox等,對(duì)CSS的解析認(rèn)識(shí)不一樣,因此會(huì)導(dǎo)致生成的頁(yè)面效果不一樣,得不到我們所需要的頁(yè)面效果。 這個(gè)時(shí)候我們就需要針對(duì)不同的瀏覽器去寫(xiě)不同的CSS,讓它能夠同時(shí)兼容不同的瀏覽器,能在不同的瀏覽器中也能得到我們想要的頁(yè)面效果。這個(gè)針對(duì)不同的瀏覽器寫(xiě)不同的CSS code的過(guò)程,就叫CSS hack!

北大青鳥(niǎo)學(xué)校丁老師介紹:編輯本段CSS Hack的原理是什么
由于不同的瀏覽器對(duì)CSS的支持及解析結(jié)果不一樣,還由于CSS中的優(yōu)先級(jí)的關(guān)系。我們就可以根據(jù)這個(gè)來(lái)針對(duì)不同的瀏覽器來(lái)寫(xiě)不同的CSS。

CSS Hack大致有3種表現(xiàn)形式,CSS類內(nèi)部Hack、選擇器Hack以及HTML頭部引用(if IE)Hack,CSS Hack主要針對(duì)IE瀏覽器。

類內(nèi)部Hack:比如 IE6能識(shí)別下劃線"_"和星號(hào)" * ",IE7能識(shí)別星號(hào)" * ",但不能識(shí)別下劃線"_",而firefox兩個(gè)都不能認(rèn)識(shí)。等等

選擇器Hack:比如 IE6能識(shí)別*html .class{},IE7能識(shí)別*+html .class{}或者*:first-child+html .class{}。等等

HTML頭部引用(if IE)Hack:針對(duì)所有IE:<!--[if IE]><!--您的代碼--><![endif]-->,針對(duì)IE6及以下版本:<!--[if lt IE 7]><!--您的代碼--><![endif]-->,這類Hack不僅對(duì)CSS生效,對(duì)寫(xiě)在判斷語(yǔ)句里面的所有代碼都會(huì)生效。

書(shū)寫(xiě)順序,一般是將識(shí)別能力強(qiáng)的瀏覽器的CSS寫(xiě)在后面。下面如何寫(xiě)里面說(shuō)得更詳細(xì)些。(北大青鳥(niǎo)課程

 

北大青鳥(niǎo)學(xué)校丁老師介紹:如何寫(xiě)CSS Hack

比如要分辨IE6和firefox兩種瀏覽器,可以這樣寫(xiě):

  <style>

  div{

  background:green; /* for firefox */

  *background:red; /* for IE6 */

  }

  </style>

我在IE6中看到是紅色的,在firefox中看到是綠色的。(北大青鳥(niǎo)課程)

北大青鳥(niǎo)學(xué)校解釋一下:

上面的css在firefox中,它是認(rèn)識(shí)不了后面的那個(gè)帶星號(hào)的東東是什么的,于是將它過(guò)濾掉,不予理睬,解析得到的結(jié)果是:div{background:green},于是理所當(dāng)然這個(gè)div的背景是綠色的。

在IE6中呢,它兩個(gè)background都能識(shí)別出來(lái),它解析得到的結(jié)果是:div{background:green;background:red;},于是根據(jù)優(yōu)先級(jí)別,處在后面的red的優(yōu)先級(jí)高,于是當(dāng)然這個(gè)div的背景顏色就是紅色的了。(北大青鳥(niǎo)課程)

  CSS hack:區(qū)分IE6,IE7,firefox

  區(qū)別不同瀏覽器,CSS hack寫(xiě)法:

  區(qū)別IE6與FF:

  background:orange;*background:blue;

  區(qū)別IE6與IE7:

  background:green !important;background:blue;

  區(qū)別IE7與FF:

  background:orange; *background:green;

  區(qū)別FF,IE7,IE6:

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

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

  注:IE都能識(shí)別*;標(biāo)準(zhǔn)瀏覽器(如FF)不能識(shí)別*;

  IE6能識(shí)別*,某些情況下不能識(shí)別 !important,(北大青鳥(niǎo)課程)

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

  IE6支持重定義中的!important,例如:

  .yuanxin {color:#e00!important;}

  .yuanxin {color:#000;}

  你將會(huì)發(fā)現(xiàn)定義了樣式class="yuanxin"時(shí),在IE下,字體顯示為紅色(#e00)。

  但不支持同一定義中的!important。例如:

  .yuanxin {color:#e00!important;color:#000}

  此時(shí)在IE6下不支持,你將會(huì)發(fā)現(xiàn)定義了樣式class="yuanxin"時(shí),字體顯示為黑色(#000)。

  不包括如下這種形式的同一定義中的!important。

  #pageOver{height:expression(document.documentElement.offsetHeight)!important;

  height:100%;}此種形式的定義,IE6中是可以解釋到important的。

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

  IE7能識(shí)別*,也能識(shí)別!important;

  FF不能識(shí)別*,但能識(shí)別!important;

                          IE6                 IE7                 FF

  *                         √                 √                 ×

  !important         ×                 √                √

瀏覽器優(yōu)先級(jí)別:FF<IE7<IE6,CSS hack書(shū)寫(xiě)順序一般為FF IE7 IE6

 

  以: " #demo {width:100px;} "為例;(北大青鳥(niǎo)課程)

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

  * html #demo {width:120px;} /*會(huì)被IE6執(zhí)行,之前的定義會(huì)被后來(lái)的覆蓋,所以#demo的寬度在IE6就為120px; */

  *+html #demo {width:130px;} /*會(huì)被IE7執(zhí)行*/

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

  所以最后,#demo的寬度在三個(gè)瀏覽器的解釋為:

  FIREFOX:100px;

  ie6:120px;

  ie7:130px;

  IE8 最新css hack:

  "\9" 例:"border:1px \9;".這里的"\9"可以區(qū)別所有IE和FireFox.

   "\0" IE8識(shí)別,IE6、IE7不能.

  "*" IE6、IE7可以識(shí)別.IE8、FireFox不能.

  "_" IE6可以識(shí)別"_",IE7、IE8、FireFox不能.(北大青鳥(niǎo)課程)

以上內(nèi)容由北京北大青鳥(niǎo)學(xué)校學(xué)術(shù)部提供

北大青鳥(niǎo)網(wǎng)上報(bào)名
北大青鳥(niǎo)招生簡(jiǎn)章