瀏覽器兼容

做前端的小伙伴無(wú)論在學(xué)習(xí)還是工作中,應(yīng)該還是或多或少會(huì)遇到點(diǎn)IE兼容問(wèn)題,當(dāng)然我們巴不得IE的份額越來(lái)越低..( ̄▽ ̄)
下面是我收集的一些常見(jiàn)方法,以作為自己學(xué)習(xí)的筆記。

image.png

什么是瀏覽器兼容問(wèn)題

同一份代碼,有的瀏覽器效果正常,有的不正常

不正常的原因是什么?(不支持? bug?)
如何讓它展示正常?(條件注釋? 單獨(dú)Hack?)

當(dāng)然在做兼容之前,我們還是需要從實(shí)際項(xiàng)目出發(fā)考慮。


首先介紹兩個(gè)重要概念,漸進(jìn)增強(qiáng)和優(yōu)雅降級(jí)

漸進(jìn)增強(qiáng)(progressive enhancement): 針對(duì)低版本瀏覽器進(jìn)行構(gòu)建頁(yè)面,保證最基本的功能,然后再針對(duì)高級(jí)瀏覽器進(jìn)行效果、交互等改進(jìn)和追加功能達(dá)到更好的用戶體驗(yàn)
優(yōu)雅降級(jí) (graceful degradation): 一開(kāi)始就構(gòu)建完整的功能,然后再針對(duì)低版本瀏覽器進(jìn)行兼容。

stackoverflow-漸進(jìn)增強(qiáng)和優(yōu)雅降級(jí)的區(qū)別

那我們實(shí)際上用到哪一種,還是從實(shí)際(láo bǎn)要求出發(fā)

image.png

要不要做

產(chǎn)品的角度(產(chǎn)品的受眾、受眾的瀏覽器比例、效果優(yōu)先還是基本功能優(yōu)先)
成本的角度 (有無(wú)必要做某件事)

做到什么程度

讓哪些瀏覽器支持哪些效果


具體如何做

1. 根據(jù)兼容需求選擇技術(shù)框架/庫(kù)(jquery)
  • Bootstrap (>=ie8)
  • jQuery 1.~ (>=ie6), jQuery 2.~ (>=ie9)
  • Vue (>= ie9)
  • ...
2. 條件注釋法

條件注釋 (conditional comment) 是于HTML源碼中被IE有條件解釋的語(yǔ)句。條件注釋可被用來(lái)向IE提供及隱藏代碼。
還有個(gè)重點(diǎn)!?。〃r(╯﹏╰)╭IE10不再支持條件注釋

image.png

用法舉例

    <!--[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]-->
3.CSS hack

由于不同廠商的瀏覽器,比如Internet Explorer,Safari,Mozilla Firefox,Chrome等,或者是同一廠商的瀏覽器的不同版本,如IE6和IE7,對(duì)CSS的解析認(rèn)識(shí)不完全一樣,因此會(huì)導(dǎo)致生成的頁(yè)面效果不一樣,得不到我們所需要的頁(yè)面效果。
這個(gè)時(shí)候我們就需要針對(duì)不同的瀏覽器去寫不同的CSS,讓它能在不同的瀏覽器中也能得到我們想要的頁(yè)面效果。

CSS Hack大致有3種表現(xiàn)形式,CSS屬性前綴法
選擇器前綴法以及IE條件注釋法(即HTML頭部引用if IE)Hack,實(shí)際項(xiàng)目中CSS Hack大部分是針對(duì)IE瀏覽器不同版本之間的表現(xiàn)差異而引入的。

  • 屬性前綴法(即類內(nèi)部Hack):
    例如
    IE6能識(shí)別下劃線"_"和星號(hào)" * ",
    IE7能識(shí)別星號(hào)" * ",但不能識(shí)別下劃線"_",
    IE6~IE10都認(rèn)識(shí)"\9",但firefox前述三個(gè)都不能認(rèn)識(shí)
.box{
  color: red;
  _color: blue; /*ie6*/
  *color: pink; /*ie67*/
  color: yellow\9;  /*ie/edge 6-8*/
}
  • 選擇器前綴法(即選擇器Hack)
<style>
.test{ width:90px;}               /*IE 6,IE 7,IE 8*/
*html .test{ width:80px;}         /*only for IE 6*/
*+html .test{ width:70px;}        /*only for IE 7*/
</style>
  • IE條件注釋法(即HTML條件注釋Hack)

實(shí)際上面以及解釋過(guò)了

<!–-[if IE 7]>
<link rel="stylesheet" href="ie7.css" type="text/css" />
<![endif]–->

常見(jiàn)屬性的兼容情況
image.png

一些兼容處理例子
  • 浮動(dòng)
.clearfix:after{
  content: '';
  display: block;
  clear: both;
}
.clearfix{
  *zoom: 1; /* 僅對(duì)ie67有效 */
}
  • inline-block
.target{
  display: inline-block;
  *display: inline;
  *zoom: 1;
}

常用工具介紹

html5shiv.js
這個(gè)是用來(lái)支持html5標(biāo)簽的

官方github解釋:The HTML5 Shiv enables use of HTML5 sectioning elements in legacy Internet Explorer and provides basic HTML5 styling for Internet Explorer 6-9, Safari 4.x (and iPhone 3.x), and Firefox 3.x.
詳細(xì)請(qǐng)戳上面

respond.js
這個(gè)是用來(lái)支持css3媒體查詢的

A fast & lightweight polyfill for min/max-width CSS3 Media Queries (for IE 6-8, and more)

css reset

css reset指清除某些默認(rèn)樣式,達(dá)到不同瀏覽器的統(tǒng)一效果,具體見(jiàn)上面介紹

normalize.css
流行的css reset實(shí)現(xiàn)方法

A modern alternative to CSS resets

Modernizr
Modernizr是一套JavaScript 庫(kù),用來(lái)偵測(cè)瀏覽器是否支持HTML5CSS3等規(guī)格。如果瀏覽器不支持,Modernizr會(huì)使用其他的解決方法來(lái)進(jìn)行模擬。

Modernizr is a JavaScript library that detects HTML5 and CSS3 features in the user’s browser.

postCSS
這個(gè)用來(lái)后編譯你的css,讓你的css適配不同的客戶端

PostCSS is a tool for transforming styles with JS plugins. These plugins can lint your CSS, support variables and mixins, transpile future CSS syntax, inline images, and more.


常用網(wǎng)站

瀏覽器市場(chǎng)份額

caniuse.com 查CSS屬性兼容

browserhacks 查 Hack 的寫法

以上~~~~

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、如何調(diào)試 IE 瀏覽器? 在IE7以上的版本中可以通過(guò)按快捷鍵F12調(diào)出開(kāi)發(fā)人員調(diào)試框,如下圖IE7以上調(diào)試工...
    dengpan閱讀 651評(píng)論 0 2
  • 什么是 CSS hack CSS hack是通過(guò)在CSS樣式中加入一些特殊的符號(hào),讓不同的瀏覽器識(shí)別不同的符號(hào)(什...
    怎么昵稱閱讀 528評(píng)論 0 1
  • 一、問(wèn)答部分 1. 如何調(diào)試 IE 瀏覽器 IE7及以上版本有調(diào)試臺(tái),可以按F12啟動(dòng)。Paste_Image.p...
    _hello__world_閱讀 565評(píng)論 0 1
  • 一、如何調(diào)試 IE 瀏覽器 IE7以上版本自帶的開(kāi)發(fā)者工具,IE6可以用border的方法;例:IE11的開(kāi)發(fā)者工...
    __Qiao閱讀 1,178評(píng)論 2 17
  • 我做了一個(gè)夢(mèng),夢(mèng)到了你跟那個(gè)女生 我走到你面前先給了你一巴掌 你左臉?biāo)查g就紅了,但我知道你沒(méi)有生氣 那天晚上我也給...
    的笙閱讀 188評(píng)論 0 0

友情鏈接更多精彩內(nèi)容