淺談CSS hack(瀏覽器相容)

来源:http://www.cnblogs.com/BillyQin/archive/2016/09/28/5915309.html
-Advertisement-
Play Games

今天簡單寫一點關於瀏覽器相容的處理方法,雖然百度上已經有很多,但是我還是要寫! 先看一個圖 這個圖描述了2016年1月至8月網民們所使用的瀏覽器市場份額(來源:http://tongji.baidu.com/data/browser)。令我感到欣慰的是chrome排第一,chrome一直以來對W3C ...


今天簡單寫一點關於瀏覽器相容的處理方法,雖然百度上已經有很多,但是我還是要寫!

先看一個圖

這個圖描述了2016年1月至8月網民們所使用的瀏覽器市場份額(來源:http://tongji.baidu.com/data/browser)。令我感到欣慰的是chrome排第一,chrome一直以來對W3C標準都支持得比較友好,但是圖中也反映了使用IE系列的人數也不少,所以我們日常做前端開發的時候還要考慮他們的感受。

以下是正文:

  我的前任公司做前端的時候,要求相容IE8及以上,谷歌,火狐三座大山。因為是用的表格佈局(有一定歷史了~),所以日常開發以及維護的時候一般也沒什麼太大的相容問題要處理。現在谷歌和火狐對W3C標準支持得比較好,特別是最新的版本。現在火狐最新版本是49.0.1.6109,chrome最新版本53.0.2785.116 。寫過幾個HTML5+CSS3的小頁面(3D魔方動畫、簡筆畫+動畫),支持的都很好。某些CSS3屬性不支持直接加首碼 -webkit- 、 -moz- 、-o-、-ms- 即可解決。

 

一句話總結: 各大瀏覽器最新版幾乎都支持W3C標準,但日常開發用到CSS3屬性的時候建議加上首碼,以向前相容老版本的瀏覽器。

慄子:

transform-style: preserve-3d;        /*W3C標準*/

-webkit-transform-style: preserve-3d;   /*chrome safari*/

-moz-transform-style: preserve-3d;      /*firefox*/

-0-transform-style: preserve-3d;          /*opera*/

 

說完簡單的來說點不是很複雜的。

IE系列中,IE9及以上對HTML5支持都不錯了。但是IE678還是有很大的問題,主要就是不支持HTML5的新標簽。

(HTML5加了什麼新標簽?新標簽有什麼作用?請看https://developer.mozilla.org/zh-CN/docs/Web/Guide/HTML/Sections_and_Outlines_of_an_HTML5_document)

這個問題我認為比較好的解決方案就是html5shiv.js(什麼?你說還有更好的解決方案?請不吝告知,萬分感謝)

這個文件有興趣的可以看看,主要是創建了html5的新標簽(慄 article nav等),然後將這些標簽設為塊級元素。

對於小白來說,使用非常簡單,在頁面的head中添加下麵的代碼

<!--[if lt IE 9]>
    <script src="js/html5shiv.js"></script>
    <![endif]-->

當瀏覽器是IE且版本小於IE9的時候,就使用這個js文件,解決不相容html5的問題。

但是在開發過程中,解決這些往往不夠,特別是IE 6 7 還有一些內容是會產生不相容。

慄子:

我們平時寫導航欄的時候,可能會用到display: inline-block;但是用完以後發現IE6 7 不支持inline-block這個屬性。

那我只好在代碼中添加+display: inline; 然後再用+zoom:1做縮放。

雖然和inline-block還是有點不一致的地方,但是整體來說還是可以的。

這個首碼+只能被IE 67識別,其他版本瀏覽器都不會識別這句CSS代碼。

display: inline-block;
+display: inline; /*for IE6、7*/

還有其他首碼,例如 IE6專屬首碼“-”   -display:inline;

首碼"*"  *display:inline; /*IE6 7*/

 除了添加首碼,還可以用條件註釋hack

慄子:

<!--[if IE 6]> 僅IE6可識別
  您的代碼 <![endif]
--> <!--[if lt IE 9]> IE9以下版本可識別
  您的代碼 <![endif]
-->

 

IE6還有特別多的BUG,比如著名的3px等,IE67是挺麻煩的,但是現在(2016.9.28)很多公司都不再要求完全相容IE6 7,所以這裡也不詳細說,有首碼hack和條件註釋hack我認為就夠用了。大家有興趣可以下載IEtest或者在IE11中調出相容模式,用IE各種版本看看一些頁面內容豐富的大網站有什麼區別。

說完IE 6 7 最後再啰嗦啰嗦IE 8 

IE8一般情況下是沒什麼相容問題,但是IE8沒有專屬的首碼hack,如果出現問題我會用首碼hack來篩選,

(你說條件註釋hack可以嗎?當然可以)

看看慄子

慄子:

.div{
   width: 100px;
height: 100px;
background:green\0; /* IE 8 9 10專屬*/ background:red\0\9; /*IE 9 10專屬*/ background:red; /*W3C標準*/ }

這個慄子里用首碼hack選擇, 除了IE8中DIV顯示背景顏色是綠色,IE9 10和其他瀏覽器都是紅色。

如果您還有更好更便捷的方法,請不吝告知,萬分感謝。

IE9及以上幾乎都沒有太大的問題。這裡就不啰嗦了。以後工作中發現了再來補充。

最後總結,日常開發中很少會用到IE hack,寫這篇博客也是為以後以防不測~

如果還有什麼疑問或者建議,可以多多交流,原創文章,文筆有限,才疏學淺,文中若有不正之處,萬望告知 ending~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 多態:龍生九子,各有不同 同樣都是繼承了同一個父類,但是父類中的方法並不使用任何一個子類,那麼在這就需要子類重新編寫這個方法的主體 1、需要父類同意子類可以重新編寫自己的方法 virtual - 虛方法 2、子類只能重寫父類允許重寫的方法,只能重寫虛方法 override - 重寫覆蓋虛方法 所有的 ...
  • Atitit 延遲綁定架構法attilax總結 配置文件的延遲綁定1 Api屬性與方法的回調延遲綁定1 後期綁定和前期綁定2 延遲調用2 用 Java 語言延遲綁定2 什麼是推遲綁定 C++3 配置文件的延遲綁定 通過把配置文件延遲綁定在啟動bat文件上,可以及時靈活的切換配置文件。 Api屬性與方 ...
  • Atitit java集成內嵌瀏覽器與外嵌瀏覽器attilax總結 HTML5將顛覆原生App世界。這聽起來有點危言聳聽,但若認真分析HTML5的發展史,你會發現,這個世界的發展趨勢確實就是這樣。 熟知歷史才能預知未來,先讓我們來看看HTML5為什麼誕生、這8年是怎麼過來的。 HTML5的誕生 自W ...
  • 摘要: 微服務架構被提出很短的時間內,就被越來越多的開發人員推崇,簡單來說其主要的目的是有效的拆分應用,實現敏捷開發和部署 。本分享即嘗試介紹微服務架構的一些實施細節和要求,探詢微服務架構的由來,並最終提供我們團隊內部的一些實踐總結,希望對大家有幫助。 WHAT - 什麼是微服務 微服務簡介 這次參... ...
  • 摘要: 最近很多阿裡內部的同學和客戶私信來咨詢如何學習 Docker 技術。為此,我們列了一個路線圖供大家學習Docker和阿裡雲容器服務。這個列表包含了一些社區的優秀資料和我們的原創文章。我們會隨著Docker技術的發展持續更新本文,也會在雲棲社區繼續貢獻內容來幫助同學們快速入門或持續提高。 Do... ...
  • 背景 現在的web系統已經越來越多的應用緩存技術,而且緩存技術確實是能實足的增強系統性能的。我在項目中也開始接觸一些緩存的需求。 開始簡單的就用jvm(java托管記憶體)來做緩存,這樣對於單個應用伺服器來說很好。 為了系統的可用性,需要做災備,那麼就要多準備一套系統環境,這時就會有一些共用資源的問題 ...
  • 在JavaScript代碼有很多單鏈表形式的代碼,如if_else,switch等,倘若我們想將其如同Promise一樣扁平化處理呢?下麵我們就一起來看看唄~ ...
  • JS HTML DOM 改變 HTML 輸出流 JavaScript 能夠創建動態的 HTML 內容: 今天的日期是: Sat Sep 24 2016 15:06:50 GMT+0800 (中國標準時間) 在 JavaScript 中,document.write() 可用於直接向 HTML 輸出流 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...