瀏覽器兼容

本文版權(quán)歸饑人谷和本人所有

1.什么是 CSS hack
CSS hack由于不同廠商的瀏覽器,比如Internet Explorer,Safari,Mozilla Firefox,Chrome等,或者是同一廠商的瀏覽器的不同版本输虱,如IE6和IE7予权,對(duì)CSS的解析認(rèn)識(shí)不完全一樣,因此會(huì)導(dǎo)致生成的頁(yè)面效果不一樣浪册,得不到我們所需要的頁(yè)面效果扫腺。 這個(gè)時(shí)候我們就需要針對(duì)不同的瀏覽器去寫不同的CSS,讓它能夠同時(shí)兼容不同的瀏覽器村象,能在不同的瀏覽器中也能得到我們想要的頁(yè)面效果笆环。
簡(jiǎn)單說(shuō)就是先根據(jù)各種瀏覽器的bug去識(shí)別該瀏覽器,再對(duì)于該瀏覽器加樣式進(jìn)行彌補(bǔ)厚者,從而使css代碼兼容多種瀏覽器躁劣,在多種瀏覽器上都可以正常顯示。

2.談一談瀏覽器兼容的思路

  • 首先考慮要不要做
    • 產(chǎn)品的角度(產(chǎn)品的受眾库菲、受眾的瀏覽器比例账忘、效果優(yōu)先還是基本功能優(yōu)先)
    • 成本的角度 (有無(wú)必要做某件事)
      比如,如果要給政府部門做一個(gè)管理系統(tǒng)熙宇,政府部門的電腦很多還是XP系統(tǒng)鳖擒,還在用IE6.IE7這時(shí)就需要做到兼容ie6,ie7.如果是做一個(gè)流行的直播平臺(tái),則不用考慮兼容ie6,7
  • 做到什么程度
    讓哪些瀏覽器支持哪些效果

  • 如何做

    • 根據(jù)兼容需求選擇技術(shù)框架/庫(kù)(jquery)
    • 根據(jù)兼容需求選擇兼容工具(html5shiv.js烫止、respond.js蒋荚、css reset、normalize.css馆蠕、Modernizr)
    • postCSS
    • 當(dāng)以上三種方法不夠時(shí)期升,或者自己的頁(yè)面比較小,用不到大型的庫(kù)互躬,可以用條件注釋播赁、CSS Hack、js 能力檢測(cè)做一些修補(bǔ)

這里有兩個(gè)概念吨铸,逐漸增強(qiáng)和優(yōu)雅降級(jí)

  • 逐漸增強(qiáng):針對(duì)低版本瀏覽器進(jìn)行構(gòu)建頁(yè)面行拢,保證最基本的功能,然后再針對(duì)高級(jí)瀏覽器進(jìn)行效果诞吱、交互等改進(jìn)和追加功能達(dá)到更好的用戶體驗(yàn)舟奠。
  • 優(yōu)雅降級(jí):一開始就構(gòu)建完整的功能,然后再針對(duì)低版本瀏覽器進(jìn)行兼容房维。
  • 區(qū)別:優(yōu)雅降級(jí)是從復(fù)雜的現(xiàn)狀開始沼瘫,并試圖減少用戶體驗(yàn)的供給,而漸進(jìn)增強(qiáng)則是從一個(gè)非沉基礎(chǔ)的耿戚,能夠起作用的版本開始湿故,并不斷擴(kuò)充,以適應(yīng)未來(lái)環(huán)境的需要膜蛔。降級(jí)(功能衰減)意味著往回看坛猪;而漸進(jìn)增強(qiáng)則意味著朝前看,同時(shí)保證其根基處于安全地帶皂股。

3.列舉5種以上瀏覽器兼容的寫法

  • 1.條件注釋
<!--[if IE 6]> 
    <p>You are using Internet Explorer 6.</p>
 <![endif]-->
<!--[if !IE]><!--> 
    <script>alert(1);</script> 
<!--<![endif]-->
 <!--[if IE 8]>
     <link href="ie8only.css" rel="stylesheet"> 
<![endif]-->
條件注釋

lt:less than
lte:less than and equal
gt:greater than

    1. css hack
      (1) 屬性前綴法(即類內(nèi)部Hack)
      屬性前綴法是在CSS樣式屬性名前加上一些只有特定瀏覽器才能識(shí)別的hack前綴墅茉,以達(dá)到預(yù)期的頁(yè)面展現(xiàn)效果。
      說(shuō)明:
      在標(biāo)準(zhǔn)模式中
      “-″減號(hào)是IE6專有的hack
      “\9″ IE6/IE7/IE8/IE9/IE10都生效
      “\0″ IE8/IE9/IE10都生效呜呐,是IE8/9/10的hack
      “\9\0″ 只對(duì)IE9/IE10生效就斤,是IE9/10的hack
.hack{  
/* 注意順序,否則IE6/7下可能無(wú)法正確顯示蘑辑,導(dǎo)致結(jié)果顯示為白色背景*/  
    background-color:red; /* All browsers */  
    background-color:blue !important;/* All browsers but IE6 */  
    *background-color:black; /* IE6, IE7 */  
    +background-color:yellow;/* IE6, IE7*/  
    background-color:gray\9; /* IE6, IE7, IE8, IE9, IE10 */  
    background-color:purple\0; /* IE8, IE9, IE10 */  
    background-color:orange\9\0;/*IE9, IE10*/  
    _background-color:green; /* Only works in IE6 */  

}  
  • (2) 選擇器前綴法
    選擇器前綴法是針對(duì)一些頁(yè)面表現(xiàn)不一致或者需要特殊對(duì)待的瀏覽器洋机,在CSS選擇器前加上一些只有某些特定瀏覽器才能識(shí)別的前綴進(jìn)行hack
    *html *前綴只對(duì)IE6生效
    *+html *+前綴只對(duì)IE7生效
    -webkit- ,針對(duì)safari洋魂,chrome瀏覽器的內(nèi)核CSS寫法
    -moz-绷旗,針對(duì)firefox瀏覽器的內(nèi)核CSS寫法
    -ms-,針對(duì)ie內(nèi)核的CSS寫法
    -o-忧设,針對(duì)Opera內(nèi)核的CSS寫法

  • (3)IE條件注釋法(即HTML條件注釋Hack)
    針對(duì)所有IE(注:IE10+已經(jīng)不再支持條件注釋): 刁标,針對(duì)IE6及以下版本:。這類Hack不僅對(duì)CSS生效址晕,對(duì)寫在判斷語(yǔ)句里面的所有代碼都會(huì)生效

  • (4)條件注釋與類選擇器結(jié)合

<!DOCTYPE html>
<!--[if IEMobile 7 ]> <html dir="ltr" lang="en-US"class="no-js iem7"> <![endif]-->
<!--[if lt IE 7 ]> <html dir="ltr" lang="en-US" class="no-js ie6 oldie"> <![endif]-->
<!--[if IE 7 ]>    <html dir="ltr" lang="en-US" class="no-js ie7 oldie"> <![endif]-->
<!--[if IE 8 ]>    <html dir="ltr" lang="en-US" class="no-js ie8 oldie"> <![endif]-->
<!--[if (gte IE 9)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html dir="ltr" lang="en-US" class="no-js"><!--<![endif]-->

4膀懈、以下工具/名詞是做什么的

  1. 條件注釋
    條件注釋是一種安全的區(qū)分IE瀏覽器版本的語(yǔ)法,且被認(rèn)為是取代針對(duì)IE css hack的首選辦法谨垃。
    寫法有:
<!--[if IE]>用于 IE <![endif]-->
<!--[if IE 6]>用于 IE6 <![endif]-->
<!--[if IE 7]>用于 IE7 <![endif]-->
<!--[if IE 8]>用于 IE8 <![endif]-->
<!--[if IE 9]>用于 IE9 <![endif]-->
<!--[if gt IE 6]> 用于 IE6 以上版本<![endif]-->
<!--[if lte IE 7]> 用于 IE7或更低版本 <![endif]-->
<!--[if gte IE 8]>用于 IE8 或更高版本 <![endif]-->
<!--[if lt IE 9]>用于 IE9 以下版本<![endif]-->
<!--[if !IE]> -->用于非 IE <!-- <![endif]-->
  1. IE Hack
    針對(duì)IE瀏覽器編寫不同的CSS的讓IE能夠正常渲染的過(guò)程
  2. js 能力檢測(cè)
    使用JS的語(yǔ)法檢測(cè)瀏覽器支持的屬性启搂,以便展示效果
  3. html5shiv.js
    用于解決IE9以下版本瀏覽器對(duì)HTML5新增標(biāo)簽不識(shí)別,并導(dǎo)致CSS不起作用的問(wèn)題刘陶。所以我們?cè)谑褂眠^(guò)程中胳赌,想要讓低版本的瀏覽器,即IE9以下的瀏覽器支持匙隔,那么這款html5shiv.js是一個(gè)非常好的選擇疑苫!
  4. respond.js
    讓不支持css3 Media Query的瀏覽器包括IE6-IE8等其他瀏覽器支持查詢。
  5. css reset
    通過(guò)重新定義標(biāo)簽樣式纷责,“覆蓋”瀏覽器的CSS默認(rèn)屬性捍掺,比如非常暴力的
* { margin:0; padding:0;
}
  1. normalize.css
    不再暴力更改所有的瀏覽器樣式,保護(hù)了有價(jià)值的默認(rèn)值再膳,它不講求樣式一致挺勿,而講求通用性和可維護(hù)性
  • Normalize.css做了以下幾件事:
    1、 保護(hù)有用的瀏覽器默認(rèn)樣式而不是完全去掉它們
    2喂柒、一般化的樣式:為大部分HTML元素提供
    3不瓶、 修復(fù)瀏覽器自身的bug并保證各瀏覽器的一致性
    4禾嫉、 優(yōu)化CSS可用性:用一些小技巧
    5、解釋代碼:用注釋和詳細(xì)的文檔來(lái)

Modernizr
當(dāng)你在網(wǎng)頁(yè)中嵌入Modernizr的腳本時(shí)蚊丐,它會(huì)檢測(cè)當(dāng)前瀏覽器是否支持CSS3的特性熙参,比如 @font-face、border-radius麦备、 border-image尊惰、box-shadow、rgba() 等泥兰,同時(shí)也會(huì)檢測(cè)是否支持HTML5的特性——比如audio、video题禀、本地儲(chǔ)存鞋诗、和新的 <input>標(biāo)簽的類型和屬性等。在獲取到這些信息的基礎(chǔ)上迈嘹,你可以在那些支持這些功能的瀏覽器上使用它們削彬,來(lái)決定是否創(chuàng)建一個(gè)基于JS的fallback,或者對(duì)那些不支持的瀏覽器進(jìn)行簡(jiǎn)單的優(yōu)雅降級(jí)秀仲。另外融痛,Modernizr還可以令I(lǐng)E支持對(duì)HTML5的元素應(yīng)用CSS樣式,這樣開發(fā)者就可以立即使用這些更富有語(yǔ)義化的標(biāo)簽了神僵。
參考文章
http://www.osmn00.com/translation/221.html

postCSS
它可以被理解為一個(gè)平臺(tái)雁刷,可以讓一些插件在上面跑,它提供了一個(gè)解析器保礼,可以將CSS解析成抽象語(yǔ)法樹沛励,通過(guò)PostCSS這個(gè)平臺(tái),我們能夠開發(fā)一些插件炮障,來(lái)處理CSS目派。熱門插件如autoprefixer,它可以幫我們處理兼容問(wèn)題胁赢,只需正常寫CSS企蹭,autoprefixer可以幫我的自動(dòng)生成兼容性代碼
參考文章:
https://segmentfault.com/a/1190000003909268

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市智末,隨后出現(xiàn)的幾起案子谅摄,更是在濱河造成了極大的恐慌,老刑警劉巖吹害,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件螟凭,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡它呀,警方通過(guò)查閱死者的電腦和手機(jī)螺男,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門棒厘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人下隧,你說(shuō)我怎么就攤上這事奢人。” “怎么了淆院?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵何乎,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我土辩,道長(zhǎng)支救,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任拷淘,我火速辦了婚禮各墨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘启涯。我一直安慰自己贬堵,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布结洼。 她就那樣靜靜地躺著黎做,像睡著了一般。 火紅的嫁衣襯著肌膚如雪松忍。 梳的紋絲不亂的頭發(fā)上蒸殿,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音挽铁,去河邊找鬼伟桅。 笑死,一個(gè)胖子當(dāng)著我的面吹牛叽掘,可吹牛的內(nèi)容都是我干的楣铁。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼更扁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼盖腕!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起浓镜,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤溃列,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后膛薛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體听隐,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年哄啄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了雅任。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片风范。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖沪么,靈堂內(nèi)的尸體忽然破棺而出硼婿,到底是詐尸還是另有隱情,我是刑警寧澤禽车,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布寇漫,位于F島的核電站,受9級(jí)特大地震影響殉摔,放射性物質(zhì)發(fā)生泄漏州胳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一逸月、第九天 我趴在偏房一處隱蔽的房頂上張望陋葡。 院中可真熱鬧,春花似錦彻采、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至惜索,卻和暖如春特笋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背巾兆。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工猎物, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人角塑。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓蔫磨,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親圃伶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子堤如,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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

  • 一、如何調(diào)試 IE 瀏覽器窒朋? 在IE7以上的版本中可以通過(guò)按快捷鍵F12調(diào)出開發(fā)人員調(diào)試框搀罢,如下圖IE7以上調(diào)試工...
    dengpan閱讀 543評(píng)論 0 2
  • 一、問(wèn)答部分 1. 如何調(diào)試 IE 瀏覽器 IE7及以上版本有調(diào)試臺(tái)侥猩,可以按F12啟動(dòng)榔至。Paste_Image.p...
    _hello__world_閱讀 457評(píng)論 0 1
  • 一、如何調(diào)試 IE 瀏覽器 IE7以上版本自帶的開發(fā)者工具欺劳,IE6可以用border的方法唧取;例:IE11的開發(fā)者工...
    __Qiao閱讀 1,121評(píng)論 2 17
  • CSS Hack 不同的瀏覽器對(duì)某些CSS代碼解析會(huì)存在一定的差異铅鲤,因此就會(huì)導(dǎo)致不同瀏覽器下給用戶展示的頁(yè)面效果不...
    zx9426閱讀 378評(píng)論 0 0
  • 什么是 CSS hack 由于不同廠商的瀏覽器,比如Internet Explorer,Safari,Mozill...
    阿魯提爾閱讀 261評(píng)論 0 2