謎解きウェブ

なぜなにどうして。

CSSハック

text:

CSSコーディングを行う際、ブラウザごとの表示の違いを調整するために、ブラウザが持っている「バグ」を逆手に取って利用する方法があります。俗にCSSハックと呼ばれているもので、中には本来CSSの書き方として適切なものでないものもありますし、何よりソースが長く複雑になるのであまり使いたくない。

しかし最もシェアが高く最もバグが多いブラウザが、ご存知Internet Fucking Explorer。使いたくないと言いつつもCSSハックの利用が必須とならざるを得ないという、皮肉な現状があります。

仕事で利用する機会も多いことですので、備忘録としてまとめてみました。

厳密には「ハック」と言えないものがあるのかもしれませんが、目的としてはブラウザ間の表示を統一する為の技術、ということでご理解ください。

IE 7ハック

Internet Explorer 7 7

Windows IE 7のみにスタイルを適用するハック。適用したいセレクタの前に「*:first-child+html」を付ける。CSS Validatorに通る。

*:first-child+html p { color:#FF0000; }

スターハック

Internet Explorer 4〜6, Mac 4〜5

Windows IE 4〜6、Mac IE 4〜5のみにスタイルを適用する場合に用いる。スターつまり*を利用することからこのネーミングになったものと思われる。利用法としては、適用したいセレクタの前に「* html」を付ける。書式上は正しいのでCSS Validatorに通るが、それにマッチする要素はHTML文書には出現し得ない。

* html p { color:#FF0000; }

スター7ハック

Internet Explorer 5.5〜6, Mac 5 Safari

Windows IE 5.5〜6、Mac IE 5、Safariのみにスタイルを適用する。適用したいセレクタの前に「html*」を付けるのだが、空白を含めないように注意したい。書式としては不正で、CSS Validatorに通らない。

html*p { color:#FF0000; }

Hollyハック

Internet Explorer Mac 5

Mac IE 5のみにスタイルを適用、あるいはMac IE 5のみ除外したい場合に用いる。適用したいスタイルを、それぞれ以下のコメント形式で囲めばよい。CSS Validatorに通る。

なお、Hollyハックは別名バックスラッシュ(\)ハックとも言われている。文字コードがShift JISのときにはバックスラッシュの代わりに「¥」を利用すればよい。

Mac IE 5のみにスタイルを適用

/* これ以降Mac IE 5のみに適用される \*//*/
p { color:#FF0000; }
/* これ以降Mac IE 5以外にも適用される */
Mac IE 5のみスタイルを除外

/* これ以降Mac IE 5には適用されない \*/
p { color:#FF0000; }
/* これ以降Mac IE 5にも適用される */

ハッシュハック

Internet Explorer 4〜6, Mac 5 Firefox Opera 7

Windows IE 4〜6、Mac IE 5、Firefox、Opera 7のみにスタイルを適用する場合に用いる。適用したいプロパティの前に「#」を付けて使う。CSSの書式としては不正で、CSS Validatorに通らない。

p { #color:#FF0000; }

アンダースコアハック

Internet Explorer 4〜6

Windows IE 4〜6のみにスタイルを適用する場合に用いる。適用したいプロパティの前に「_(アンダースコア)」を付けるだけだが、CSSの書式としては不正で、CSS Validatorに通らない。

p { _color:#FF0000; }

もし同様の処理をCSS Validatorに通るかたちで実現したいのなら、スターハックとHollyハックを用いて

/* hide from Mac IE \*/
* html p { color:#FF0000; }
/* */

とすればいい。

Caioハック

Netscape 4

Netscape 4のみを排除する。CSS Validatorに通る。

/* これ以降Netscape 4には適用されない /*/
p { color:#FF0000; }
/* これ以降Netscape 4にも適用される */

Fabriceインバージョン

Netscape 4 Opera 4〜5

Netscape 4、Opera 4〜5のみにスタイルを適用する場合に用いる。CSS Validatorに通る。

/* これ以降Netscape 4、Opera 4〜5のみに適用される /*//*/
p { color:#FF0000; }
/* これ以降全てのブラウザに適用される */

xmlns属性ハック

Firefox Safari Opera

属性セレクタをサポートするFirefox、Mozilla、Safari、Operaにのみスタイルが適用される。CSS Validatorにも問題なく通る。

html[xmlns] p { color:#FF0000; }

:root疑似クラスハック

Firefox Safari Internet Explorer Mac 5

:root疑似クラスをサポートするFirefox、Mozilla、Safari、Mac IE 5にのみスタイルが適用される。:root疑似クラスは策定中のCSS 3.0でサポートされる予定で、CSS 2.0では定義されおらずCSS Validatorではエラーとなる。

:root p { color:#FF0000; }

Safariハック

Safariにのみスタイルを適用させる。前者はスターハックとスター7ハックの複合技で、それぞれのハックの適用ブラウザの差を利用したものです。また後者はSafari用のハックとして単独で利用が可能です。いずれのハックもCSS Varidatorを通過しません。

他のブラウザについてもまったく同じことが言えますが、Safariのバージョンアップによりいずれのハックも崩壊する可能性があることを念頭に置いておくべきです。またSafariハックというネーミングはこちらで勝手に付けたものです。あしからず。

Safari

p { その他のブラウザ用のスタイル }
html*p { Safari用のスタイル }
* html p { その他のブラウザ用のスタイル }

Safari 2〜

html[xmlns*=""] body:last-child p { color:#FF0000; }