CSS hack是經過在CSS樣式中加入一些特殊的符號,讓不一樣的瀏覽器識別不一樣的符號(什麼樣的瀏覽器識別什麼樣的符號是有標準的,CSS hack就是讓你記住這個標準),以達到應用不一樣的CSS樣式的目的。javascript
例如:
css
一、
margin屬性在ie6中顯示的距離會比其餘瀏覽器中顯示的距離寬2倍,也就是說margin-left:20px;
在ie6中距左側對象的實際顯示距離是40px,而在非ie6中顯示的距左側對象的距離是設置的值20px;因此要想設置一個對象距離左側對象的距離在全部瀏覽器中都顯示是20px的寬度的樣式應爲:.kwstu{margin-left:20px;_margin-left:20px;}
html
二、kwstu{background:green;/*forfirefox*/width:300px;_width:200px;}
,通常瀏覽器會先給元素使用width:300px;的樣式,緊接着後面還有個_width:200px;因爲下劃線_width只有IE6能夠識別,因此此樣式在IE6中實際設置對象的寬度爲200px,後面的把前面的給覆蓋了,而其餘瀏覽器不識別_width不會執行_width:200px;這句樣式,因此在其餘瀏覽器中設置對象的寬度就是300px。java
三、好比要分辨IE6和firefox兩種瀏覽器,能夠這樣寫:web
div { background:green;/*forfirefox*/ *background:red;/*forIE6*/(bothIE6&&IE7) }chrome
我在IE6中看到是紅色的,在firefox中看到是綠色的。瀏覽器
如下是引自百度百科的定義:服務器
注意: 咱們一般主要考慮的瀏覽器有IE六、IE七、IE8、谷歌瀏覽器(chrome)、火狐(Mozilla Firefox)便可,至於咱們經常使用的傲遊、QQ的TT瀏覽器是用你計算機中裝的系統自帶瀏覽器的內核,因此只須要兼容以上瀏覽器便可兼容TT傲遊瀏覽器。post
CSS屬性Hack、CSS選擇符Hack以及IE條件註釋Hack, Hack主要針對IE瀏覽器。spa
一、屬性級Hack:好比IE6能識別下劃線「_
」和星號「*
」,IE7能識別星號「*
」,但不能識別下劃線」_
」,而firefox兩個都不能認識。
二、選擇符級Hack:好比IE6能識別*html .class{}
,IE7能識別*+html .class{}
或者*:first-child+html .class{}
。
三、IE條件註釋Hack:IE條件註釋是微軟IE5開始就提供的一種非標準邏輯語句。好比針對全部IE:<!-[if IE]><!-您的代碼-><![endif]>
,針對IE6及如下版本:<!-[if it IE 7]><!-您的代碼-><![endif]->
,這類Hack不只對CSS生效,對寫在判斷語句裏面的全部代碼都會生效。
PS:條件註釋只有在IE瀏覽器下才能執行,這個代碼在非IE瀏覽下被當作註釋視而不見。能夠經過IE條件註釋載入不一樣的CSS、JS、HTML和服務器代碼等。
解釋一下:上面的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:
注:IE都能識別*
;標準瀏覽器(如FF)不能識別*
;IE6能識別*
;不能識別 !important
;IE7能識別*
,能識別!important
;FF不能識別*
,但能識別!important
;
瀏覽器優先級別:
FF<IE7<IE6,CSS hack
書寫順序通常爲FF IE7 IE6
以: " #demo {width:100px;}
"爲例:
IE6 hack
_background-color:#CDCDCD;/*ie6*/
IE7 hack
注意寫hack的順序,其中:
可綜合上述規律靈活應用。
IE9 和 IE8 以及其餘版本的區別說明
選擇符級HackCSS內部選擇符級Hack語法
<hack> selector{ sRules }
說明選擇不一樣的瀏覽器及版本儘量減小對CSS Hack的使用。Hack有風險,使用需謹慎一般如未做特別說明,本文檔全部的代碼和示例的默認運行環境都爲標準模式。一些CSS Hack因爲瀏覽器存在交叉認識,因此須要經過層層覆蓋的方式來實現對不一樣瀏覽器進行Hack的。簡單列舉幾個:
內部屬性HackCSS內部屬性級Hack語法:
selector{<hack>?property:value<hack>?;}
取值:
注意: 不論是什麼方法,書寫的順序都是firefox的寫在前面,IE7的寫在中間,IE6的寫在最後面。補充:IE6能識別*
,但不能識別 !important
,IE7能識別 *
,也能識別!important
;FF不能識別 *
,但能識別!important
;下劃線」 _
「,IE6支持下劃線,IE7和firefox均不支持下劃線。
CSS hack是由於現有瀏覽器對標準的解析不一樣,爲了兼容各瀏覽器,所採用的一種補救方法。CSS hack是一種相似做弊的手段,以欺騙瀏覽器的方式達到兼容的目的,是用瀏覽器的兼容性差別來解決瀏覽器的兼容性問題。所以,在設計之初,寫CSS hack須要遵循如下三條原則:
代碼以下: