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)差異而引入的。
- 屬性前綴法(即類內(nèi)部Hack):例如 IE6能識別下劃線""和星號" * ",IE7能識別星號" * ",但不能識別下劃線"",IE6~IE10都認(rèn)識"\9",但firefox前述三個都不能認(rèn)識。
- 選擇器前綴法(即選擇器Hack):例如 IE6能識別html .class{},IE7能識別+html .class{}或者*:first-child+html .class{}。
- 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可以幫我的自動生成兼容性代碼