關于瀏覽器的兼容問題

關于瀏覽器的兼容問題

1. 什么是 CSS hack

根據(jù)百度的簡述:CSS hack由于不同廠商的瀏覽器,比如Internet Explorer,Safari,Mozilla Firefox,Chrome等殃姓,或者是同一廠商的瀏覽器的不同版本袁波,如IE6和IE7,對CSS的解析認識不完全一樣蜗侈,因此會導致生成的頁面效果不一樣篷牌,得不到我們所需要的頁面效果。 這個時候我們就需要針對不同的瀏覽器去寫不同的CSS踏幻,讓它能夠同時兼容不同的瀏覽器枷颊,能在不同的瀏覽器中也能得到我們想要的頁面效果。
我們可以簡單的認為是该面,CSS hack的目的就是使你的CSS代碼兼容不同的瀏覽器夭苗。
CSS hack

CSS Hack大致有3種表現(xiàn)形式:

  • CSS屬性前綴法
  • 選擇器前綴法
  • IE條件注釋法(即HTML頭部引用if IE)Hack
    實際項目中CSS Hack大部分是針對IE瀏覽器不同版本之間的表現(xiàn)差異而引入的。

屬性前綴法(即類內(nèi)部Hack):

  1. 例如 IE6能識別下劃線"—"和星號" * "隔缀,IE7能識別星號" * "题造,但不能識別下劃線"—",IE6~IE10都認識"\9"猾瘸,但firefox前述三個都不能認識
  2. 選擇器前綴法(即選擇器Hack)
  3. IE條件注釋法(即HTML條件注釋Hack):
    針對所有IE(注:IE10+已經(jīng)不再支持條件注釋): 界赔,針對IE6及以下版本:。這類Hack不僅對CSS生效牵触,對寫在判斷語句里面的所有代碼都會生效

2. 談一談瀏覽器兼容的思路

在大體上主要分為以下幾個步驟

  • 要不要做
  1. 產(chǎn)品的角度
  2. 成本的角度
  • 要做到什么程度

需要哪些的瀏覽器支持

  • 如何做
  1. 根據(jù)兼容性選擇庫&框架
  2. 根據(jù)兼容性選擇兼容性工具
  3. postCSS
  4. 條件注釋淮悼、CSS Hack、js 能力檢測做一些修補
  • 方法思路
  1. 漸進增強(progressive enhancement): 針對低版本瀏覽器進行構建頁面揽思,保證最基本的功能袜腥,然后再針對高級瀏覽器進行效果、交互等改進和追加功能達到更好的用戶體驗
  2. 優(yōu)雅降級(graceful degradation): 一開始就構建完整的功能绰更,然后再針對低版本瀏覽器進行兼容瞧挤。

注:stackoverflow-漸進增強和優(yōu)雅降級的區(qū)別

3. 列舉5種以上瀏覽器兼容的寫法

  1. 屬性前綴法(即類內(nèi)部Hack):
 color: red; 
_color: blue; /*ie6*/
 *color: pink; /*ie67*/ 
color: yellow\9; /*ie/edge 6-8*/
}
  1. IE條件注釋法(即HTML條件注釋Hack)
<link rel="stylesheet" href="ie7.css" type="text/css" />
<![endif]–->
  1. 選擇器前綴法(即選擇器Hack)
*html *前綴只對IE6生效
*+html *+前綴只對IE7生效
@media screen\9{...}只對IE6/7生效
@media \0screen {body { background: red; }}只對IE8有效
@media \0screen\,screen\9{body { background: blue; }}只對IE6/7/8有效
@media screen\0 {body { background: green; }} 只對IE8/9/10有效
@media screen and (min-width:0\0) {body { background: gray; }} 只對IE9/10有效
@media screen and (-ms-high-contrast: active), 
  (-ms-high-contrast: none) {body { background: orange; }} 只對IE10有效等等
  1. 條件注釋結合類選擇器整體優(yōu)化
<!DOCTYPE html>
<!--[if IEMobile 7 ]> <html dir="ltr" lang="en-US"class="no-js iem7"> <![endif]-->
<!--[if lt IE 7 ]> <html dir="ltr" lang="en-US" class="no-js ie6 oldie"> <![endif]-->
<!--[if IE 7 ]> <html dir="ltr" lang="en-US" class="no-js ie7 oldie"> <![endif]-->
<!--[if IE 8 ]> <html dir="ltr" lang="en-US" class="no-js ie8 oldie"> <![endif]-->
<!--[if (gte IE 9)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html dir="ltr" lang="en-US" class="no-js"><!--<![endif]-->
  1. 利用Modernizr工具

5. 以下工具/名詞是做什么的

  • 條件注釋
    條件注釋 是于HTML源碼中被 IE 有條件解釋的語句锡宋。條件注釋可被用來向 IE提供及隱藏代碼儡湾。 條件注釋最初于微軟的 Internet Explorer 5瀏覽器中出現(xiàn),并且直至 Internet Explorer 9 均支持执俩。微軟已宣布于IE10停止支持徐钠。具體代碼如上已給出。

  • IE Hack
    針對IE瀏覽器編寫不同的CSS的讓IE能夠正常渲染的過程

  • js 能力檢測
    能力檢測又稱特性檢測役首。能力檢測的目的不是識別具體的瀏覽器尝丐,而是識別瀏覽器的能力显拜。
    能力檢測的目的應該是根據(jù)你需要的特性來選擇問題的解決方案,而不是檢測用戶在用什么瀏覽器爹袁。而且在檢測時要保證你要用到的能力確實存在远荠,自己不要做過多的推測,代碼也不要做過多的判斷失息。
    兩個重要的概念:
    第一個概念是先檢測達成目的的最常用的特性譬淳。先檢測最常用的特性,可以保證代碼最優(yōu)化盹兢,因為在多數(shù)情況下都可以避免測試多個條件邻梆。
    第二個概念是必須測試實際要用到的特性。一個特性存在绎秒,不一定意味著另一個特性也存在浦妄。

  • html5shiv.js
    IE 9之前的版本幾乎不支持HTML5元素和其它HTML5特性。
    HTML5 Shiv支持在舊版Internet Explorer(IE9之前)中使用HTML5細分元素见芹,并為Internet Explorer 6-9剂娄,Safari 4.x(和iPhone 3.x)和Firefox 3.x提供基本的HTML5樣式。

  • respond.js
    響應式布局玄呛,理想狀態(tài)是宜咒,對PC/移動各種終端進行響應。媒體查詢的支持程度是IE9+以及其他現(xiàn)代的瀏覽器把鉴,但是IE8在市場當中仍然占據(jù)了比較大量的市場份額故黑,使我們不得不進行IE低端瀏覽器的考慮。那么如何在IE6~8瀏覽器中兼容響應式布局呢庭砍?這里我們需要借助這樣一個文件:respond.js
    Respond.js 是一個快速场晶、輕量的 polyfill,用于為 IE6-8 以及其它不支持 CSS3 Media Queries 的瀏覽器提供媒體查詢的 min-width 和 max-width 特性怠缸,實現(xiàn)響應式網(wǎng)頁設計诗轻。

  • css reset
    css reset是通過重新定義標簽樣式,把瀏覽器的默認樣式覆蓋掉扳炬,以便保持個瀏覽器渲染的一致性恨樟。

  • normalize.css
    normalize.css是reset.css的替代方案养晋,保留有用的瀏覽器默認樣式零酪,同時進行一些bug的修復灯谣。

  • Modernizr
    Modernizr是一套JavaScript 庫辜窑,用來偵測瀏覽器是否支持 CSS3 或 HTML5 功能支持情況等所禀。如果瀏覽器不支持褂策,Modernizr會使用其他的解決方法來進行模擬揪惦。
    Modernizr 會在頁面加載后立即檢測特性再愈;然后創(chuàng)建一個包含檢測結果的 JavaScript 對象,同時在 html 元素加入方便你調(diào)整 CSS 的 class 名钳枕。

  • postCSS
    PostCSS是一個使用JS插件轉(zhuǎn)換樣式的工具衔沼。這些插件可以刪除您的CSS,支持變量和混合昔瞧,透明未來的CSS語法指蚁,內(nèi)聯(lián)圖像等自晰。
    PostCSS不是預處理器本身; 它不會轉(zhuǎn)換CSS凝化。事實上酬荞,它本身根本不做任何事混巧。它所做的是提供一個CSS解析器和一個框架糟把,用于創(chuàng)建可以分析,lint牲剃,處理資產(chǎn)遣疯,優(yōu)化,創(chuàng)建回退凿傅,否則轉(zhuǎn)換解析的CSS的插件缠犀。PostCSS將CSS解析為抽象語法樹(AST),通過一系列插件將其傳遞聪舒,然后PostCSS核心為插件更改的樹生成一個新的CSS字符串辨液。。如果你熟悉JavaScript工具箱残,那么你可以認為PostCSS 為CSS的Babel滔迈。
    PostCSS目前有200多個插件止吁,其中很多在PostCSS GitHub頁面上列出,而其他的可以在有用的PostCSS目錄postcss.parts中找到燎悍。PostCSS可以集成在大多數(shù)構建工具中敬惦,包括Gulp,Grunt谈山,webpack或npm俄删。
    PostCSS被行業(yè)領導者使用,包括維基百科奏路,Twitter畴椰,阿里巴巴和JetBrains。該 Autoprefixer PostCSS插件是最流行的CSS處理器之一鸽粉。

6. 一般在哪個網(wǎng)站查詢屬性兼容性斜脂?

CanIUse查CSS屬性兼容
BROWSER hacks查 Hack 的寫法

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市触机,隨后出現(xiàn)的幾起案子秽褒,更是在濱河造成了極大的恐慌,老刑警劉巖威兜,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件销斟,死亡現(xiàn)場離奇詭異,居然都是意外死亡椒舵,警方通過查閱死者的電腦和手機蚂踊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笔宿,“玉大人犁钟,你說我怎么就攤上這事∑瞄伲” “怎么了涝动?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長炬灭。 經(jīng)常有香客問我醋粟,道長,這世上最難降的妖魔是什么重归? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任米愿,我火速辦了婚禮,結果婚禮上鼻吮,老公的妹妹穿的比我還像新娘育苟。我一直安慰自己,他們只是感情好椎木,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布违柏。 她就那樣靜靜地躺著博烂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪漱竖。 梳的紋絲不亂的頭發(fā)上禽篱,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音闲孤,去河邊找鬼谆级。 笑死烤礁,一個胖子當著我的面吹牛讼积,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播脚仔,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼勤众,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鲤脏?” 一聲冷哼從身側響起们颜,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎猎醇,沒想到半個月后窥突,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡硫嘶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年阻问,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沦疾。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡称近,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哮塞,到底是詐尸還是另有隱情刨秆,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布忆畅,位于F島的核電站衡未,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏家凯。R本人自食惡果不足惜眠屎,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望肆饶。 院中可真熱鬧改衩,春花似錦、人聲如沸驯镊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至橄镜,卻和暖如春偎快,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背洽胶。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工晒夹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人姊氓。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓丐怯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親翔横。 傳聞我的和親對象是個殘疾皇子读跷,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容