【瀏覽器CSS hack大全】

瀏覽器CSS hack大全


什么是CSS hack辉饱?

由于不同廠商的流覽器或某瀏覽器的不同版本(如IE,Firefox/Safari/Opera/Chrome等)喘漏,對(duì)CSS的支持、解析不一樣争舞,導(dǎo)致在不同瀏覽器的環(huán)境中呈現(xiàn)出不一致的頁面展現(xiàn)效果士修。這時(shí)枷遂,我們?yōu)榱双@得統(tǒng)一的頁面效果,就需要針對(duì)不同的瀏覽器或不同版本寫特定的CSS樣式李命,我們把這個(gè)針對(duì)不同的瀏覽器/不同版本寫相應(yīng)的CSS code的過程登淘,叫做CSS hack!

簡(jiǎn)單的說:hack是針對(duì)不同的瀏覽器去寫不同的CSS樣式,從而讓各瀏覽器能達(dá)到一致的渲染效果封字。


CSS hack書寫順序

一般是將適用范圍廣、被識(shí)別能力強(qiáng)的CSS定義在前面耍鬓。


CSS hack分類

CSS Hack大致有3種表現(xiàn)形式:

1阔籽、CSS屬性前綴法;

2牲蜀、選擇器前綴法笆制;

3、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)不再支持條件注釋): IE瀏覽器顯示的內(nèi)容 甩骏,針對(duì)IE6及以下版本: 只在IE6-顯示的內(nèi)容 窗市。這類Hack不僅對(duì)CSS生效先慷,對(duì)寫在判斷語句里面的所有代碼都會(huì)生效。


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ù)期的頁面展現(xiàn)效果摄狱。


IE hack 技術(shù)

_width: 400px;??????????? /* _是針對(duì)IE6*/

+width: 300px;?????????? /* +是針對(duì)IE6脓诡、IE7*/

*width: 400px;??????????? /*? *是針對(duì)IE6、IE7*/

width: 200px\9;????????? /* \9是針對(duì)IE6 IE7 IE8 IE9 IE10*/

width: 100px\0;????????? /* \0是針對(duì)IE8 IE9 IE10 IE11 */


瀏覽器內(nèi)核與前綴

內(nèi)核 ? ? ? ? ? 內(nèi)核前綴 ? ? ? ? ? 瀏覽器

Webkit ? ? ? ?-webkit-?????? ? Safari二蓝、Chrome27以下

Blink?????? ? ? -webkit-??????? Chrome28以上誉券、Opera15以上

Gecko???????? -moz-?????????? 火狐瀏覽器

Trident ? ? ? ? -ms-????????? ? IE系列、360安全瀏覽器

Presto?????? ??? -o-??????????? ? Opera12以下


CSS hack方式三:選擇器前綴法

選擇器前綴法是針對(duì)一些頁面表現(xiàn)不一致或者需要特殊對(duì)待的瀏覽器刊愚,在CSS選擇器前加上一些只有某些特定瀏覽器才能識(shí)別的前綴進(jìn)行hack踊跟。

目前最常見的是:

*html *前綴只對(duì)IE6生效

*+html *+前綴只對(duì)IE7生效

@media screen\9 {body { background: gray; }} 只對(duì)IE6/7生效

@media \0screen {body { background: red; }} 只對(duì)IE8有效

@media \0screen\,screen\9 {body { background: blue; }} 只對(duì)IE6/7/8有效

@media screen\0 {body { background: green; }} 只對(duì)IE8/9/10有效

@media screen and (min-width:0\0) {body { background: gray; }} 只對(duì)IE9/10有效

@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none)? {body { background: orange; }} 只對(duì)IE10有效


CSS3選擇器結(jié)合JavaScript的Hack

我們用IE10進(jìn)行舉例:

由于IE10用戶代理字符串(UserAgent)為:Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0),所以我們可以使用Javascript將此屬性添加到文檔標(biāo)簽中鸥诽,再運(yùn)用CSS3基本選擇器匹配商玫。

JavaScript代碼:

var htmlObj = document.documentElement;

htmlObj.setAttribute('data-useragent',navigator.userAgent);

htmlObj.setAttribute('data-platform', navigator.platform );


CSS3匹配代碼:

html[data-useragent*='MSIE 10.0'] #id {

? ? ? ? color: #F00;

}


CSS hack利弊

一般情況下,我們盡量避免使用CSS hack牡借,但是有些情況為了顧及用戶體驗(yàn)實(shí)現(xiàn)向下兼容拳昌,不得已才使用hack。

比如由于IE8及以下版本不支持CSS3,而我們的項(xiàng)目頁面使用了大量CSS3新屬性在IE9/Firefox/Chrome下正常渲染钠龙,這種情況下如果不使用css3pie或htc或條件注釋等方法時(shí),可能就得讓IE8-的專屬hack出馬了炬藤。

使用hack雖然對(duì)頁面表現(xiàn)的一致性有好處,但過多的濫用會(huì)造成html文檔混亂不堪碴里,增加管理和維護(hù)的負(fù)擔(dān)沈矿。


補(bǔ)充:各瀏覽器下Hack的寫法

1、Firefox

只被Firefox瀏覽器識(shí)別的寫法咬腋,具體如下:

@-moz-document url-prefix() { .demo { color:lime; } }

/* 支持所有Firefox版本 */

寫法一:#selector[id=selector] { property: value; }

寫法二:@-moz-document url-prefix() { .selector { property: value; } }

/* 支持所有Gecko內(nèi)核的瀏覽器 (包括Firefox) */

*>.selector { property: value; }


2羹膳、Webkit內(nèi)核瀏覽器(chrome and safari)

以下寫法主要是針對(duì)Webkit內(nèi)核的瀏覽器,如Chrome 和 Safari瀏覽器:

@media screen and (-webkit-min-device-pixel-ratio:0) { .demo { color: #f36; } }


3根竿、Opera瀏覽器

下面是Opera瀏覽器的Hack寫法:

html:first-child>body Selector { background: green; }

或者:@media all and (min-width:0) { Selector { background: green; } }

或者:@media all and (-webkit-min-device-pixel-ratio:10000), not all and (-webkit-min-device-pixel-ratio:0) { head~body Selector { background: green; } }

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末陵像,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子寇壳,更是在濱河造成了極大的恐慌醒颖,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,807評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件九巡,死亡現(xiàn)場(chǎng)離奇詭異图贸,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門疏日,熙熙樓的掌柜王于貴愁眉苦臉地迎上來偿洁,“玉大人,你說我怎么就攤上這事沟优√樽蹋” “怎么了?”我有些...
    開封第一講書人閱讀 169,589評(píng)論 0 363
  • 文/不壞的土叔 我叫張陵挠阁,是天一觀的道長宾肺。 經(jīng)常有香客問我,道長侵俗,這世上最難降的妖魔是什么锨用? 我笑而不...
    開封第一講書人閱讀 60,188評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮隘谣,結(jié)果婚禮上增拥,老公的妹妹穿的比我還像新娘。我一直安慰自己寻歧,他們只是感情好掌栅,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著码泛,像睡著了一般猾封。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上噪珊,一...
    開封第一講書人閱讀 52,785評(píng)論 1 314
  • 那天晌缘,我揣著相機(jī)與錄音,去河邊找鬼痢站。 笑死枚钓,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瑟押。 我是一名探鬼主播,決...
    沈念sama閱讀 41,220評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼星掰,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼多望!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起氢烘,我...
    開封第一講書人閱讀 40,167評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤怀偷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后播玖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體椎工,經(jīng)...
    沈念sama閱讀 46,698評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了维蒙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掰吕。...
    茶點(diǎn)故事閱讀 40,912評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖颅痊,靈堂內(nèi)的尸體忽然破棺而出殖熟,到底是詐尸還是另有隱情,我是刑警寧澤斑响,帶...
    沈念sama閱讀 36,572評(píng)論 5 351
  • 正文 年R本政府宣布菱属,位于F島的核電站,受9級(jí)特大地震影響舰罚,放射性物質(zhì)發(fā)生泄漏纽门。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評(píng)論 3 336
  • 文/蒙蒙 一营罢、第九天 我趴在偏房一處隱蔽的房頂上張望赏陵。 院中可真熱鬧,春花似錦愤钾、人聲如沸瘟滨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杂瘸。三九已至,卻和暖如春伙菊,著一層夾襖步出監(jiān)牢的瞬間败玉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評(píng)論 1 274
  • 我被黑心中介騙來泰國打工镜硕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留运翼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,359評(píng)論 3 379
  • 正文 我出身青樓兴枯,卻偏偏與公主長得像血淌,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子财剖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容