本篇文章給大家?guī)?lái)了幾個(gè)demo把IE6~IE10和其他標(biāo)準(zhǔn)瀏覽器的CSS hack做一個(gè)總結(jié),希望對(duì)大家有幫助。
什么是CSS hack
由于不同廠商的流覽器或某瀏覽器的不同版本(如IE6-IE11,Firefox/Safari/Opera/Chrome等),對(duì)CSS的支持、解析不一樣,導(dǎo)致在不同瀏覽器的環(huán)境中呈現(xiàn)出不一致的頁(yè)面展現(xiàn)效果。這時(shí),我們?yōu)榱双@得統(tǒng)一的頁(yè)面效果,就需要針對(duì)不同的瀏覽器或不同版本寫特定的CSS樣式,我們把這個(gè)針對(duì)不同的瀏覽器/不同版本寫相應(yīng)的CSS code的過(guò)程,叫做CSS hack!
CSS hack的原理
由于不同的瀏覽器和瀏覽器各版本對(duì)CSS的支持及解析結(jié)果不一樣,以及CSS優(yōu)先級(jí)對(duì)瀏覽器展現(xiàn)效果的影響,我們可以據(jù)此針對(duì)不同的瀏覽器情景來(lái)應(yīng)用不同的CSS。
CSS hack分類
CSS Hack大致有3種表現(xiàn)形式,CSS屬性前綴法、選擇器前綴法以及IE條件注釋法(即HTML頭部引用if IE)Hack,實(shí)際項(xiàng)目中CSS Hack大部分是針對(duì)IE瀏覽器不同版本之間的表現(xiàn)差異而引入的。
- 屬性前綴法(即類內(nèi)部Hack):例如 IE6能識(shí)別下劃線"_"和星號(hào)" * ",IE7能識(shí)別星號(hào)" * ",但不能識(shí)別下劃線"_",IE6~IE10都認(rèn)識(shí)"9",但firefox前述三個(gè)都不能認(rèn)識(shí)。
- 選擇器前綴法(即選擇器Hack):例如 IE6能識(shí)別*html .class{},IE7能識(shí)別*+html .class{}或者*:first-child+html .class{}。
- IE條件注釋法(即HTML條件注釋Hack):針對(duì)所有IE(注:IE10+已經(jīng)不再支持條件注釋): <!–[if IE]>IE瀏覽器顯示的內(nèi)容 <![endif]–>,針對(duì)IE6及以下版本: <!–[if lt IE 6]>只在IE6-顯示的內(nèi)容 <![endif]–>。這類Hack不僅對(duì)CSS生效,對(duì)寫在判斷語(yǔ)句里面的所有代碼都會(huì)生效。
CSS hack書寫順序,一般是將適用范圍廣、被識(shí)別能力強(qiáng)的CSS定義在前面。
CSS hack方式一:條件注釋法
這種方式是IE瀏覽器專有的Hack方式,微軟官方推薦使用的hack方式。舉例如下
只在IE下生效 <!--[if IE]> 這段文字只在IE瀏覽器顯示 <![endif]--> 只在IE6下生效 <!--[if IE 6]> 這段文字只在IE6瀏覽器顯示 <![endif]--> 只在IE6以上版本生效 <!--[if gte IE 6]> 這段文字只在IE6以上(包括)版本IE瀏覽器顯示 <![endif]--> 只在IE8上不生效 <!--[if ! IE 8]> 這段文字在非IE8瀏覽器顯示 <![endif]--> 非IE瀏覽器生效 <!--[if !IE]> 這段文字只在非IE瀏覽器顯示 <![endif]-->
CSS hack方式二:類內(nèi)屬性前綴法
屬性前綴法是在CSS樣式屬性名前加上一些只有特定瀏覽器才能識(shí)別的hack前綴,以達(dá)到預(yù)期的頁(yè)面展現(xiàn)效果。
IE瀏覽器各版本 CSS hack 對(duì)照表
說(shuō)明:在標(biāo)準(zhǔn)模式中
- “-″減號(hào)是IE6專有的hack
- “9″ IE6/IE7/IE8/IE9/IE10都生效
- “