CSS Hack 是在標準 CSS 沒辦法兼容各瀏覽器顯示效果時才會用上的補救方法,在各瀏覽器廠商解析 CSS 沒有達成一致前,我們只能用這樣的方法來完成這樣的任務。網上你可能能搜索到一大堆的 CSS Hack,但是我今天發布的你可能並不都很了解,因為這些都是只針對單獨一個瀏覽器的 CSS Hack。
為了向你展示這些 CSS Hack 是否正常運作,我新建六個 P 標籤,並給每一個 P 標籤一個特有的 id。這將向你展示 CSS Hack 的運作情況。
<p id="opera">我來自 Opera 7.2 - 9.5</p> <p id="safari">我是神奇的 Safari</p> <p id="firefox">我來自 Firefox</p> <p id="firefox12">我是你爺爺 Firefox 1 - 2 </p> <p id="ie7">我是囧 IE 7</p> <p id="ie6">我是腦瘸 IE 6</p> |
然後我讓這些 P 標籤默認都不顯示
<style type="text/css"> body p{display: none;} </style> |
使用 IE CSS 條件注釋區分 IE 瀏覽器
最簡單的區分 IE 瀏覽器的方法自然是使用他們的條件注釋。 微軟創建了一個強大的語法來讓我們去實現這個功能。我不想再詳細地介紹 IE 條件注釋了,我想你在搜索引擎能搜索到上萬個搜索條目,我這裡只要這兩個:
<!--[if IE 7]> <style type="text/css"> </style> <![endif]--> <!--[if IE 6]> <style type="text/css"> </style> <![endif]--> |
使用 CSS 解析器 Hacks 區分 IE
雖說 IE 條件注釋十分簡單好用,但是如果你想把全部的 CSS 放到一個文件里的話,那麼你不得不使用別的方法。注意這裡的 IE 7 Hack將只對 IE7 有效,因為 IE6 根本不知道 > 選擇符。同時你也得注意 > 選擇符對於其他瀏覽器同樣是無效的。
/* IE 7 */ html > body #ie7 {*display: block;} /* IE 6 */ body #ie6 {_display: block;} |
CSS Hack 區分 Firefox
第一個使用了 body:empty 來區分 Firefox 1 和 2 。第二個 hack使用了全部 Firefox 瀏覽器的專有擴展 -moz。 -moz 只對 Firefox有效,使用這個 Hack 大可不必擔心其他瀏覽器的影響。
/* Firefox 1 - 2 */ body:empty #firefox12 {display: block;} /* Firefox */ @-moz-document url-prefix() {#firefox { display: block; }} |
CSS Hack 區分 Safari
Safari 的 CSS hack 與 Firefox 的 hack 看起來很像,使用的是 Safari瀏覽器的專有擴展 -webkit 且只對 Safari 瀏覽器有效。
/* Safari */ @media screen and (-webkit-min-device-pixel-ratio:0) {#safari { display: block; }} |
CSS Hack 區分 Opera
/* Opera */ @media all and (-webkit-min-device-pixel-ratio:10000), not all and (-webkit-min-device-pixel-ratio:0) {head~body #opera { display: block; }} |
然後,全部合在一起便是
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>CSS Browser Hacks</title> <style type="text/css"> body p { display: none; } /* Opera */ html:first-child #opera { display: block; } /* IE 7 */ html > body #ie7 { *display: block; } /* IE 6 */ body #ie6 { _display: block; } /* Firefox 1 - 2 */ body:empty #firefox12 { display: block; } /* Firefox */ @-moz-document url-prefix() { #firefox { display: block; } } /* Safari */ @media screen and (-webkit-min-device-pixel-ratio:0) { #safari { display: block; } } /* Opera */ @media all and (-webkit-min-device-pixel-ratio:10000), not all and (-webkit-min-device-pixel-ratio:0) { head~body #opera { display: block; } } </style> </head> <body> <p id="opera">我來自 Opera 7.2 - 9.5</p> <p id="safari">我是神奇的 Safari</p> <p id="firefox">我來自 Firefox</p> <p id="firefox12">我是你爺爺 Firefox 1 - 2 </p> <p id="ie7">我是囧 IE 7</p> <p id="ie6">我是腦瘸 IE 6</p> </body> </html> |
CSS Hack 雖好且方便兼容各瀏覽器,但是通不過 W3C 驗證,所以還得自己權衡是否有必要去使用。
–Via.
文中涉及資源頁面
* http://msdn.microsoft.com/en-us/library/ms537512.aspx
* http://www.javascriptkit.com/dhtmltutors/csshacks3.shtml
* http://perishablepress.com/press/2006/08/27/css-hack-dumpster/
* http://thomas.tanreisoftware.com/?p=11#opera
這些 hack 好讓人抓狂啊。。。
很好,比 sofish 那篇更詳細,連 Safari 都顧到了,不知有沒有 Chrome 的?我想如果想通過 W3C 的話用 JavaScript 來處理不知行不行…
呵呵有錯啊
我用IE8查看,顯示我是囧IE7
(*^__^*) 嘻嘻…… 開發一個合格的網頁得經過那麼多個瀏覽器,哎,生活真是累……
我老是把 moz 看成 maoz…
呵呵,瀏覽器多是個問題!
@任平生
研究這麼複雜的CSS Hack的人都是牛人~
@welee
Chrome用的和safari一樣的核心兩者應該相差無幾吧。
@eddie
呃,還沒考慮到IE8,你可以幫忙補充我更新進去呵呵!
@Showfom
生活就是折騰。
@fisio
你肯定暗戀人家。
@吖Bee
如果普及的標準能夠統一瀏覽器再多也不怕了~
有之前好像有看到一個叫Conditional-CSS的也是對多瀏覽器寫不同hack
瓜牛你的頁面東西好多啊,眼花了
@wlsy
Conditional-CSS就是文中提到的條件註釋,不過僅限IE瀏覽器呃。
@葉子
忙著畢業,沒時間折騰了。
老實說,你首頁太大了。
@Kimcool
我也發現了,圖片太大了,很多冗餘js代碼,主要是沒時間,忙著畢業呵呵
😐 😆 😆
文章首頁顯示部分的php語句怎麼寫的 😳 😳
之前弄那個下載站的時候這麼學著人老外學過。。。當時很頭疼微軟把IE7 fix了很多針對IE 6的hack不管用了。。- -後來忘記怎麼解決了。。。
上面打漏了。。。- -後來忘記怎麼解決了。。。最終無意中被我看到這種Hack就照葫蘆畫瓢居然管用了當時高興的- -
@nsyta
你復活了。
加你QQ了 ,找你幫點忙 呵呵
出錯了。
我恨IE6~~ 👿
幸好我們現在做的項目只要能在FF跑就行。
PS:留言在opera下錯位了。
好文章
IE 系列其實通過css 條件注釋 就全部解決了 所以IE 8倒沒關係
個人覺得 能夠不用hack 還是不要用先
真的沒辦法的時候再通過hack來解決兼容性問題
@ Lucifer
我也是這麼個建議,能不hack則不hack~
Pingback: RSSA頻道 » Blog Archive » CSS 3.0 中文參考手冊(CHM版)
💡 今天用到了,轉載了一下
Pingback: JoyfulBoy » 前端技術 » XHTML CSS » 各款瀏覽器專屬的 CSS Hack
Pingback: 專屬 CSS Hack – WEB前端開發- 專註前端開發,關注用戶體驗
沒有標準真是可怕呢~~ ❓
hao yang de! learn more, thanks
路過,純屬意外。不要回復我。。
@丸子 我就是要回復你 🙄
😛 很詳細,有些用過,有些收藏(希望不用去用到),
然後說說我的看法,在我的實踐中,我不認為ie6是最難搞的,反而是ie7,
最好搞定的當屬Webkit核。
Pingback: » Blog Archive » 專屬 CSS Hack
Pingback: 針對主流瀏覽器的各種專屬CSS hack « starhusb
腦腐亮了。不錯不錯
Pingback: Although want to use less as far as possible, but still want to remember these CSS Hack
閣下的文字讓我受益匪淺,非常不錯,謝謝!
很有用,非常感謝! 😛
我遇到一個 Chrome下正常的,但是Safari下有問題的例子,可能是我代碼不夠規範,正考慮要不要用hack,同樣是基於webkit的內核,哎,前端的命苦啊,html5的時代快點到來吧。。。 😛 😛 😛
樓主應該吧chrome也加進去~~~
嘿嘿,好文章,寫得比較全面,如果 有 chrome 的話就更完美了
Pingback: 瀏覽器 CSS Hack 整理 ‹ 龍貓の筆記
補上chrome的:
針對Chrome和Safari等Webkit核心瀏覽器的CSS hack代碼:
@media screen and (-webkit-min-device-pixel-ratio:0) {
/* Webkit內核兼容CSS */
}
示例:
@media screen and (-webkit-min-device-pixel-ratio:0) {
.font1 {color:#f00}
.border1 {border:1px solid #f00;}
.bg3 {background:#f00;}
}
Pingback: 人人網 CSS編碼規範 « 人人都是產品經理
Pingback: 人人網 CSS編碼規範 « php樂享網_樂於分享,快樂無限!
Pingback: 【絕對乾貨】之人人網 CSS編碼規範 « PM百科
ie11 gg~~~
Pingback: 消失的CSS3 box-shadow 屬性? – 馬開東博客
Pingback: 消失的CSS3 box-shadow 屬性? - IT牛人博客聚合