首先,先把前輩的文章放在看得見的位置,以示尊重:http://www.javashuo.com/article/p-xbdzgxsb-h.htmljavascript
總結
二、hack:本意:修改,引伸爲對軟件的二次修改 css hack的意思是瀏覽器兼容html 三、hack實例: 一、屬性級Hack:好比IE6能識別下劃線「 |
咱們先看看百度百科的定義nginx
注意: 咱們一般主要考慮的瀏覽器有IE六、IE七、IE8、谷歌瀏覽器(chrome)、火狐(Mozilla Firefox)便可,至於咱們經常使用的傲遊、QQ的TT瀏覽器是用你計算機中裝的系統自帶瀏覽器的內核,因此只須要兼容以上瀏覽器便可兼容TT傲遊瀏覽器。ruby 可是,服務器 CSS hack是由於現有瀏覽器對標準的解析不一樣,爲了兼容各瀏覽器,所採用的一種補救方法。CSS hack是一種相似做弊的手段,以欺騙瀏覽器的方式達到兼容的目的,是用瀏覽器的兼容性差別來解決瀏覽器的兼容性問題。所以,在設計之初,寫CSS hack須要遵循如下三條原則:
|
hack是什麼
因爲不一樣的瀏覽器,好比Internet Explorer 6,Internet Explorer 7,Mozilla Firefox等,對CSS的解析認識不同,所以會致使生成的頁面效果不同,得不到咱們所須要的頁面效果。
Hack,顧名思義是修改的意思。 此次普通的詞彙在IT上獲得了很普遍的應用: 一、針對Discuz!系統,Dvbbs系統等論壇軟件的二次修改。 Hack是基於開源的程序的基礎,對其代碼進行增長、刪除或者修改、優化,使之在功能上符合新的需求。 目前,Hack大多和插件混爲一談,其實兩者是有很大區別的:插件通常是利用程序的API(接口),複用程序底層,利用一些程序既有的函數和類製做新的小做品,通常有文件的增長,且符合標準的插件,其目錄結構和文件名都是有必定格式的(如Discuz!的插件文件需放在plugin目錄下)。而Hack則是針對原程序文件的直接修改,在格式上也天然沒有太嚴格的規定,且通常沒有文件的增長。 因爲基礎是開源免費的,通常的Hack也都是開源免費的,許多程序愛好者會根據本身或者朋友的需求,去製做一些小Hack在各個程序的官方交流論壇發佈(好比動網的hack就會發布在動網的交流論壇的插件區),以得到站長們和官方的確定和鼓勵。
3、那麼在HTML中CSS hack到底是什麼意思呢?CSS hack是經過在CSS樣式中加入一些特殊的符號,讓不一樣的瀏覽器識別不一樣的符號(什麼樣的瀏覽器識別什麼樣的符號是有標準的,CSS hack就是讓你記住這個標準),以達到應用不一樣的CSS樣式的目的,好比 如下是引自百度百科的定義 CSS hack因爲不一樣廠商的瀏覽器,好比Internet Explorer,Safari,Mozilla Firefox,Chrome等,或者是同一廠商的瀏覽器的不一樣版本,如IE6和IE7,對CSS的解析認識不徹底同樣,所以會致使生成的頁面效果不同,得不到咱們所須要的頁面效果。 這個時候咱們就須要針對不一樣的瀏覽器去寫不一樣的CSS,讓它可以同時兼容不一樣的瀏覽器,能在不一樣的瀏覽器中也能獲得咱們想要的頁面效果。 簡單的說,CSS hack的目的就是使你的CSS代碼兼容不一樣的瀏覽器。固然,咱們也能夠反過來利用CSS hack爲不一樣版本的瀏覽器定製編寫不一樣的CSS效果。
注意: 咱們一般主要考慮的瀏覽器有IE六、IE七、IE8、谷歌瀏覽器(chrome)、火狐(Mozilla Firefox)便可,至於咱們經常使用的傲遊、QQ的TT瀏覽器是用你計算機中裝的系統自帶瀏覽器的內核,因此只須要兼容以上瀏覽器便可兼容TT傲遊瀏覽器。 CSS Hack常見的有三種形式: CSS屬性Hack、CSS選擇符Hack以及IE條件註釋Hack, Hack主要針對IE瀏覽器。 一、屬性級Hack:好比IE6能識別下劃線「 二、選擇符級Hack:好比IE6能識別 CSS 三、IE條件註釋Hack:IE條件註釋是微軟IE5開始就提供的一種非標準邏輯語句。好比針對全部IE: PS:條件註釋只有在IE瀏覽器下才能執行,這個代碼在非IE瀏覽下被當作註釋視而不見。能夠經過IE條件註釋載入不一樣的CSS、JS、HTML和服務器代碼等。 2、CSS hack的實際應用CSS hack用來解決有些css屬性在不一樣瀏覽器中顯示的效果不同的問題,如margin屬性在ie6中顯示的距離會比其餘瀏覽器中顯示的距離寬2倍,也就是說 div{
background:green;/*forfirefox*/ *background:red;/*forIE6*/(bothIE6&&IE7) } 我在IE6中看到是紅色的,在firefox中看到是綠色的。 解釋一下:上面的css在firefox中,它是認識不了後面的那個帶星號的東西是什麼的,因而將它過濾掉,不予理睬,解析獲得的結果是: 區別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<IE7<IE6,CSS hack 書寫順序通常爲FF IE7 IE6 以: " #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; IE8 最新css hack: "9" 例:"border:1px 9;".這裏的"9"能夠區別全部IE和FireFox.(只針對IE9 Hack) "0" IE8識別,IE六、IE7不能. "*" IE六、IE7能夠識別.IE八、FireFox不能. "_" IE6能夠識別"_",IE七、IE八、FireFox不能. IE6 hack _background-color:#CDCDCD;/*ie6*/ IE7 hack *background-color:#dddd00; /* ie 7*/IE8 hack background-color:red 0; /* ie 8/9*/IE9 hack background-color:blue 90;火狐,傲遊,瀏覽器通用 background-color:red!important; 注意寫hack的順序,其中: background-color:red0;IE8和IE9都支持; background-color:blue90; 僅IE9支持; 另外,background-color:eeeeee9;的HACK支持IE6-IE8,可是IE8不能識別「*」和「_」的CSS HACK。 可綜合上述規律靈活應用。 IE9 和 IE8 以及其餘版本的區別說明 background-color:blue; 各個瀏覽器都認識,這裏給firefox用; background-color:red9;9全部的ie瀏覽器可識別; background-color:yellow0; 0 是留給ie8的,最新版opera也認識,後面自有hack寫了給opera認的,因此,0咱們就認爲是給ie8留的; +background-color:pink; + ie7定了; _background-color:orange; _專門留給神奇的ie6; :root #test { background-color:purple9; } :root是給ie9的,網上流傳了個版本是 :root #test { background- color:purple0;},這個,新版opera也認識,因此經筆者反覆驗證最終ie9特有的爲:root 選擇符 {屬性9;} @media all and (min-width:0px){ #test {background-color:black0;} } 這個是總是跟ie搶着認0的神奇的opera,必須加個0,否則firefox,chrome,safari也都認識。。。 @media screen and (-webkit-min-device-pixel-ratio:0){ #test {} }最後這個是瀏覽器新貴chrome和safari的。 選擇符級HackCSS內部選擇符級Hack語法 <hack> selector{ sRules } 說明選擇不一樣的瀏覽器及版本儘量減小對CSS Hack的使用。Hack有風險,使用需謹慎一般如未做特別說明,本文檔全部的代碼和示例的默認運行環境都爲標準模式。一些CSS Hack因爲瀏覽器存在交叉認識,因此須要經過層層覆蓋的方式來實現對不一樣瀏覽器進行Hack的。簡單列舉幾個: * html .test{color:#090;} /* For IE6 and earlier */ * + html .test{color:#ff0;} /* For IE7 */ .test:lang(zh-cn){color:#f00;} /* For IE8+ and not IE */ .test:nth-child(1){color:#0ff;} /* For IE9+ and not IE */ 內部屬性HackCSS內部屬性級Hack語法: selector{<hack>?property:value<hack>?;} 取值: 注意: 不論是什麼方法,書寫的順序都是firefox的寫在前面,IE7的寫在中間,IE6的寫在最後面。補充:IE6能識別 3、爲何不推薦不推薦使用CSS hack來解決兼容性問題CSS hack是由於現有瀏覽器對標準的解析不一樣,爲了兼容各瀏覽器,所採用的一種補救方法。CSS hack是一種相似做弊的手段,以欺騙瀏覽器的方式達到兼容的目的,是用瀏覽器的兼容性差別來解決瀏覽器的兼容性問題。所以,在設計之初,寫CSS hack須要遵循如下三條原則:
經常使用的CSS Hack代碼以下: |