前端基礎05——瀏覽器兼容

1.瀏覽器兼容問題

  • 瀏覽器與前端技術的發展不匹配
  • 不同瀏覽器參考的標準、實現的方式不同

2.相關參考資料

3.處理兼容問題的思路

  • 要不要做
    • 產品的角度(產品的受眾、受眾的瀏覽器比例、效果有限還是基本功能有先
    • 成本的角度(有無必要做某件事)
  • 做到什么程度
    • 讓哪些瀏覽器支持哪些效果
  • 如何做
    • 根據兼容需求選擇技術框架、庫(jquery)
    • 根據兼容需求選擇兼容工具(html5shiv.js, respond.js, css reset, nomalize.css, Modemizr)
    • postCSS
    • 條件注釋、CSS Hack、js能力檢測做一些修補

4. 漸進增強和優雅降級

  • 漸進增強(progressive enhancement):針對低版本瀏覽器進行構建頁面,保證最基本的功能,然后再針對高級瀏覽器進行效果、交互等改進和追加功能達到更好的用戶體驗
  • 優雅降級(graceful degradation):一開始就構建完整的功能,然后再針對低版本瀏覽器進行兼容

5. 選擇合適的框架合適的框架

  • Bootstrap ( >= ie8 )
  • jQuery 1.~ ( >= ie6 ), jQuery 2.~ ( >= ie9 )
  • Vue ( >= ie9 )
  • ...

6.條件注釋

  • 條件注釋 ( conditional comment )是用于HTML源碼中被IE有條件解釋的語句。條件注釋可被用來向IE提供及隱藏代碼
  • 條件注釋可以被IE 10 之前的版本解釋,IE 10 及以后不再支持條件注釋

7.CSS hack

  • 由于不同廠商的瀏覽器,比如IE, Safari, Mozila Firefox, Chrome等,或者是同一廠商的瀏覽器的不同版本,,如IE 6, IE 10, 對于CSS的解析認識不完全一樣,因此會導致生成的頁面效果不一樣,得不到我們所需要的頁面效果。因此需要針對不同的瀏覽器去些不同的css,讓它能在不同的瀏覽器中也能得到我們想要的頁面效果

  • CSS Hack大致有三種表現形式,CSS屬性前綴法, 選擇器前綴法IE條件注釋法Hack, 實際項目中CSS Hack大部分是針對IE瀏覽器不同版本之間的表現差異而引入的(利用瀏覽器的bug來進行針對性處理)

  • 常見hack寫法

.box {
  color: red;   /* 所有瀏覽器都生效 */
  _color: blue; /* 只有 IE 6 生效 */
  *color: pink; /* 只有 IE 6 IE 7 生效 */
  color: yellow\9; /* IE 6~8 都生效 */
}
< !--[if IE 7]>
<link rel="stylesheet" href="ie7.css" type="text/css" />
<![endif]-->

8.常見屬性的兼容情況

  • inline-block: >=ie 8
  • min-width/min-height: >=ie 8
  • :before, :after: >=ie 8
  • div:hover: >=ie 7
  • inline-block: >=ie8
  • background-size: >=ie 9
  • 圓角:>= ie 9
  • 陰影: >= ie 9
  • 動畫、漸變: >= ie 10

9.常見兼容處理范例

.clearfix:after{
  content: '';
  display: block;
  clear: both;
}
.clearfix{
  *zoom: 1;  /* 僅針對ie67有效 */
}
.target {
  /* 在 IE 6,7,8上實現inline-block效果 */
  display: inline-block; /* IE 8生效 */
  /* 一下兩句只有在 IE 6,7 上生效,結合產生inline-block效果*/
  *display: inline;
  *zoom: 1;
}

<!--[if IE 7]>
<html class="ie7 no-js">
...
</html>
<![endif]-->
.clearfix {
  /* 在非ie 7 瀏覽器中,clearfix展現該屬性 */
}
.ie7 .clearfix {
   /* 只有ie7瀏覽器中,clearfix才會展現該屬性 */
}

10.兼容性相關的開發工具

  • html5shiv.js:使用Javascript來使不支持HTML5的瀏覽器支持HTML標簽。
  • respond.js: 讓不支持css3 Media Query的瀏覽器包括IE6-IE8等其他瀏覽器支持查詢。
  • css reset:“樣式重置”——重置瀏覽器默認樣式
  • Normalize.css:在默認的HTML元素樣式上提供了跨瀏覽器的高度一致性。相比于傳統的CSS reset,Normalize.css是一種現代的、為HTML5準備的優質替代方案。
  • Modernizr:一個 JavaScript 庫,用于檢測用戶瀏覽器的 HTML5 與 CSS3 特性。Modernizr 會在頁面加載后立即檢測特性;然后創建一個包含檢測結果的 JavaScript 對象,同時在 html 元素加入方便你調整 CSS 的 class 名。
  • PostCSS:一個JS插件轉換樣式表的工具。這些插件能夠檢驗你的CSS、支持變量和混合,轉化css3的新特性語法、行內圖片等。

11.瀏覽器兼容的寫法

  • IE 條件注釋
<!--[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]-->
  • CSS屬性前綴法
    • “_″IE6 生效
      "*" IE6 7生效
      “\9″ IE6/IE7/IE8/IE9/IE10都生效
      “\0″ IE8/IE9/IE10都生效,是IE8/9/10的hack
      “\9\0″ 只對IE9/IE10生效,是IE9/10的hack
.box {
  color: red;   /* 所有瀏覽器都生效 */
  _color: blue; /* 只有 IE 6 生效 */
  *color: pink; /* 只有 IE 6 IE 7 生效 */
  color: yellow\9; /* IE 6~8 都生效 */
}
* Trident內核:主要代表為IE瀏覽器,前綴為-ms

Gecko內核:主要代表為Firefox,前綴為-moz
Presto內核:主要代表為Opera,前綴為-o
Webkit內核:產要代表為Chrome和Safari,前綴為-webkit

.box {
    -moz-border-radius: 5px;
    -webkit-border-radius: 5px;
    -o-border-radius: 5px;
    border-radius: 5px;
}
  • 選擇器前綴法
    • 針對一些頁面表現不一致或者需要特殊對待的瀏覽器,在CSS選擇器前加上一些只有某些特定瀏覽器才能識別的前綴進行hack(針對瀏覽器之間的表現差異而引入的,利用瀏覽器的bug來進行針對性處理)
      例如:
      *html *前綴只對IE6生效
      *+html *+前綴只對IE7生效
      @media screen\9{...}只對IE6/7生效
      @media \0screen {body { background: red; }}只對IE8有效
      @media \0screen,screen\9{body { background: blue; }}只對IE6/7/8有效
      @media screen\0 {body { background: green; }} 只對IE8/9/10有效
      @media screen and (min-width:0\0) {body { background: gray; }} 只對IE9/10有效
      @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {body { background: orange; }} 只對IE10有效
  • 條件注釋法和類選擇器相結合
<!--[if IE 7]>
<html class="ie7 no-js">
...
</html>
<![endif]-->
.clearfix {
  /* 在非ie 7 瀏覽器中,clearfix展現該屬性 */
}
.ie7 .clearfix {
   /* 只有ie7瀏覽器中,clearfix才會展現該屬性 */
}
  • 使用Modernizr

    • 一個 JavaScript 庫,用于檢測用戶瀏覽器的 HTML5 與 CSS3 特性。Modernizr 會在頁面加載后立即檢測特性;然后創建一個包含檢測結果的 JavaScript 對象,同時在 html 元素加入方便你調整 CSS 的 class 名,這些class名稱標記當前瀏覽器支持哪些特性和不支持哪些特性,支持的特性就直接顯示該天特性的名稱作為一個class(例:canvas,websockets),不支持的特性顯示的class是“no-特性名稱”(可以在css文件中針對不同的class設置不同的屬性值)。(使用介紹
<head>      
<meta charset="utf-8">      
<title>My Beautiful Sample Page</title>     
<script src="modernizr-1.5.min.js"></script>  
</head>  
<html class="no-js">
...

頁面加載完后的代碼

<html class=" js no-flexbox canvas canvastext no-webgl no-touch geolocation 
              postmessage no-websqldatabase no-indexeddb hashchange no-history 
        draganddrop no-websockets rgba hsla multiplebgs backgroundsize 
        no-borderimage borderradius boxshadow no-textshadow opacity 
        no-cssanimations no-csscolumns no-cssgradients no-cssreflections
        csstransforms no-csstransforms3d no-csstransitions fontface 
        generatedcontent video audio localstorage sessionstorage 
        no-webworkers no-applicationcache svg inlinesvg smil svgclippaths">
  • 使用css reset或者Normalize.css,在默認的HTML元素樣式上提供了跨瀏覽器的一致性
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

推薦閱讀更多精彩內容

  • 做前端多年,雖然不是經常需要hack,但是我們經常會遇到各瀏覽器表現不一致的情況。基于此,某些情況我們會極不情愿的...
    大女表哥閱讀 1,121評論 0 9
  • 問答 1. 如何調試 IE 瀏覽器 IE7及以上版本使用開發者工具調試。 IE6使用border、JS配合控制臺調...
    nineSean閱讀 580評論 0 3
  • 一、如何調試 IE 瀏覽器 IE7以上版本自帶的開發者工具,IE6可以用border的方法;例:IE11的開發者工...
    __Qiao閱讀 1,134評論 2 17
  • 一、問答部分 1. 如何調試 IE 瀏覽器 IE7及以上版本有調試臺,可以按F12啟動。Paste_Image.p...
    _hello__world_閱讀 482評論 0 1
  • 一、如何調試 IE 瀏覽器? 在IE7以上的版本中可以通過按快捷鍵F12調出開發人員調試框,如下圖IE7以上調試工...
    dengpan閱讀 559評論 0 2