博客 / 詳情

返回

IE11兼容

前言

由於經常需要跟IE11打交道(雖然文章發表時,IE11已經正式宣佈退役了),原因是安防監控視頻播放需要調用activeX控件。所以將自己的一些經驗總結下。

原則

  1. 漸進增強:針對低版本瀏覽器進行構建頁面,保證最基本的功能,然後再針對高級瀏覽器進行效果、交互等改進和追加功能達到更好的用户體驗。
  2. 優雅降級:一開始就構建完整的功能,然後再針對低版本瀏覽器進行兼容。優雅降級:一開始就構建完整的功能,然後再針對低版本瀏覽器進行兼容。

元標籤

<!--[if IE]>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
<![endif]-->

如果你跟我一樣只用兼容IE11,其實這個標籤帶不帶無所謂(畢竟客户也只用IE11)。一般只要兼容IE8、9的倒黴蛋才會去了解這個標籤(滑稽)。更多看這個回答。

IE11 CSS hack

IE11各種奇葩的樣式問題,都離不開CSS hack。

<!doctype html>
<html>
 <head>
  <title>IE10/11 Media Query Test</title>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <style>
    @media all and (-ms-high-contrast:none)
     {
     .foo { color: green } /* IE10 */
     *::-ms-backdrop, :root .foo { color: red } /* IE11 */
     }
  </style>
 </head>
 <body>
  <div class="foo">Hi There!!!</div>
 </body>
</html>

實際情況是,我只會用到@media all and (-ms-high-contrast:none)這個媒體查詢,因為我只需要兼容IE11,同時將所有兼容樣式保存在單獨一個文件,確保樣式隔離和代碼複用。

更多IE相關的CSS hack寫法可以查看這個stackoverflow回答。

如果你遇到兼容IE11以下的版本,建議你提桶跑路(滑稽)

在IE11中,往往意味着CSS3很多特性是不支持的,你需要特別謹慎,比如一些UI庫,部分組件使用了比較新的CSS特性,這都會給你的開發帶來隱藏的缺陷,這也是技術選型的重要影響因素。

CSS reset

  • normalize.css

CSS reset 方案, 雖然這個庫很久沒更新維護了,不過基本不影響使用。

查詢特性是否支持

  • caniuse
  • MDN

大部分兼容性API你都可以通過上面2個網站去查詢,簡單舉2個例子(沒辦法通過構建工具實現兼容):

  • IE11 不支持 CSS initial屬性值
text-align: initial; // IE不會生效

這個我曾經在Element框架上遇到,算是小坑,只能獨立做樣式兼容。像這樣的一些屬性還有很多,但有一説一,IE11對樣式兼容性已經算是友好了。

  • IE11 crypto 需要帶ms前綴
var crypto = crypto || msCrypto

IE11支持某些特定api,但需要帶特定的ms前綴,基本上構建工具沒辦法幫你做到,只能你自己手動實現兼容。

Canva

插入圖片儘量避免使用SVG格式,建議使用PNG格式替代,我至今沒有找到解決方案。

IE11 滾動條樣式

IE沒辦法改變滾動條的寬度,如果有這個需求,請使用第三方庫。

body{
  scrollbar-base-color: #000;
  scrollbar-face-color: #000;
  scrollbar-3dlight-color: #000;
  scrollbar-highlight-color: #000;
  scrollbar-track-color: #000;
  scrollbar-arrow-color: black;
  scrollbar-shadow-color: #000;
  scrollbar-dark-shadow-color: #000;
}

參考文章

  • 瀏覽器的兼容問題及解決方案整理(建議收藏)
user avatar vincehua 頭像 sorrybro 頭像
2 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.