記事本文
IE だと pre 要素内のテキストの文字色がおかしい ?
これまで検証していなかったのかよ、と言われてしまうくらい気付いていなかったんですが、 pre 要素内のテキストの色が IE だと意図しないものになっていました。
pre 要素やテキストの色の関連の CSS はどう指定しているかというと、
* {
color: #000;
}
pre {
color: #ffa;
}
pre code,
pre samp,
pre code var,
pre samp var {
color: inherit;
}
のように、ユニバーサルセレクタで全ての要素の文字色を #000 とした上で、 pre 要素の文字色を #ffa としています。 それだけでは pre 要素内に更に code 要素や samp 要素や var 要素が出現した際に、 pre 要素の要素セレクタの指定ではなくユニバーサルセレクタの指定にマッチしてしまうため、 inherit 値を指定しているのですが......
IE では #000 の方が有効になっています。
またユニバーサルセレクタの取り扱いのせいか !? とも疑いましたが、 IRC チャンネル #hxxk で尋ねてみると、 My "User-StyleSheet" - Examples of CSS にて
IEはまだinherit値が有効にならない
と示されていることを教えていただきました。
IE 6 ではそういったことがあるという話は聞いたことがありましたが、 IE 7 でも改善されていなかったんですね......。
ユニバーサルセレクタでの指定をしないか、あるいは inherit 値ではなくて pre 要素と同じ色を指定すれば解決するのですが、何か釈然としないなあ。
Microsoft と CSS
何で inherit 値に対応してないんだようってことで仕様を見てみると、 CSS2 の color プロパティでは
Value: <color> | inherit
と、取り得る値に inherit 値が示されています ( これは CSS 2.1 の color プロパティでも同様です ) が、CSS1 の color プロパティでは
Value: <color>
と、 inherit 値は取り得る値に含まれていません。
CSS2 や CSS 2.1 の仕様は一通り読んでいましたが、 CSS1 はあまり読んでいなかったので、 inherit 値が含まれていないのも初めて知りました。 なるほどー、 CSS1 で定義されていないならしょうがないねえ......って、 CSS 2.1 の歩みの自分用まとめでも仕様の日付について触れましたが、 CSS2 が勧告となってもう 8 年半くらい経っているですよねえ。 いくら IE が ***( お好きな罵倒語を入れてください ) であるとは言え、まだ勧告に至っていない CSS 2.1 に随時準拠してくれとまでは望まないから、 CSS2 くらいは準拠していましょうよと IRC で呟いていたら、「そもそも CSS2 に準拠したって話は無かったですよ」というご指摘をいただきました。
なるほど MSDN の color Attribute | color Property (A, ADDRESS, APPLET, ...) を見てみると、
This property is defined in World Wide Web Consortium (W3C) Document Object Model (DOM) Level 1 and is defined in Cascading Style Sheets (CSS), Level 1 (CSS1).
と、 CSS1 への準拠は書かれてあっても CSS2 への準拠は書かれていませんね。
IE はやっぱり 7 になってもこの程度か......という思いです。
なお、 IE 8 は inherit 値に対応しているようです。




