什么是 CSS hack
CSS hack是通過在CSS樣式中加入一些特殊的符號(hào)锅减,讓不同的瀏覽器識(shí)別不同的符號(hào)(什么樣的瀏覽器識(shí)別什么樣的符號(hào)是有標(biāo)準(zhǔn)的旧困,CSS hack就是讓你記住這個(gè)標(biāo)準(zhǔn))书闸,以達(dá)到應(yīng)用不同的CSS樣式的目的,
比如.kwstu{width:300px;_width:200px;},一般瀏覽器會(huì)先給元素使用width:300px;的樣式,緊接著后面還有個(gè)_width:200px;由于下劃線_width只有IE6可以識(shí)別柿究,所以此樣式在IE6中實(shí)際設(shè)置對(duì)象的寬度為200px,后面的把前面的給覆蓋了黄选,而其他瀏覽器不識(shí)別_width不會(huì)執(zhí)行_width:200px;這句樣式蝇摸,所以在其他瀏覽器中設(shè)置對(duì)象的寬度就是300px;
CSS hack由于不同廠商的瀏覽器,比如Internet Explorer,Safari,Mozilla Firefox,Chrome等办陷,或者是同一廠商的瀏覽器的不同版本貌夕,如IE6和IE7,對(duì)CSS的解析認(rèn)識(shí)不完全一樣懂诗,因此會(huì)導(dǎo)致生成的頁面效果不一樣蜂嗽,得不到我們所需要的頁面效果。 這個(gè)時(shí)候我們就需要針對(duì)不同的瀏覽器去寫不同的CSS殃恒,讓它能夠同時(shí)兼容不同的瀏覽器,能在不同的瀏覽器中也能得到我們想要的頁面效果辱揭。
簡(jiǎn)單的說离唐,CSS hack的目的就是使你的CSS代碼兼容不同的瀏覽器。當(dāng)然问窃,我們也可以反過來利用CSS hack為不同版本的瀏覽器定制編寫不同的CSS效果亥鬓。
注意: 我們通常主要考慮的瀏覽器有IE6、IE7域庇、IE8嵌戈、谷歌瀏覽器(chrome)、火狐(Mozilla Firefox)即可听皿,至于我們常用的傲游熟呛、QQ的TT瀏覽器是用你計(jì)算機(jī)中裝的系統(tǒng)自帶瀏覽器的內(nèi)核,所以只需要兼容以上瀏覽器即可兼容TT傲游瀏覽器尉姨。
CSS hack用來解決有些css屬性在不同瀏覽器中顯示的效果不一樣的問題庵朝。
CSS Hack一般都是利用各瀏覽器的支持CSS的能力和BUG來進(jìn)行的。
所以對(duì)瀏覽器的選擇大致可以分為能力選擇和怪癖選擇(BUG)又厉。
能力通常是指瀏覽器對(duì)CSS特性的支持程度九府,
而怪癖是指瀏覽器特有的一些BUG。
友情提示:盡量找到通用方法而減少對(duì)CSS Hack的使用覆致,大規(guī)模使用CSS Hack會(huì)帶來維護(hù)成本的提高以及瀏覽器版本變化而帶來類似Hack失效等系列問題侄旬。
CSS Hack常見的有三種形式:
CSS屬性Hack、CSS選擇符Hack以及IE條件注釋Hack煌妈,
Hack主要針對(duì)IE瀏覽器儡羔。
1宣羊、屬性級(jí)Hack:比如IE6能識(shí)別下劃線“”和星號(hào)“”,
IE7能識(shí)別星號(hào)“”笔链,但不能識(shí)別下劃線””段只,
而firefox兩個(gè)都不能認(rèn)識(shí)。
2鉴扫、選擇符級(jí)Hack:比如IE6能識(shí)別html .class{}
赞枕,IE7能識(shí)別+html .class{}
或者*:first-child+html .class{}
3、IE條件注釋Hack:IE條件注釋是微軟IE5開始就提供的一種非標(biāo)準(zhǔn)邏輯語句坪创。
炕婶,這類Hack不僅對(duì)CSS生效,對(duì)寫在判斷語句里面的所有代碼都會(huì)生效莱预。
PS:條件注釋只有在IE瀏覽器下才能執(zhí)行柠掂,這個(gè)代碼在非IE瀏覽下被當(dāng)做注釋視而不見。
可以通過IE條件注釋載入不同的CSS依沮、JS涯贞、HTML和服務(wù)器代碼等。
談一談瀏覽器兼容的思路
(1) 要不要兼容 危喉? 從受眾和產(chǎn)品角度考慮
(2)如果要兼容宋渔,是兼容到什么程度,
哪些瀏覽器兼容哪些效果辜限?
(3)如何做皇拣?
根據(jù)兼容需求選擇技術(shù)框架或庫(JQuery)
根據(jù)兼容需求選擇兼容工具:
html5shiv、Respond.js薄嫡、CSS Reset氧急、normalize.css、Modernizr.js毫深、 postcss
條件注釋吩坝、CSS Hack、js 能力檢測(cè)做一些修補(bǔ)
優(yōu)雅降級(jí)或 漸進(jìn)增強(qiáng)
列舉5種以上瀏覽器兼容的寫法
注意書寫順序
CSS屬性前綴法
.topbar{
background: red; /firefox/
background: blue; / ie6 7/
_background: green; / ie6識(shí)別*/
}
選擇器前綴法
.class{} / ie6*/
+.class{} /ie7*/
IE條件注釋 费什,ie瀏覽器能識(shí)別