1.什么是 CSS hack?
由于不同廠商的瀏覽器呐伞,比如Internet Explorer,Safari,Mozilla Firefox,Chrome等,或者是同一廠商的瀏覽器的不同版本慎式,如IE6和IE7伶氢,對CSS的解析認識不完全一樣,因此會導(dǎo)致生成的頁面效果不一樣瘪吏,得不到我們所需要的頁面效果癣防。這個時候我們就需要針對不同的瀏覽器去寫不同的CSS,讓它能在不同的瀏覽器中也能得到我們想要的頁面效果掌眠。
CSS Hack大致有3種表現(xiàn)形式蕾盯,CSS屬性前綴法、選擇器前綴法以及IE條件注釋法(即HTML頭部引用if IE)Hack蓝丙,實際項目中CSS Hack大部分是針對IE瀏覽器不同版本之間的表現(xiàn)差異而引入的级遭。
屬性前綴法(即類內(nèi)部Hack):例如 IE6能識別下劃線"-"和星號" * ",IE7能識別星號" * "渺尘,但不能識別下劃線""挫鸽,IE6~IE10都認識"\9",但firefox前述三個都不能認識
選擇器前綴法(即選擇器Hack)
IE條件注釋法(即HTML條件注釋Hack):針對所有IE(注:IE10+已經(jīng)不再支持條件注釋): 鸥跟,針對IE6及以下版本:丢郊。這類Hack不僅對CSS生效,對寫在判斷語句里面的所有代碼都會生效医咨。
2.談一談瀏覽器兼容的思路
1.要不要做
主要從兩個角度來進行考慮要不要做枫匾,一個是產(chǎn)品,一個是成本拟淮。從產(chǎn)品的受眾干茉、受眾的瀏覽器比例、效果優(yōu)先還是基本功能優(yōu)先這些方面來進行考慮惩歉,各個瀏覽器的兼容是否需要等脂,其次是兼容的成本問題俏蛮,即為了兼容付出的成本是否能取得收益。從產(chǎn)品和成本確定上遥,是否需要進行瀏覽器兼容搏屑。
2.做到什么程度
確定好要做兼容后,再進一步確定兼容到什么程度粉楚,只需要兼容主流瀏覽器辣恋,還是所有瀏覽器都兼容,對于IE瀏覽器需要兼容到IE11模软,還是兼容到IE6伟骨。第二步是需要確實兼容的范圍。
3.如何做
根據(jù)兼容需求選擇技術(shù)框架/庫(jquery)
根據(jù)兼容需求選擇兼容工具(html5shiv.js燃异、respond.js携狭、css reset、normalize.css回俐、Modernizr)
postCSS
條件注釋逛腿、CSS Hack、js 能力檢測做一些修補
兩種常見的瀏覽器兼容問題處理方式:
漸進增強(progressive enhancement): 針對低版本瀏覽器進行構(gòu)建頁面仅颇,保證最基本的功能单默,然后再針對高級瀏覽器進行效果、交互等改進和追加功能達到更好的用戶體驗忘瓦。
優(yōu)雅降級 (graceful degradation): 一開始就構(gòu)建完整的功能搁廓,然后再針對低版本瀏覽器進行兼容。
3.列舉5種以上瀏覽器兼容的寫法
- *耕皮, ie6,ie7可以識別境蜕;
- _和- , ie6可以識別明场;
- !important ,表示高優(yōu)先級汽摹,ie7及以上,firefox都支持苦锨,ie6認識帶!important的樣式屬性,但不認識!important的優(yōu)先級趴泌;
- -webkit- 舟舒,針對safari,chrome瀏覽器的內(nèi)核CSS寫法
- -moz-嗜憔,針對firefox瀏覽器的內(nèi)核CSS寫法
- -ms-秃励,針對ie內(nèi)核的CSS寫法
- -o-,針對Opera內(nèi)核的CSS寫法
- CSS里可以給屬性或者選擇器寫hack吉捶。屬性例如:background:blue;_background:red;選擇器例如: html #demo {width:120px;} *+html #demo {width:130px;}
- HTML 針對所有IE:
4.以下工具/名詞是做什么的
條件注釋
條件注釋 (conditional comment) 是于HTML源碼中被IE有條件解釋的語句夺鲜。條件注釋可被用來向IE提供及隱藏代碼皆尔。
<script>alert(1);</script>
使用了條件注釋的頁面在 Windows Internet Explorer 9 中可正常工作,但在 Internet Explorer 10 中無法正常工作币励。 IE10不再支持條件注釋慷蠕。
IE Hack
指的是IE瀏覽器漏洞,利用IE Hack食呻,我們可以兼容IE低版本流炕。
js 能力檢測
檢測當前瀏覽器支持和不支持的特性。如Modernizr.js,它會為瀏覽器的html標簽生成一批的css的class名稱仅胞,標記當前瀏覽器支持和不支持的特性每辟。我們利用html標簽上的類名,就可以為不同版本的不同瀏覽器添加兼容樣式
html5shiv.js
html5shiv.js主要解決HTML5提出的新的元素不被IE6-8識別干旧,這些新元素不能作為父節(jié)點包裹子元素渠欺,并且不能應(yīng)用CSS樣式。讓CSS 樣式應(yīng)用在未知元素上只需執(zhí)行 document.createElement(elementName) 即可實現(xiàn)椎眯。
respond.js
是一種css兼容工具峻堰。可在IE6~8(不支持css3)上模擬CSS3 Media Queries
css reset
強制重置瀏覽器默認樣式盅视。使得所有瀏覽器渲染頁面效果一致,但存在性能問題捐名。
normalize.css
Normalize.css 是一個可以定制的CSS文件,實現(xiàn)樣式重置的一種方式闹击,相對于其他的方式更有優(yōu)勢镶蹋,標準化的樣式,適用范圍廣的元素赏半。糾正錯誤和常見的瀏覽器的不一致性贺归。一些細微的改進,提高了易用性断箫。使用詳細的注釋來解釋代碼拂酣。
Modernizr
Modernizr是一個開源的JS庫,它使得那些基于訪客瀏覽器的不同(指對新標準支持性的差異)而開發(fā)不同級別體驗的設(shè)計師的工作變得更為簡單仲义。它使得設(shè)計師可以在支持[HTML5]和CSS3的特性進行開發(fā)婶熬,同時又不會犧牲其他不支持這些新技術(shù)的瀏覽器的控制。
PostCSS
它可以被理解為一個平臺埃撵,可以讓一些插件在上面跑赵颅,它提供了一個解析器,可以將CSS解析成抽象語法樹暂刘,通過PostCSS這個平臺饺谬,我們能夠開發(fā)一些插件,來處理CSS谣拣。熱門插件如autoprefixer募寨,它可以幫我們處理兼容問題族展,只需正常寫CSS,autoprefixer可以幫我的自動生成兼容性代碼.
5.一般在哪個網(wǎng)站查詢屬性兼容性拔鹰?
caniuse.com 查CSS屬性兼容