ie6の:hover実装不備を補うやりかた
update:2008.3.11
IEにおけるcss実装の不備なんだから、cssだけでは解決しない。
MS謹製の解決方法は、csshover.htcというファイルと、behaviourプロパティ。
csshover.htcの中身は、javascript(jscript)のソースがぎっしり。
behaviourプロパティは、cssの仕様にはないIE独自のプロパティ。
htcファイルというのは、MSが独自に実装している技術で、HTMLコンポーネントという技術らしい(参考)
しかもhtcファイルの中身はたんなるスクリプトファイルであった(javascriptかjscriptかvbscriptかはわかりませんでした)。そしてさらにbehaviourプロパティはhtcファイル読み込みのために、MSがCSSに独自に追加したプロパティでした。
なので最初の驚きは薄れてしまった。マウスオーバーのアクションは:hover擬似要素を実装しているブラウザであればcssオンリーでできる。実装していないieのために、javascriptを使う必要があり、その場合も、構造と表現と振舞いを分離するためには、javascriptは外部ファイルで記述し、head要素からscriptタグのsrc属性でリンクを張るということになる。
csshover.htcとbehaviourプロパティの組み合わせはそれへの代案になるのかとちょっと驚いたが、結局のところ、head要素からscriptタグでjsファイルにリンクを貼る代わりに、cssファイルからスクリプトの記述されたファイルにリンクを貼ってるだけ、でした。
Update:2008.02.27
上記MS謹製の解決方法では、cssはvalidでなくなる。
validでないcssハックを使うことのデメリットはいくつかあるが、そのまま上記実装にも言える。
cssはvalidで、かつie6でもh3:hover{....}が使いたいならDean Edwardsの
IE7.jsをhead要素からscript要素で読み込むという選択肢がある。