瀏覽器兼容

css hack

含義

由于不同的瀏覽器,比如Internet Explorer6,Internet Explorer7,Firefox等或者同一廠商的不同版本,對CSS的解析認(rèn)識不一樣,因此會導(dǎo)致生成的頁面效果不一樣,得不到我們所需要的頁面效果,這個(gè)時(shí)候我們就需要針對不同的瀏覽器去寫不同的CSS,讓它能夠同時(shí)兼容不同的瀏覽器能在不同的瀏覽器中也能得到我們想要的頁面效果。針對不同的瀏覽器寫不同的css code的過程,就叫css hack。例如\9就是ie8的css hack。

實(shí)現(xiàn)原理

由于不同的瀏覽器對css的支持及解析結(jié)果不一樣,還由于css中的優(yōu)先級的關(guān)系我們就可以根據(jù)這個(gè)來針對不同的瀏覽器來寫不同的css。

表現(xiàn)形式

css屬性前綴法、選擇器前綴法,以及ie條件注釋法,實(shí)際項(xiàng)目中的css hack大部分是針對ie 瀏覽器不同版本之間的表現(xiàn)差異而引入的。

瀏覽器兼容的思路

  1. 要不要做
    從產(chǎn)品的角度(產(chǎn)品受眾、受眾瀏覽器的比例、效果優(yōu)先還是基本功能優(yōu)先)
    成本的角度
  2. 做到什么程度:兼容ie8還是兼容ie6/7
  3. 如何做
  • 根據(jù)兼容需求選擇技術(shù)框架、庫
  • 根據(jù)兼容需求選擇兼容工具(html5shiv.js/respond.js/css reset/normalize.css/modernizr)
  • postcss
  • 條件注釋

兼容的寫法

處理兼容問題的手段
  1. 合適的框架
Bootstrap(>=ie8)
jQuery1.~(>=ie6), jQuery 2.~(>=ie9)
vue(>=ie9)
  1. 條件注釋
<!--[if IE 6]>
<p>you are using Internet Explorer 6</p>
<! [end if]-->
  1. css hack
.box{
  color:red;/*所有瀏覽器都支持*/
  color:red !important/*Firefox IE7支持*/
  _color:blue;/*ie6支持*/
  *color:pink;/*ie6、7支持*/
  color:yellow\9;/*ie/ edge 6-8*/
}
  1. 常見的兼容處理范例
.clearfix:after{
  content:' ';
  display:block;
  clear:both;
}
.clearfix{
  *zoom:1;/*僅對ie6/7有效*/
}
.target{
  display:inline-block;
  *display:inline;
  *zoom:1;/*觸發(fā)haslayout,可以設(shè)置寬度、高度等*/
}

順序很重要,否則會出現(xiàn)無效值。

  1. 使用兼容工具

條件注釋

條件注釋是一種安全的區(qū)分ie 瀏覽器版本的語法且被認(rèn)為是取代針對ie css hack 的首選辦法。
條件注釋只能用于ie5以上。且ie10不再支持。
條件注釋的基本結(jié)構(gòu)和html的注釋是一樣的。因此,ie以外的瀏覽器將會把它們看做是普通的注釋而忽略它們。
ie將會根據(jù)if條件來判斷是否如解析普通的頁面內(nèi)容一樣解析注釋里的內(nèi)容。

條件注釋的應(yīng)用

<!--[if IE7]>
<!--如果IE瀏覽器是7,調(diào)用ie7.css樣式表-->
<link rel='stylesheet' type='text/css' href='ie7.css'>
<![endif]-->

這其中就區(qū)分了ie7瀏覽器對css 的執(zhí)行,達(dá)到兼容的目的。

常見的屬性

項(xiàng)目 范例 說明
[if !IE] 非IE
It [if It IE5.5] 小于IE5.5
Ite [if Ite IE 6] 小于等于IE6
gt [if gt IE5] 大于IE5
gte [if gte IE7] 大于等于IE7

IE Hack

針對IE瀏覽器編寫不同的css能讓IE正常渲染的過程。

js能力檢測

瀏覽器的能力檢測目標(biāo)不是檢測特定的瀏覽器,而是檢測瀏覽器是否支持特定的能力就可以給出特定的解決方案,這一部分檢測是解決瀏覽器兼容問題的主要檢測。

html5shiv.js

用于解決ie9以下版本瀏覽器對html5新增標(biāo)簽不識別,并導(dǎo)致css不起作用的問題,所以我們在使用的過程中,想要讓低版本的瀏覽器,即IE9以下的瀏覽器支持,那么就用到了html5shivjs。

respond.js

讓不支持css3 Media Query的瀏覽器包括ie6-ie8等其他瀏覽器支持查詢。

css reset

重置css樣式,即將所有瀏覽器的自帶樣式重置掉,這樣更易于保持各個(gè)瀏覽器渲染的一致性。
缺點(diǎn):

  1. CSS文件的大小
    顯然,css reset平白無故的增加了css文件的大小雖然,增加的大小可能有限,但是,即使0.1秒的載入時(shí)間也會影響互聯(lián)網(wǎng)的收入的。
  2. 樣式的重置
    許多的css樣式要重寫與重新覆蓋,典型的多此一舉。
  3. CSS的渲染
    這可以說是很大的問題,樣式無緣無故增加了很多的渲染,想想看一個(gè)項(xiàng)目或者是一個(gè)頁面中有多少個(gè)div標(biāo)簽,居然使用div{margin:0;padding:0;},當(dāng)然,*{padding:0;margin:0;}更是無法容忍的。

normalize.css

是一種css reset的替代方案,盡量保留瀏覽器的默認(rèn)樣式,不進(jìn)行太多的重置。
優(yōu)點(diǎn):

  1. 保護(hù)有用的瀏覽器默認(rèn)的樣式而不是完全去掉它們。
  2. 為大部分html元素提供一般化的樣式。
  3. 修復(fù)瀏覽器自身的bug 并保證各瀏覽器的一致性。
  4. 用一些小技巧優(yōu)化css的可用性。
  5. 用注釋和詳細(xì)的文檔來解釋代碼。

Modernizr

很久之前,我們總要用自己的代碼檢測瀏覽器對某種特性的支持情況,比如要寫代碼判斷瀏覽器是否支持canvans。許多html5和css3的功能已經(jīng)在許多主流瀏覽器中實(shí)現(xiàn)出來。modernizr能夠告訴開發(fā)者,瀏覽器是否已經(jīng)實(shí)現(xiàn)他們想要的功能。這讓開發(fā)者在瀏覽器上可以充分利用這些新功能,或者嘗試制作解決方案來支持那些老舊的瀏覽器。

postCss

是使用js插件來轉(zhuǎn)換css的工具,支持變量,混入,未來css語法,內(nèi)聯(lián)圖像等。postcss可以作為預(yù)處理器使用,類似sass,less和stylus。但是,postcss是模塊化的工具,比之前那些快3-30倍,而且功能更強(qiáng)大。

查詢屬性兼容性的網(wǎng)站

瀏覽器市場份額
caniuse.com(查css屬性的兼容)
browserhacks(查hack的寫法)

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

推薦閱讀更多精彩內(nèi)容

  • 什么是 CSS hack CSS hack是通過在CSS樣式中加入一些特殊的符號,讓不同的瀏覽器識別不同的符號(什...
    怎么昵稱閱讀 400評論 0 1
  • 什么是 CSS hack 引自百度百科的定義: CSS hack由于不同廠商的瀏覽器,比如Internet Exp...
    肥魚666閱讀 156評論 0 0
  • 1.什么是 CSS hack 由于不同廠商的瀏覽器,比如Internet Explorer,Safari,Mozi...
    zhaonu閱讀 400評論 0 0
  • 1、什么是 CSS hack 不同廠商的瀏覽器(比如Internet Explorer,Safari,Mozill...
    zh_yang閱讀 371評論 0 0
  • 1.什么是 CSS hack CSS hack由于不同廠商的瀏覽器,比如Internet Explorer,Saf...
    Ghj_小樹閱讀 433評論 2 5