瀏覽器的兼容問題

1. 什么是 CSS hack

Hack是針對不同瀏覽器去寫不同的CSS樣式嫡丙,從而讓各瀏覽器能達到一致的渲染效果资铡,那么針對不同的瀏覽器寫不同的CSS CODE的過程就叫做CSS Hack。然后將Hack放在瀏覽器特定的CSS文件中,讓符合條件的瀏覽器去解析這些代碼,符合條件的就解析袖外,不符合的就不解析,從而達到所需要的頁面渲染效果魂务÷椋總的一句話來說就是使用CSS Hack將會使你的CSS代碼部分失去作用,然后借助條件樣式粘姜,使用其原CSS代碼在一些瀏覽器解析鬓照,而CSS Hack代碼在符合條件要求的瀏覽器中替代原CSS那部分代碼。

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

主要從三個方面去考慮:

  1. 要不要去做孤紧?
    主要從產(chǎn)品的角度和成本的角度去考慮颖杏;產(chǎn)品的角度來說我們要考慮清楚產(chǎn)品的使用群體,以及受眾的瀏覽器比例坛芽,從中分析我們需要效果優(yōu)先還是功能優(yōu)先留储。從成本的角度分析,就是我們做某個功能值不值得咙轩,有沒有必要获讳,付出和收獲是否不成比例。
  2. 如果做活喊,做到什么程度丐膝?
    具體到需要讓那些瀏覽器支持哪些效果,在不同的瀏覽器側(cè)重點也不同钾菊。
    例如:漸進增強和優(yōu)雅處理帅矗。
    漸進增強是指針對低版本瀏覽器進行頁面構(gòu)建,保證最基本的功能煞烫,在這基礎(chǔ)上補充一些高級瀏覽器的效果浑此,功能,交互滞详;
    優(yōu)雅降級:針對高級瀏覽器凛俱,構(gòu)建完整的功能紊馏,再針對低版本的瀏覽器去做一些兼容。
  3. 如何去做蒲犬?
    根據(jù)兼容的需求選擇不同的技術(shù)或框架(比如jQuery)
  4. Bootstrap;
  5. jQuery 1.~(>=ie6),jQuery 2.~(>=ie9);
  6. Vue(>=ie9);
  7. ....

根據(jù)兼容需求選擇兼容工具(html5shiv.js , respond.js , css.reset , normalize.css , Modernizr)
postCSS
條件注釋 CSS Hack js能力檢測做一些修補朱监。

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

條件注釋:

<!--[if IE 6]> 
    <p>You are using Internet Explorer 6.</p>
 <![endif]-->
<!--[if !IE]><!--> 
    <script>alert(1);</script> 
<!--<![endif]-->
 <!--[if IE 8]>
     <link href="ie8only.css" rel="stylesheet"> 
<![endif]-->

| 項目 | 范例 | 說明 |
| :------: | :------: |
| ! | [if !IE] | 非IE |
| lt | [if lt IE 5.5] | 小于IE 5.5 |
| lte | [if lte IE 6] | 小于等于IE6 |
| gt | [if gt IE 5] | 大于 IE5 |
| gte | [if gte IE 7] | 大于等于IE7 |
| 或| [if (IE 6)或(IE 7)] | IE6或者IE7 |

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

.box{
//屬性前綴法
  color: red;
  _color: blue; /*ie6*/
  *color: pink; /*ie67*/
  color: yellow\9;  /*ie/edge 6-8*/
}
//選擇器前綴法
.ie7 .clearfix{
  zoom: 1;
}
//IE條件注釋法
<!–-[if IE 7]>
<link rel="stylesheet" href="ie7.css" type="text/css" />
<![endif]–->
<!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]-->

屬性兼容問題:
常見的屬性兼容情況如下:

  • inline-block: >=ie8
  • min-width/min-height: >=ie8
  • :before,:after: >=ie8
  • div:hover: >=ie7
  • inline-block: >=ie8
  • background-size: >=ie9
  • 圓角: >= ie9
  • 陰影: >= ie9
  • 動畫/漸變: >= ie10
    常見處理范例如下:
.clearfix:after{
  content: '';
  display: block;
  clear: both;
}
.clearfix{
  *zoom: 1; /* 僅對ie67有效 */
}
.target{
  display: inline-block;
  *display: inline;
  *zoom: 1;
}

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

  • 條件注釋
    條件注釋 (conditional comment) 是于HTML源碼中被IE有條件解釋的語句奋隶。條件注釋可被用來向IE提供及隱藏代碼擂送。(IE10不再支持條件注釋)。
  • IE Hack
    專門準對IE瀏覽器不同版本間的兼容性問題的處理达布,使之能夠渲染出想要的效果团甲。
  • js 能力檢測
    是指js中兼容性問題的一些封裝逾冬。通過js封裝函數(shù)或?qū)ο髞斫鉀Q瀏覽器的兼容問題黍聂。
  • html5shiv.js
    用于解決IE9以下版本瀏覽器對HTML5新增標簽不識別,并導(dǎo)致CSS不起作用的問題身腻。使用Javascript來使不支持HTML5的瀏覽器支持HTML標簽产还。利用腳本document.createElement(“”)創(chuàng)建對應(yīng)的腳本,CSS選擇器便可正確應(yīng)用到該標簽嘀趟。
  • respond.js
    Respond.js 是一個快速脐区、輕量的 polyfill,用于為 IE6-8 以及其它不支持 CSS3 Media Queries 的瀏覽器提供媒體查詢的 min-width 和 max-width 特性她按,實現(xiàn)響應(yīng)式網(wǎng)頁設(shè)計牛隅。(Responsive Web Design)
  • css reset
    HTML標簽在瀏覽器中都有默認的樣式,例如p標簽有上下邊距酌泰,strong標簽有字體加粗樣式等媒佣。不同瀏覽器的默認樣式之間存在差別,例如ul默認帶有縮進樣式陵刹,在IE下默伍,它的縮進是由margin實現(xiàn)的,而在Firefox下卻是由padding實現(xiàn)的衰琐。開發(fā)時瀏覽器的默認樣式可能會給我們帶來多瀏覽器兼容問題也糊,影響開發(fā)效率。解決方法其中之一是開始就將瀏覽器的默認樣式全部覆蓋掉羡宙,這就是CSS reset狸剃。
  • normalize.css
    Normalize.css 是一個可以定制的CSS文件,它讓不同的瀏覽器在渲染網(wǎng)頁元素的時候形式更統(tǒng)一狗热。
    1. 它可以保留有用的默認值捕捂,不同于許多 CSS 的重置
    2. 標準化的樣式瑟枫,適用范圍廣的元素。
    3. 糾正錯誤和常見的瀏覽器的不一致性指攒。
    4. 一些細微的改進慷妙,提高了易用性。
    5. 使用詳細的注釋來解釋代碼允悦。
  • Modernizr
    Modernizr是一個檢測用戶瀏覽器HTML5和CSS3能力的JavaScript庫膝擂。Modernizr在頁面加載時快速運行來檢測功能;之后它會創(chuàng)建一個保存檢測結(jié)果的JavaScript對象隙弛,然后為你頁面中的html標簽上添加一系列class屬性來接通你的CSS架馋。
    Modernizr支持大量的測試和可選地包括YepNope.js來視情況加載外部的js和css資源。
  • postCSS
    PostCSS 是使用 JS 插件來轉(zhuǎn)換 CSS 的工具全闷,支持變量叉寂,混入,未來 CSS 語法总珠,內(nèi)聯(lián)圖像等等屏鳍。PostCSS是CSS變成JavaScript的數(shù)據(jù),使它變成可操作局服。PostCSS是基于JavaScript插件钓瞭,然后執(zhí)行代碼操作。PostCSS自身并不會改變CSS淫奔,它只是一種插件山涡,為執(zhí)行任何的轉(zhuǎn)變鋪平道路。

5.一般在哪個網(wǎng)站查詢屬性兼容性唆迁?

http://caniuse.com/8

最后編輯于
?著作權(quán)歸作者所有,轉(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
  • 正文 為了忘掉前任,我火速辦了婚禮彩郊,結(jié)果婚禮上前弯,老公的妹妹穿的比我還像新娘。我一直安慰自己秫逝,他們只是感情好恕出,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著违帆,像睡著了一般浙巫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上刷后,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天的畴,我揣著相機與錄音,去河邊找鬼惠险。 笑死苗傅,一個胖子當(dāng)著我的面吹牛抒线,可吹牛的內(nèi)容都是我干的班巩。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼嘶炭,長吁一口氣:“原來是場噩夢啊……” “哼抱慌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起眨猎,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤抑进,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后睡陪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寺渗,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年兰迫,在試婚紗的時候發(fā)現(xiàn)自己被綠了信殊。 大學(xué)時的朋友給我發(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
  • 正文 我出身青樓拄养,卻偏偏與公主長得像离斩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子瘪匿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

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

  • 關(guān)于瀏覽器的兼容問題 1. 什么是 CSS hack 根據(jù)百度的簡述:CSS hack由于不同廠商的瀏覽器跛梗,比如I...
    熊蛋子17閱讀 686評論 0 2
  • 什么是CSS hack CSS hack由于不同廠商的瀏覽器,比如Internet Explorer,Safari...
    尾巴尾巴尾巴閱讀 774評論 0 0
  • 所謂的瀏覽器兼容性問題棋弥,是指因為不同的瀏覽器對同一段代碼有不同的解析核偿,造成頁面顯示效果不統(tǒng)一的情況。在大多數(shù)情況下...
    一直以來都很好閱讀 351評論 0 2
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案顽染? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽?zāi)J的外補...
    _Yfling閱讀 13,728評論 1 92
  • 夜深難以入睡 點上一支煙漾岳,把白天的歡喜吸進肺里 想對你說的情話,僅在五臟間交流 怕說出來粉寞,就好比外邊的蟲蛙聲擾你入...
    會唱歌的殺豬刀閱讀 153評論 0 2