微妙なCSSハック
body要素への適用を例にします。
Opera 9のみに適用
セレクタの先頭に;;
を付加すると、Opera 9のみに適用されます。ただしCSSとしてはinvalidです。
;;body{}
パーサのバグと思われるので、そのうち直される気がします。Opera 9.02ではまだ使えてます。
また付加するものは;;
以外に@;
や!;
でも適用されます。「何らかの記号+;
」となるようです。ただし、すべての記号が使えるわけではありません。
IEとOpera以外のモダンブラウザ(Firefox,Safariなど)に適用
IEとOperaが対応していない:root
疑似セレクタを使います。
:root body{}
こちらはvalidのはず。*1
こんなの使う必要あるの?
普通はありません。Operaに関してはhttp://www.studionh.net/fplusr/stylesheet/ie7cssopera_css_hack.htmlで紹介されているOpera 8以降のハックなどを使うのが良いと思います。
ただなぜこんな微妙なハックが出てきたかというと、ここ「はてなダイアリー」でのXSS対策が原因です。
スタイルシート内の「<」「>」を「<」「>」に変換します。
このためhtml>body
やhtml>/**/body
などが使えず、代替案を探す過程で見つけました。
*1:と思っていたのだけど、を見ていたら構文的にNGとなっていました 2006-09-27