瀏覽器的兼容

1. 什么是 CSS hack

由于不同廠商的流覽器或某瀏覽器的不同版本(如IE6-IE11,Firefox/Safari/Opera/Chrome等),對CSS的支持、解析不一樣,導(dǎo)致在不同瀏覽器的環(huán)境中呈現(xiàn)出不一致的頁面展現(xiàn)效果。這時,我們?yōu)榱双@得統(tǒng)一的頁面效果,就需要針對不同的瀏覽器或不同版本寫特定的CSS樣式,我們把這個針對不同的瀏覽器/不同版本寫相應(yīng)的CSS code的過程,叫做CSS hack!

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

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

  1. 屬性前綴法(即類內(nèi)部Hack):例如 IE6能識別下劃線""和星號" * ",IE7能識別星號" * ",但不能識別下劃線"",IE6~IE10都認(rèn)識"\9",但firefox前述三個都不能認(rèn)識。
  2. 選擇器前綴法(即選擇器Hack):例如 IE6能識別html .class{},IE7能識別+html .class{}或者*:first-child+html .class{}。
  3. IE條件注釋法(即HTML條件注釋Hack):針對所有IE(注:IE10+已經(jīng)不再支持條件注釋): ,針對IE6及以下版本: 。這類Hack不僅對CSS生效,對寫在判斷語句里面的所有代碼都會生效。

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

1.css的hack問題:主要針對IE的不同版本,不同的瀏覽器的寫法不同

IE的條件注釋hack:

2.IE6雙邊距問題:IE6在浮動后,又有橫向的margin,此時,該元素的外邊距是其值的2倍

解決辦法:display:block;

3.IE6下圖片的下方有空隙

解決方法:給img設(shè)置display:block;

4.IE6下兩個float之間會有個3px的bug

解決辦法:給右邊的元素也設(shè)置float:left;

5.IE6下沒有min-width的概念,其默認(rèn)的width就是min-width
6.IE6下在使用margin:0 auto;無法使其居中

解決辦法:為其父容器設(shè)置text-align:center;

7.被點擊過后的超鏈接不再具有hover和active屬性

解決辦法:按lvha的順序書寫css樣式,
":link": a標(biāo)簽還未被訪問的狀態(tài);
":visited": a標(biāo)簽已被訪問過的狀態(tài);
":hover": 鼠標(biāo)懸停在a標(biāo)簽上的狀態(tài);
":active": a標(biāo)簽被鼠標(biāo)按著時的狀態(tài);

8.在使用絕對定位或者相對定位后,IE中設(shè)置z-index失效,原因是因為其元素依賴于父元素的z-index,但是父元素默認(rèn)為0, 子高父低,所以不會改變顯示的順序
9.IE6下無法設(shè)置1px的行高,原因是由其默認(rèn)行高引起的

解決辦法:為期設(shè)置overflow:hidden;或者line-height:1px;

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

1. 條件注釋

條件注釋是一種安全的區(qū)分IE瀏覽器版本的語法,IE中的條件注釋(Conditional comments)對IE的版本和IE非IE有優(yōu)秀的區(qū)分能力,是WEB設(shè)計中常用的hack方法。
條件注釋只能用于IE5以上。

2. IE Hack

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

3. js 能力檢測

瀏覽器的能力檢測目標(biāo)不是檢測特定的瀏覽器,而是檢測瀏覽器的能力。這樣,只需要檢測瀏覽器是否支持特定的能力,就可以給出特定的解決方案。這一部分檢測是解決瀏覽器兼容問題的主要檢測。

4. html5shiv.js

解決ie9以下瀏覽器對html5新增標(biāo)簽的不識別,并導(dǎo)致CSS不起作用的問題。

5. respond.js

讓不支持css3 Media Query的瀏覽器包括IE6-IE8等其他瀏覽器支持查詢。

6. css reset

將瀏覽器的默認(rèn)樣式全部去掉,更準(zhǔn)確說就是通過重新定義標(biāo)簽樣式。“覆蓋”瀏覽器的CSS默認(rèn)屬性。最最簡單的說法就是把瀏覽器提供的默認(rèn)樣式覆蓋掉!這就是CSS reset。

7. normalize.css

Normalize.css 是一個可以定制的CSS文件,它讓不同的瀏覽器在渲染網(wǎng)頁元素的時候形式更統(tǒng)一。

8. Modernizr

Modernizr 使你可以方便地為各種情況編寫 JavaScript 和 CSS,無論瀏覽器是否支持這些特性。這是處理漸進(jìn)增強的完美方案。

9. Modernizr

會在頁面加載后立即檢測特性;然后創(chuàng)建一個包含檢測結(jié)果的 JavaScript 對象,同時在 html 元素加入方便你調(diào)整 CSS 的 class 名。

10. postCSS

它可以被理解為一個平臺,可以讓一些插件在上面跑,它提供了一個解析器,可以將CSS解析成抽象語法樹,通過PostCSS這個平臺,我們能夠開發(fā)一些插件,來處理CSS。熱門插件如autoprefixer,它可以幫我們處理兼容問題,只需正常寫CSS,autoprefixer可以幫我的自動生成兼容性代碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 什么是 CSS hack? CSS hank由于不同廠商的瀏覽器,比如IE,Safari,Chrome等,或者同一...
    饑人谷_tonya閱讀 658評論 0 0
  • 關(guān)于瀏覽器的兼容問題 1. 什么是 CSS hack 根據(jù)百度的簡述:CSS hack由于不同廠商的瀏覽器,比如I...
    熊蛋子17閱讀 703評論 0 2
  • 1. 什么是 CSS hack Hack是針對不同瀏覽器去寫不同的CSS樣式,從而讓各瀏覽器能達(dá)到一致的渲染效果,...
    Schrodinger的貓閱讀 408評論 0 0
  • 前言 瀏覽器的兼容性問題是個很龐大復(fù)雜的問題,很難找到四海皆準(zhǔn)的辦法,這里我們只是簡單介紹下幾種經(jīng)典的處理兼容性問...
    浪里行舟閱讀 1,433評論 1 14
  • 一、如何調(diào)試 IE 瀏覽器1、IE7以上版本的瀏覽器自帶開發(fā)者工具,可以直接設(shè)置進(jìn)行調(diào)試。 五、reset.css...
    崔敏嫣閱讀 482評論 0 1