Hatena::ブログ(Diary)

虚心生白 RSSフィード Twitter

2009-07-26

[] css: Hack 2009

以前まとめてから数年経ち、「NetscapeやIE5 for Mac専用のハックはもう良いかな〜」とか「IE8やFirefox3.5用なんてあるのかな?」と言うところでアップデート
# 古いIEはさっさと消えてほしい〜
# いつか検証&もうちょっと整理する(予定は未定)

# またsafariで編集するとバックスラッシュが「\」になる〜

IE6〜IE8

 後述の各バージョン用のハックを並べて書く

# 値が同じだからと「*:first-child+html .example, * html body .example {... 」と、まとめるのはNG


IE 8(改訂:20100721)

 .example  {width /*\**/: 180px\9;} 

# 「CSS Hack for IE 8 | beginsprite log


IE 7

 *:first-child+html .example {width: 180px;}

#「*+html」は、IE4やIE5、Opera8.0〜にも適用されるらしい。


IE4〜6、Mac IE5.x(StarHtmlHack)

* html .example {width: 180px;}

「*」は全称セレクタ
htmlは最上位に位置し、どの要素にも含まれる事がないため本来は無視されるべきところ、Windows版IE4〜6、Mac版IE5.xではclass="example"に指定が適用される。


IE5.5以前(voice-family Hack)

width: 200px;             ---(1)
voice-family: "\"}\"";    ---(2)
voice-family: inherit;    ---(3)
width: 180px;             ---(4)

(1) IE5.5以前用の値
(2) IE5.5以前は\のエスケープ処理未対応により}で終了。以降の指定無視
(3) 2行目の値を元に戻す
(4) IE5.5以前以外用の正しい値


IE5.x(Mis Pass Filter

@media tty {
i{content:"\";/*" "*/}} @import url('ie5win.css');/*";}
}/* */

IE 7以前(Star Hack)

.example {*width: 180px;}

# プロパティレベルのハック


IE 4〜6(Underscore Hack)

.example {_width: 180px;}

# プロパティレベルのハック


IE4〜6、Mac IE5.x、Safari(Star7Hack)

html*p {width: 180px;}

IE4〜6、Mac IE5、Firefox、Opera7(ハッシュハック)

.example {#width: 180px;}

IE7を含む、モダンブラウザ、Mac IE5

html>body .example {width: 180px;} or
html+body .example {width: 180px;} or
head:first-child+body .example {width: 180px;}

「>」は子セレクタで、「+」は隣接セレクタ(前者が一般的?)。
Windows版IE6以下は子セレクタに非対応なので適用されない。その他のブラウザでは、「htmlの子要素であるbodyに含まれる.example」となり、「.example {width: 180px;}」と記述した事と同じ意味


IE7を含む、モダンブラウザ(? IE7、Firefox、Mozilla、Safari、Opera)

html[xmlns] .example {width: 180px;}

IE7を除く、モダンブラウザ

html>/**/body .example {width: 180px;} or
html[xmlns]>/**/body .example {width: 180px;} 

# 前者と後者、どっちが良いのだろう...


Firefox+α

html:not([lang*=""]) .example {width: 180px;}

# safari 4 for Macにも適用される


Firefox 1〜3.5

.example  { 正規スタイル }
.example, x:-moz-any-link   { FF 1.0 以降に適用 }
.example, x:-moz-read-only  { FF 1.5, 2.0 以降に適用 }
.example, x:-moz-broken     { FF 3.0 以降に適用 }
.example, x:-moz-broken, x:last-of-type { FF 3.5 以降に適用 }
.example, x:x { 正規スタイル }

解説:Firefox 1.0, 1.5, 3.0, 3.5 用の CSS ハック | ヨモツネット


Firefox、Mozilla、Safari、Mac IE 5

 :root .example {width: 180px;}


Safari4

body:first-of-type .example { Safari用 }
 or
@media screen and (-webkit-min-device-pixel-ratio:0){
 .example { Safari用 }
}

解説:WebTecNote - [CSS]Safari3.X用CSSハック


Safari3?

body:last-child:not(:root:root) .example { Safari用 }

# どっちが良いのだろう
# safari 4系は無効だった


Safari3/Google Chrome

html:not(:only-child:only-child) .example {width: 180px;}

Safari2

html[xmlns*=""] body:last-child .example { Safari2用のスタイル }
html:not(:only-child:only-child) 適当IDセレクタ .example { 正規のスタイル }

解説:【XHTML+CSS】06_CSSデザインのブラウザ調整 | TokyoHeadTerminal
...によると「2行目で適当なIDセレクタを指定する理由は、指定しないと詳細度が1行目よりも弱く、上書きされないため(例えば#containerなど)」らしい


Opera9.5未満

;;body .example {width: 180px;}

# 9.5以降用は無いらしく、合わせ技になるらしい。
解説:【XHTML+CSS】06_CSSデザインのブラウザ調整 | TokyoHeadTerminal



参考&参照:

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証