1.什么是 CSS hack?
因?yàn)闉g覽器廠家的不同,例如常見(jiàn)的IE瀏覽器,Safari,谷歌瀏覽器,火狐瀏覽器等等,使用內(nèi)核的不同,或者是同一品牌版本的不同(例如IE6,7,8),造成對(duì)CSS解析千差萬(wàn)別,嚴(yán)重影響顯示效果。我們開(kāi)發(fā)人員為了彌補(bǔ)這些缺憾實(shí)現(xiàn)前臺(tái)頁(yè)面顯示一致,在不同瀏覽器中調(diào)整相應(yīng)的css寫(xiě)法,這種行為被稱(chēng)為 CSS hack。
簡(jiǎn)單點(diǎn)兒說(shuō)就是,利用各瀏覽器的特殊特點(diǎn),編寫(xiě)相應(yīng)的樣式,實(shí)現(xiàn)各瀏覽器前臺(tái)顯示一致。
2.談一談瀏覽器兼容的思路
- 產(chǎn)品角度
產(chǎn)品的受眾人群,如果是國(guó)家黨政機(jī)關(guān),那么華麗效果,樣式先放一邊,首先兼容低版本瀏覽器,實(shí)現(xiàn)功能為第一位的。
如果是相對(duì)前衛(wèi),受眾群體較為年輕的,那么一般用戶(hù)使用瀏覽器的版本較高,可以效果功能兼顧 - 成本角度
費(fèi)力做出的兼容到底有沒(méi)有必要,值不值得,考慮成本,在決定 - 如何做(框架的選?。?
- 要用bootstrap那瀏覽器最低要IE8
- 用jquery的話(huà) 要兼容大部分瀏覽器的話(huà)那么就要用1.X.X的版本,2開(kāi)頭的版本最少也要IE9
- 用vue同樣最少也要IE9
(注:根據(jù)產(chǎn)品兼容需求選擇兼容工具包括:比如html5shiv.js、respond.js、modernizr.js) - 方式思路
- 漸進(jìn)增強(qiáng)-對(duì)于兼容困難戶(hù),就只維持正常功能的實(shí)現(xiàn)就可以了,針對(duì)其他瀏覽器,可以進(jìn)行相應(yīng)更優(yōu)秀的改動(dòng)。
- 優(yōu)雅降級(jí)-先構(gòu)建完整功能頁(yè)面,然后根據(jù)不同版本進(jìn)行兼容。
3.列舉5種以上瀏覽器兼容的寫(xiě)法
color:red; ?* 所有瀏覽器都支持 *?
color:red !important; ?* Firefox、IE7支持 *?
_color:red; ?* IE6支持 *?
*color:red; ?* IE6、IE7支持 *?
*+color:red; ?* IE7支持 *?
color:red \9; ?* IE6、IE7、IE8支持 *?
color:red \0; ?* IE8支持 *?
* , 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寫(xiě)法
-moz-,針對(duì)firefox瀏覽器的內(nèi)核CSS寫(xiě)法
-ms-,針對(duì)ie內(nèi)核的CSS寫(xiě)法
-o-,針對(duì)Opera內(nèi)核的CSS寫(xiě)法
4.以下工具/名詞是做什么的
- 條件注釋
條件注釋 是于HTML源碼中被 IE 有條件解釋的語(yǔ)句。條件注釋可被用來(lái)向 IE提供及隱藏代碼。 條件注釋最初于微軟的 Internet Explorer 5瀏覽器中出現(xiàn),并且直至 Internet Explorer 9 均支持。微軟已宣布于IE10停止支持。
寫(xiě)法示例
<!–[if IE 6]><![endif]–><!–僅IE6可識(shí)別–>
<!–[if IE 7]><![endif]–><!–僅IE7可識(shí)別–>
<!–[if IE 8]><![endif]–><!–僅IE8可識(shí)別–>
<!–[if IE 9]><![endif]–><!–僅IE9可識(shí)別–>
- IE Hack
針對(duì)IE瀏覽器編寫(xiě)不同的CSS的讓IE能夠正常渲染的過(guò)程
- js 能力檢測(cè)
js 能力檢測(cè)瀏覽器的能力檢測(cè)目標(biāo)不是檢測(cè)特定的瀏覽器,而是檢測(cè)瀏覽器的能力。這樣,只需要檢測(cè)瀏覽器是否支持特定的能力,就可以給出特定的解決方案。這一部分檢測(cè)是解決瀏覽器兼容問(wèn)題的主要檢測(cè)。
- html5shiv.js
為IE6-8通過(guò)使用Javascript來(lái)使不支持HTML5的瀏覽器支持HTML標(biāo)簽。目前大多網(wǎng)站采用的這種方式(Bootcss官方例子也是如此)。
利用腳本document.createElement(“”)創(chuàng)建對(duì)應(yīng)的腳本,CSS選擇器便可正確應(yīng)用到該標(biāo)簽。
考慮到IE9是支持html5的,所以直接在HTML頁(yè)面的head標(biāo)簽中添加腳本引用即可。
- respond.js
為 IE6-8 以及其它不支持 CSS3 Media Querie 的瀏覽器提供媒體查詢(xún)的 min-width 和 max-width 特性,實(shí)現(xiàn)響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)(Responsive Web Design)`
- css reset
在早期對(duì)個(gè)瀏覽器默認(rèn)css樣式的歸零方法,后期因?yàn)檫@種方法過(guò)于暴力,現(xiàn)在已經(jīng)很少用了
- normalize.css
有選擇的重置部分默認(rèn)的css屬性,對(duì)開(kāi)發(fā)者有力的默認(rèn)屬性不會(huì)被重置,對(duì)開(kāi)發(fā)者不利的屬性才會(huì)被干掉,比reset.css更加先進(jìn)。
- Modernizr
Modernizr是一個(gè)開(kāi)源的JS庫(kù),它使得那些基于訪(fǎng)客瀏覽器的不同(指對(duì)新標(biāo)準(zhǔn)支持性的差異)而開(kāi)發(fā)不同級(jí)別體驗(yàn)的設(shè)計(jì)師的工作變得更為簡(jiǎn)單。它使得設(shè)計(jì)師可以在支持HTML5和CSS3的瀏覽器中充分利用HTML5和CSS3的特性進(jìn)行開(kāi)發(fā),同時(shí)又不會(huì)犧牲其他不支持這些新技術(shù)的瀏覽器的控制。
當(dāng)你在網(wǎng)頁(yè)中嵌入Modernizr的腳本時(shí),它會(huì)檢測(cè)當(dāng)前瀏覽器是否支持CSS3的特性,比如 @font-face、border-radius、 border-image、box-shadow、rgba() 等,同時(shí)也會(huì)檢測(cè)是否支持HTML5的 特性——比如audio、video、本地儲(chǔ)存、和新的 標(biāo)簽的類(lèi)型和屬性等。在獲取到這些信息的基礎(chǔ)上,你可以在那些支持這些功能的瀏覽器上使用它們,來(lái)決定是否創(chuàng)建一個(gè)基于JS的 fallback,或者對(duì)那些不支持的瀏覽器進(jìn)行簡(jiǎn)單的優(yōu)雅降級(jí)。另外,Modernizr還可以令I(lǐng)E支持對(duì)HTML5的元素應(yīng)用CSS樣式,這樣開(kāi)發(fā)者就可以立即使用這些更富有語(yǔ)義化的標(biāo)簽了。
- postCSS
它可以被理解為一個(gè)平臺(tái),可以讓一些插件在上面跑,它提供了一個(gè)解析器,可以將CSS解析成抽象語(yǔ)法樹(shù),通過(guò)PostCSS這個(gè)平臺(tái),我們能夠開(kāi)發(fā)一些插件,來(lái)處理CSS。熱門(mén)插件如autoprefixer,它可以幫我們處理兼容問(wèn)題,只需正常寫(xiě)CSS,autoprefixer可以幫我的自動(dòng)生成兼容性代碼
### 5. 一般在哪個(gè)網(wǎng)站查詢(xún)屬性兼容性?
[http://caniuse.com/](http://caniuse.com/)