瀏覽器兼容

一、前言

做前端開發,必然少不了瀏覽器,然而不同的廠商有著各自版本的瀏覽器,不同的瀏覽器對css的理解和解析不一樣。那用戶使用不同廠商不同版本的瀏覽器,而我們要給用戶一個統一的網頁,那我們在寫css時就必須考慮到網頁在不同的瀏覽器展現所帶來的問題。
  例如,一個css屬性,在IE 8不可以使用,但是在IE 9可以使用,而我們又使用了這個css屬性,又必須在IE 8上展示,那我們就需要解決這個屬性在不同版本的展示,也就是瀏覽器的兼容問題。下面通過一些解決思路和方法來探討如何解決瀏覽器的兼容問題。

二、什么是 CSS hack

不同版本或不同廠商的的瀏覽器(如IE6-IE11,Firefox/Safari/Opera/Chrome等),對CSS的支持和解析存在著差異,我們為在不同的瀏覽器獲得統一的頁面展現效果,就需要針對不同的瀏覽器寫特定的CSS樣式。我們把針對不同的瀏覽器寫相應的CSS樣式的過程稱為CSS hack。

三、淺談解決瀏覽器兼容的思路
1、要不要做這個產品

如果我們要做一個產品,首先要從成本和回報的角度來考慮,這個產品是否有必要做。
  如果有必要,我們再從產品的角度思考又是為哪類用戶做。用戶會通過哪些瀏覽器來瀏覽網頁,不同的瀏覽器使用的比例,以及是網頁展示的功能優先還是網頁展示的效果優先。這些問題我們都需要了解。
  在這里推薦一個網站,百度統計,我們可以從這個網站了解到不同的瀏覽器的市場份額。從這個網站我們也可以看到,依然有一部分人群,使用比較老版本的瀏覽器(如IE 7、8)。我們的用戶是不是大部分使用這些老版本的瀏覽器的,一般安全性比較高的政府機關或者銀行等單位,他們的瀏覽器一般都是比較老的。如果我們的用戶是這些,那我們寫CSS時,就要考慮屬性兼容的問題。

2、做到什么程度

一般企業都會從成本和回報的角度去考慮,這個產品做到什么程度。假如產品的重要性我們已經了解,那我們要考慮讓哪些瀏覽器來支持,需不需要老版本的瀏覽器支持,支持到哪個版本等等都要了解。了解這些過后,我們在做網頁開發時,就會有一個清晰的思路,如何讓不支持這個CSS屬性的瀏覽器,獲得同樣支持的瀏覽器的頁面統一。

3、常用解決兼容的方法

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

二者區別:
  “優雅降級”觀點認為應該針對那些最高級、最完善的瀏覽器來設計網站。而將那些被認為“過時”或有功能缺失的瀏覽器下的測試工作安排在開發周期的最后階段,并把測試對象限定為主流瀏覽器(如 IE、Chrome等)的前一個版本。

在這種設計范例下,舊版的瀏覽器被認為僅能提供“簡陋卻無妨 ” 的瀏覽體驗。你可以做一些小的調整來適應某個特定的瀏覽器。但由于它們并非我們所關注的焦點,因此除了修復較大的錯誤之外,其它的差異將被直接忽略。

“漸進增強”觀點則認為應關注于內容本身。內容是我們建立網站的誘因。有的網站展示它,有的則收集它,有的尋求,有的操作,還有的網站甚至會包含以上的種種,但相同點是它們全都涉及到內容。這使得“漸進增強”成為一種更為合理的設計范例。

“優雅降級”和“漸進增強”都關注于同一網站在不同設備里不同瀏覽器下的表現程度。關鍵的區別則在于它們各自關注于何處,以及這種關注如何影響工作的流程。在實際的開發當中分析準確,具有什么功能或者效果的網頁,將會給我們的開發工作減少很多彎路。

在具體的開發當中我們一般參考一下幾個方法,獲得較理想的兼容效果。
方法1:根據兼容需求選擇技術框架/庫(jquery)。
方法2:根據兼容需求選擇兼容工具(html5shiv.jsrespond.jscss resetnormalize.cssModernizr)。
方法3:postCSS
方法4:條件注釋、CSS Hack、js 能力檢測做一些修補。

四、瀏覽器兼容的寫法舉例

以下包含但不限于

1、選擇合適的框架

①、Bootstrap (>=ie8) :即IE 8及以上都可以使用。
②、jQuery 1.~ (>=ie6), jQuery 2.~ (>=ie9):jQuery2以下版本,IE6及以后瀏覽器都能識別;jQuery2以上IE9及以上都能使用。
③、Vue (>= ie9):IE9及以后版本都能使用。

2、條件注釋 (conditional comment)

條件注釋是于HTML源碼中被 Microsoft Internet Explorer 有條件解釋的語句。條件注釋可被用來向 Internet Explorer 提供及隱藏代碼。也稱:IE hack。
  有兩種“條件注釋”:下層顯示 (downlevel revealed)和下層隱藏(downlevel hidden)。
下層隱藏:
下層顯示 :<![if expression]> HTML <![endif]>
如下是兩個“下層隱藏”條件注釋的示例。

或者

第一個示例中的指令將會讓 IE 8 讀取指定的CSS文件,而 IE 7 或者其它版本的 IE 將會忽略它。非 IE 的瀏覽器同樣會把它忽略因為它看起來像一條標準的 HTML 注釋。第二條示例里的標記將會讓 IE 5 至 7 讀取其內的 CSS 樣式。通過對這種標記的不同的使用你也可以挑出 IE 6, IE 5 或者比指定版本更新(大)或更舊(小)版本的 IE。

這里解釋一下標準 HTML 注釋:標準 HTML 注釋:
  注釋標簽用于在源代碼中插入注釋。注釋不會顯示在瀏覽器中。您可使用注釋對您的代碼進行解釋,這樣做有助于您在以后的時間對代碼的編輯。當您編寫了大量代碼時尤其有用。
  使用注釋標簽來隱藏瀏覽器不支持的腳本也是一個好習慣(這樣就不會把腳本顯示為純文本)。

3、CSS hack

CSS Hack大致有3種表現形式,CSS屬性前綴法、選擇器前綴法以及IE條件注釋法(即HTML頭部引用if IE)Hack,實際項目中CSS Hack大部分是針對IE瀏覽器不同版本之間的表現差異而引入的。browserhacks 查 Hack 的寫法網站。

(1)屬性前綴法(即類內部Hack):例如 IE6能識別下劃線""和星號" * ",IE7能識別星號" * ",但不能識別下劃線"",IE6~IE10都認識"\9",但firefox前述三個都不能認識。
示列:
background-color:red; /* All browsers */ background-color:blue !important;/* All browsers but IE6 */ *background-color:black; /* IE6, IE7 */ +background-color:yellow;/* IE6, IE7*/ background-color:gray\9; /* IE6, IE7, IE8, IE9, IE10 */ background-color:purple\0; /* IE8, IE9, IE10 */ background-color:orange\9\0;/*IE9, IE10*/ _background-color:green; /* Only works in IE6 */
(2)選擇器前綴法(即選擇器Hack)。
示例:
*html *前綴只對IE6生效 *+html *+前綴只對IE7生效 @media screen\9{...}只對IE6/7生效
(3)IE條件注釋法(即HTML條件注釋Hack):上文已談到條件注釋,此處不再贅述。

4、常見屬性的兼容情況

inline-block: >=ie8
min-width/min-height: >=ie8
:before,:after: >=ie8
div:hover: >=ie7
inline-block: >=ie8
background-size: >=ie9
圓角: >= ie9
陰影: >= ie9
動畫/漸變: >= ie10

五、一些和兼容相關的開發利器

1、html5shiv.js
HTML5 Shiv支持在舊版Internet Explorer中使用HTML5細分元素,并為Internet Explorer 6-9,Safari 4.x(和iPhone 3.x)和Firefox 3.x提供基本的HTML5樣式。
2、respond.js
此腳本的目標是提供一個快速和輕量級(3kb縮小/ 1kb gzipped)腳本,以便
在不支持CSS3媒體查詢的瀏覽器中啟用響應式網頁設計,特別是Internet Explorer 8及更低版本。
3、css reset:其目的是將所有的瀏覽器的自帶樣式重置掉,這樣更易于保持各瀏覽器渲染的一致性。不過,由于出現了更加優秀的Normalize.css,所以css reset基本上被替代了。
4、normalize.css
Normalize.css只是一個很小的CSS文件,但它在默認的HTML元素樣式上提供了跨瀏覽器的高度一致性。相比于傳統的CSS reset,Normalize.css是一種現代的、為HTML5準備的優質替代方案。
Normalize.css現在已經被用于Twitter BootstrapHTML5 BoilerplateGOV.UKRdioCSS Tricks 以及許許多多其他框架、工具和網站上。
5、Modernizr
Modernizr是一套JavaScript 庫,用來偵測瀏覽器是否支持HTML5與CSS3等規格。如果瀏覽器不支持,Modernizr會使用其他的解決方法來進行模擬。
許多HTML5與CSS 3的功能已經在許多主流的瀏覽器中實現出來。Modernizr能夠告訴開發者,瀏覽器是否已經實現他們想要的功能。這讓開發者在瀏覽器上可以充分利用這些新功能,或者嘗試制作解決方案來支持那些老舊的瀏覽器。
6、Postcss
PostCSS是一個使用JS插件轉換樣式的工具。這些插件可以刪除您的CSS,支持變量和混合,透明未來的CSS語法,內聯圖像等。

六、task12完

保持饑餓保持學習
注:CSS所有的屬性我們都可以在這個網站去查[caniuse.com]
參考資料:
1、 http://blog.csdn.net/freshlover/article/details/12132801
2、http://blog.csdn.net/xiongzhengxiang/article/details/7999525
3、https://zh.wikipedia.org/zh-hans/%E6%9D%A1%E4%BB%B6%E6%B3%A8%E9%87%8A
4、http://www.w3school.com.cn/tags/tag_comment.asp
5、http://jerryzou.com/posts/aboutNormalizeCss/
6、https://zh.wikipedia.org/wiki/Modernizr

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,327評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,996評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,316評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,406評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,128評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,524評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,576評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,759評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,310評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,065評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,249評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,821評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,479評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,909評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,140評論 1 290
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,984評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,228評論 2 375

推薦閱讀更多精彩內容

  • 一、如何調試 IE 瀏覽器? IE調試的一般方法(css): 使用高版本IE控制臺(對于IE7以上)IE11的開發...
    婷樓沐熙閱讀 560評論 0 6
  • CSS Hack 不同的瀏覽器對某些CSS代碼解析會存在一定的差異,因此就會導致不同瀏覽器下給用戶展示的頁面效果不...
    zx9426閱讀 400評論 0 0
  • 做前端多年,雖然不是經常需要hack,但是我們經常會遇到各瀏覽器表現不一致的情況。基于此,某些情況我們會極不情愿的...
    大女表哥閱讀 1,119評論 0 9
  • 什么是 CSS hack 由于不同廠商的瀏覽器,比如Internet Explorer,Safari,Mozill...
    阿魯提爾閱讀 270評論 0 2
  • 本文版權歸饑人谷和本人所有 1.什么是 CSS hackCSS hack由于不同廠商的瀏覽器,比如Internet...
    饑人谷_xxxxx閱讀 309評論 0 0