瀏覽器兼容

CSS hack

由于不同瀏覽器對CSS的解析認識不完全一樣,因此會導致生成的頁面效果不一樣,得不到我們所需要的頁面效果。此時,我們需要針對不同的瀏覽器寫不同的CSS,讓它能在不同的瀏覽器中也能得到我們想要的頁面效果

  • 表現形式

    1. 屬性前綴法(類內部Hack):例如 IE6能識別下劃線“”和星號“”,IE7能識別星號“”,但不能識別下劃線“”,IE6~IE10都能識別“\9”,但 Firefox 對之前提到的三個都不能識別
    2. 選擇器前綴法(選擇器Hack)
    3. IE條件注釋法(HTML條件注釋Hack):
      • 針對IE10之前的版本(IE10+不再支持條件注釋)
          <!--[if IE]>IE瀏覽器顯示的內容 <![endif]-->
        
      • IE6及以下
          <!--[if lt IE 6]>只在IE6-顯示的內容 <![endif]-->
        
      這類Hack不僅對CSS生效,還對寫在判斷語句里的所有代碼都有效

    示例

      .box{
        color: red;
        _color: blue; /*ie6*/
        *color: pink; /*ie7*/
        color: yellow\9; /*ie/ed*/
      }
      
      <!--[if IE 7]>
      <link rel="stylesheet" href="ie7.css" type="text/css" />
      <![end if]-->
    

瀏覽器兼容的思路

  1. 要不要做(為什么)

    • 產品的角度(產品的受眾、受眾的瀏覽器比例、效果優先還是基本功能優先)
    • 成本的角度(有無必要做某件事)
  2. 做到什么程度

    • 讓哪些瀏覽器支持哪些效果
  3. 如何做

    • 根據兼容需求選擇支持哪些技術框架/庫(jQuery)
    • 根據兼容需求選擇兼容工具(html5shiv.js、respond.js、css reset、normalize.css、Modernizr)
    • postCSS
    • 條件注釋、CSS Hack、js 能力檢測做一些修補

常見的需要兼容的屬性

  • inline-block IE8+
  • min-width/min-height IE8+
  • :before, :after IE8+
  • div:hover IE7+
  • background-size IE9+
  • border-radius IE9+
  • box-shadow IE9+
  • 動畫、漸變 IE10+

示例

  .clearfix:after{
    content: '';
    display: block;
    clear: both;
  }
  .clearfix{
    *zoom: 1; /* 僅對IE6 7有效 */
  }

  .target{
    display: inline-block;
    *display: inline;
    *zoom: 1;
  }

名詞解釋

  • 條件注釋:HTML代碼中被IE有條件解釋的語句
  • IE Hack:使用特定的符號或者方式使得特定的IE瀏覽器展示特定的效果
  • js 能力檢測:使用js檢測瀏覽器支持的屬性,以便編寫樣式展示效果
  • html5shiv.js IE6~8無法識別HTML5提出的新元素,這些新元素不能作為父節點包裹子元素,并且不能應用CSS樣式,html5shiv執行createElement方法使css樣式應用在未知元素上
  • respond.js 可在IE6~8上模擬CSS3的媒體查詢Media queries
  • css reset 強制重置元素的默認樣式,使頁面在所有瀏覽器下效果一致
  • normalize.css 強制重置元素默認樣式的同時,保護有用的瀏覽器默認樣式、提供一般化的樣式、修復瀏覽器自身的bug、優化CSS可用性、解釋代碼
  • Modernizr 檢查瀏覽器是否支持 CSS3 或者 HTML5 的特性而自動添加一些類名(class)到 <html> ,并替換掉原來的 .no-js
  • postCSS 使用JavaScript插件來轉換CSS的工具,負責把CSS代碼解析成抽象語法樹結構(Abstract Syntax Tree,AST), 再交由插件來進行處理

常用的查詢兼容性的網站

caniuse

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • CSS Hack 不同的瀏覽器對某些CSS代碼解析會存在一定的差異,因此就會導致不同瀏覽器下給用戶展示的頁面效果不...
    zx9426閱讀 407評論 0 0
  • 什么是 CSS hack CSS hack是通過在CSS樣式中加入一些特殊的符號,讓不同的瀏覽器識別不同的符號(什...
    怎么昵稱閱讀 405評論 0 1
  • 一、問答部分 1. 如何調試 IE 瀏覽器 IE7及以上版本有調試臺,可以按F12啟動。Paste_Image.p...
    _hello__world_閱讀 484評論 0 1
  • 一、如何調試 IE 瀏覽器? IE調試的一般方法(css): 使用高版本IE控制臺(對于IE7以上)IE11的開發...
    婷樓沐熙閱讀 562評論 0 6
  • 一、如何調試 IE 瀏覽器 IE7以上版本自帶的開發者工具,IE6可以用border的方法;例:IE11的開發者工...
    __Qiao閱讀 1,135評論 2 17