淺談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
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...