css hack

1、什么是CSS hack?

CSS hack是通過在CSS樣式中加入一些特殊的符號,讓不同的瀏覽器識別不同的符號(什么樣的瀏覽器識別什么樣的符號是有標準的,CSS hack就是讓你記住這個標準),以達到應用不同的CSS樣式的目的,比如.kwstu{width:300px;_width:200px;},一般瀏覽器會先給元素使用width:300px;的樣式,緊接著后面還有個_width:200px;由于下劃線_width只有IE6可以識別,所以此樣式在IE6中實際設置對象的寬度為200px,后面的把前面的給覆蓋了,而其他瀏覽器不識別_width不會執行_width:200px;這句樣式,所以在其他瀏覽器中設置對象的寬度就是300px;

以下是引自百度文庫的定義

簡單地講,css hack指各版本及各品牌瀏覽器之間對CSS解釋后出現網頁內容的誤差(比如我們常說錯位)的處理。由于各瀏覽器的內核不同,所以會造成一些誤差就像JS一樣,一個JS網頁特效,在微軟IE6、IE7、IE8瀏覽器有效果,但可能在火狐(Mozilla Firefox)谷歌瀏覽器無效,這樣就叫做JS hack ,所以我們對于CSS來說他們來解決各瀏覽器對CSS解釋不同所采取的區別不同瀏覽器制作不同的CSS樣式的設置來解決這些問題就叫作CSS Hack。
注意:我們通常主要考慮的瀏覽器有IE6、IE7、IE8、谷歌瀏覽器(chrome)、火狐(Mozilla Firefox)即可,至于我們常用的傲游、QQ的TT瀏覽器是用你計算機中裝的系統自帶瀏覽器的內核,所以只需要兼容以上瀏覽器即可兼容TT\傲游瀏覽器。

2、CSS hack解決問題

CSS hack用來解決有些css屬性在不同瀏覽器中顯示的效果不一樣的問題,如margin屬性在ie6中顯示的距離會比其他瀏覽器中顯示的距離寬2倍,也就是說margin-left:20px;在ie6中距左側對象的實際顯示距離是40px,而在非ie6中顯示的距左側對象的距離是設置的值20px;所以要想設置一個對象距離左側對象的距離在所有瀏覽器中都顯示是20px的寬度的樣式應為:.kwstu{margin-left:20px;_margin-left:20px;}。

3、瀏覽器識別字符標準對應表

從上圖可以分析出以下幾種情況:
1.大部分特殊字符IE瀏覽器支持,其他主流瀏覽器firefox,chrome,opera,safari不支持 (opera可識別除外)。2.\9 :所有IE瀏覽器都支持3._和- :僅IE6支持4.* :IE6、E7支持5.\0 :IE8、IE9支持,opera部分支持6.\9\0 :IE8部分支持、IE9支持7.\0\9 :IE8、IE9支持

4、各種CSS hack情況介紹

1.區別IE和非IE瀏覽器

tip{ background:blue;/非IE背景藍色 因為所有瀏覽器都能解釋/ background:red\9;/IE6、IE7、IE8、IE9背景紅色 因為\9在IE6.7.8.9中可以識別,覆蓋上面樣式 IE10跟11應該不識別,IE11測試確定/ }

2.區別IE6,IE7,IE8,FF

【區別符號】:“\9”、“”、“_”
tip{ background:blue;/
Firefox背景變藍色 所有瀏覽器都支持/ background:red\9;/IE8背景變紅色 IE6、7、8、9支持覆蓋上面樣式/ background:black;/IE7背景變黑色 IE6、7支持又一次覆蓋上面樣式/ background:orange;/IE6背景變橘色 緊IE6支持又一次覆蓋上面樣式/ }
【說明】:因為IE系列瀏覽器可讀「\9」,而IE6和IE7可讀「*」(米字號),另外IE6可辨識「
」(底線),因此可以依照順序寫下來,就會讓瀏覽器正確的讀取到自己看得懂得CSS語法,所以就可以有效區分IE各版本和非IE瀏覽器(像是Firefox、Opera、GoogleChrome、Safari等)。*

3.區別IE6、IE7、Firefox(方法1)

【區別符號】:“”、“_”
tip{ background:blue;/
Firefox背景變藍色/ background:black;/IE7背景變黑色/ background:orange;/IE6背景變橘色/ }
【說明】:IE7和IE6可讀「*」(米字號),IE6又可以讀「
」(底線),但是IE7卻無法讀取「」,至于Firefox(非IE瀏覽器)則完全無法辨識「*」和「」,因此就可以透過這樣的差異性來區分IE6、IE7、Firefox*

4.區別IE6、IE7、Firefox(方法2)

【區別符號】:“”、“!important”
tip{ background:blue;/
Firefox背景變藍色/ background:green!important;/IE7背景變綠色/ background:orange;/IE6背景變橘色/ }
【說明】:IE7可以辨識「
」和「!important」,但是IE6只可以辨識「」,卻無法辨識「!important」,至于Firefox可以讀取「!important」但不能辨識「」因此可以透過這樣的差異來有效區隔IE6、IE7、Firefox。*

5.區別IE7、Firefox

【區別符號】:“”、“!important”
ip{ background:blue;/
Firefox背景變藍色/ background:green!important;/IE7背景變綠色/ }
【說明】:因為Firefox可以辨識「!important」但卻無法辨識「」,而IE7則可以同時看懂「」、「!important」,因此可以兩個辨識符號來區隔IE7和Firefox。*

6.區別IE6、IE7(方法1)

【區別符號】:“”、“_”
tip{ background:black;/IE7背景變黑色
/ background:orange;/IE6背景變橘色/ }
【說明】:IE7和IE6都可以辨識「*」(米字號),但IE6可以辨識「
」(底線),IE7卻無法辨識,透過IE7無法讀取「_」的特性就能輕鬆區隔IE6和IE7之間的差異。*

7.區別IE6、IE7(方法2)

【區別符號】:“!important”
tip{ background:black!important;/IE7背景變黑色/ background:orange;/IE6背景變橘色/ }
【說明】:因為IE7可讀取「!important;」但IE6卻不行,而CSS的讀取步驟是從上到下,因此IE6讀取時因無法辨識「!important」而直接跳到下一行讀取CSS,所以背景色會呈現橘色。*

8.區別IE6、Firefox

【區別符號】:“_”
tip{ background:black;/Firefox背景變黑色/ background:orange;/IE6背景變橘色/ }
【說明】:因為IE6可以辨識「
」(底線),但是Firefox卻不行,因此可以透過這樣的差異來區隔Firefox和IE6,有效達成CSShack。*

5、IE瀏覽器下hack總結

element{color:#666\9; //IE8 IE9* color:#999; //IE7_color:#EBEBEB; //IE6}
可以看出,利用字符識別無法區分IE8和IE9,我們可以從偽類的識別來區分
element{color:#666\9; //IE8* color:#999; //IE7_color:#EBEBEB; //IE6}:root element{color:#666\9;}//IE9
【說明】:“:root”偽類IE系列只有IE9支持,其他主流瀏覽器均支持,利用這一點來區分IE8和IE9。另外考慮到opera部分支持,完全支持:root,所以不使用。*

6、其他主流瀏覽器css hack總結

1.Firefox瀏覽器:

mozilla私有屬性
@-moz-document url-prefix(){ .element{color:#f1f1f1;}} //Firefox

2.Webkit和Opera:

@media all and (min-width: 0px){ .element{color:#777;} }//Webkit@media screen and (-webkit-min-device-pixel-ratio:0){.element{color:#444;}}//Opera@media all and (-webkit-min-device-pixel-ratio:10000), not all and (-webkit-min-device-pixel-ratio:0) {.element{color:#336699;}}

7、兼容各大主流瀏覽器(最新版本)css hack匯總如下(最全的):

.element{color:#000; /w3c標準/[;color:#f00;]; /Webkit(chrome和safari)/color:#666\9; /IE8/color:#999; /IE7/_color:#333; /IE6/}:root .element{color:#0f0\9;} /IE9/@media all and (-webkit-min-device-pixel-ratio:10000), not all and (-webkit-min-device-pixel-ratio:0) { .element{color:#336699;}} /opera/@-moz-document url-prefix(){ .element{color:#f1f1f1;}} /Firefox*/

8、建議:實際開發先如果不是很清楚可以先寫布局代碼,寫一個階段用瀏覽器測試工具(常用工具推薦IETEST)測試一個各個版本瀏覽器的布局效果,如有問題針對有問題的瀏覽器單獨調試。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,004評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,003評論 2 374

推薦閱讀更多精彩內容