1.什么是 CSS hack?
由于不同廠商的瀏覽器,比如internet explorer ,SAFARI,mozilla firefox chrome等,或者是同一廠商的不同版本,如IE6 7 89對(duì)CSS的解析認(rèn)識(shí)不完全一樣,因此會(huì)導(dǎo)致頁(yè)面效果的不同,得不到我們期望中的頁(yè)面效果,這個(gè)時(shí)候我們就需要針對(duì)不同的瀏覽器去寫不同的css,讓它能在不同的瀏覽器中也能得到我們想要的頁(yè)面效果。
css hack大致有三種表現(xiàn)形式,css屬性前綴法,選擇器前綴法,和IE條件注釋法實(shí)際項(xiàng)目中CSS hank大部分是針對(duì)IE瀏覽器不同版本之間差異而引入的。
屬性前綴發(fā)即內(nèi)部hank:例如ie6可以識(shí)別和下滑線,ie7只能識(shí)別不能識(shí)別下劃線,ie6~ie10都認(rèn)識(shí)\9,但是firefox前述三個(gè)都不認(rèn)識(shí)。
選擇器前綴法即選擇器HACK
IE條件注釋法(即HTML條件注釋Hack):針對(duì)所有IE(注:IE10+已經(jīng)不再支持條件注釋): ,針對(duì)IE6及以下版本:。這類Hack不僅對(duì)CSS生效,對(duì)寫在判斷語(yǔ)句里面的所有代碼都會(huì)生效。
2.談一談瀏覽器兼容的思路
- 要不要做
主要從兩個(gè)角度來(lái)進(jìn)行考慮要不要做,一個(gè)是產(chǎn)品,一個(gè)是成本。從產(chǎn)品的受眾、受眾的瀏覽器比例、效果優(yōu)先還是基本功能優(yōu)先這些方面來(lái)進(jìn)行考慮,各個(gè)瀏覽器的兼容是否需要,其次是兼容的成本問(wèn)題,即為了兼容付出的成本是否能取得收益。從產(chǎn)品和成本確定,是否需要進(jìn)行瀏覽器兼容。 - 做到什么程度
確定好要做兼容后,再進(jìn)一步確定兼容到什么程度,只需要兼容主流瀏覽器,還是所有瀏覽器都兼容,對(duì)于IE瀏覽器需要兼容到IE11,還是兼容到IE6。第二步是需要確實(shí)兼容的范圍。 - 如何做根據(jù)兼容需求選擇技術(shù)框架/庫(kù)(jquery)根據(jù)兼容需求選擇兼容工具(html5shiv.js、respond.js、css reset、normalize.css、Modernizr)postCSS條件注釋、CSS Hack、js 能力檢測(cè)做一些修補(bǔ)兩種常見的瀏覽器兼容問(wèn)題處理方式:漸進(jìn)增強(qiáng)(progressive enhancement): 針對(duì)低版本瀏覽器進(jìn)行構(gòu)建頁(yè)面,保證最基本的功能,然后再針對(duì)高級(jí)瀏覽器進(jìn)行效果、交互等改進(jìn)和追加功能達(dá)到更好的用戶體驗(yàn)。優(yōu)雅降級(jí) (graceful degradation): 一開始就構(gòu)建完整的功能,然后再針對(duì)低版本瀏覽器進(jìn)行兼容。
作者:饑人谷_羽觴鏈接:http://www.itdecent.cn/p/1ef9a0ccca57來(lái)源:簡(jiǎn)書著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
3.列舉5種以上瀏覽器兼容的寫法
星號(hào)ie6,ie7可以識(shí)別;
_和'*' , ie6可以識(shí)別;
!important ,表示高優(yōu)先級(jí),ie7及以上,firefox都支持,ie6認(rèn)識(shí)帶!important的樣式屬性,但不認(rèn)識(shí)!important的優(yōu)先級(jí);
-webkit- ,針對(duì)safari,chrome瀏覽器的內(nèi)核CSS寫法
-moz-,針對(duì)firefox瀏覽器的內(nèi)核CSS寫法
-ms-,針對(duì)ie內(nèi)核的CSS寫法
-o-,針對(duì)Opera內(nèi)核的CSS寫法
CSS里可以給屬性或者選擇器寫hack。屬性例如:background:blue;_background:red;選擇器例如: html #demo {width:120px;} *+html #demo {width:130px;}
HTML 針對(duì)所有IE:
4.以下工具/名詞是做什么的
條件注釋
條件注釋 (conditional comment) 是于HTML源碼中被IE有條件解釋的語(yǔ)句。條件注釋可被用來(lái)向IE提供及隱藏代碼。
<script>alert(1);</script>
使用了條件注釋的頁(yè)面在 Windows Internet Explorer 9 中可正常工作,但在 Internet Explorer 10 中無(wú)法正常工作。 IE10不再支持條件注釋。
IE Hack
指的是IE瀏覽器漏洞,利用IE Hack,我們可以兼容IE低版本。
js 能力檢測(cè)
檢測(cè)當(dāng)前瀏覽器支持和不支持的特性。如Modernizr.js,它會(huì)為瀏覽器的html標(biāo)簽生成一批的css的class名稱,標(biāo)記當(dāng)前瀏覽器支持和不支持的特性。我們利用html標(biāo)簽上的類名,就可以為不同版本的不同瀏覽器添加兼容樣式
html5shiv.js
html5shiv.js主要解決HTML5提出的新的元素不被IE6-8識(shí)別,這些新元素不能作為父節(jié)點(diǎn)包裹子元素,并且不能應(yīng)用CSS樣式。讓CSS 樣式應(yīng)用在未知元素上只需執(zhí)行 document.createElement(elementName) 即可實(shí)現(xiàn)。
respond.js
是一種css兼容工具??稍贗E6~8(不支持css3)上模擬CSS3 Media Queries
css reset
強(qiáng)制重置瀏覽器默認(rèn)樣式。使得所有瀏覽器渲染頁(yè)面效果一致,但存在性能問(wèn)題。
normalize.css
Normalize.css 是一個(gè)可以定制的CSS文件,實(shí)現(xiàn)樣式重置的一種方式,相對(duì)于其他的方式更有優(yōu)勢(shì),標(biāo)準(zhǔn)化的樣式,適用范圍廣的元素。糾正錯(cuò)誤和常見的瀏覽器的不一致性。一些細(xì)微的改進(jìn),提高了易用性。使用詳細(xì)的注釋來(lái)解釋代碼。
Modernizr
Modernizr是一個(gè)開源的JS庫(kù),它使得那些基于訪客瀏覽器的不同(指對(duì)新標(biāo)準(zhǔn)支持性的差異)而開發(fā)不同級(jí)別體驗(yàn)的設(shè)計(jì)師的工作變得更為簡(jiǎn)單。它使得設(shè)計(jì)師可以在支持[HTML5]和CSS3的特性進(jìn)行開發(fā),同時(shí)又不會(huì)犧牲其他不支持這些新技術(shù)的瀏覽器的控制。
PostCSS
它可以被理解為一個(gè)平臺(tái),可以讓一些插件在上面跑,它提供了一個(gè)解析器,可以將CSS解析成抽象語(yǔ)法樹,通過(guò)PostCSS這個(gè)平臺(tái),我們能夠開發(fā)一些插件,來(lái)處理CSS。熱門插件如autoprefixer,它可以幫我們處理兼容問(wèn)題,只需正常寫CSS,autoprefixer可以幫我的自動(dòng)生成兼容性代碼.
5.一般在哪個(gè)網(wǎng)站查詢屬性兼容性?
caniuse.com 查CSS屬性兼容