Blog

※ブログ移転しました。 → hamashun.me

古いブラウザが_のclass名、id名を無視する理由

もう、class名やid名で悩まないんだからっ!!|CSS HappyLifeRED LINE:class名、id名の付け方に触発されて、また丁度良いタイミングで職場の話題にも上っていたので調べてみました。
古いブラウザが_(アンダースコア)の付いたclass名、id名を認識しないのはなぜか? という話です。

結論から言えば、仕様書で定義されていなかったからだと思われます。
CSS2では当初、_は定義されていなかったのです。

ところがこれはミスだったようで、後に2001年4月3日の正誤表で訂正されます。
これはCSS2.1でも仕様書の変更点C.3.3 4.1.3 Characters and caseにおいて記されています。

アンダースコアは識別子として有効だ. "CSS2で識別子に使える文字は [A-Za-z0-9] とISO 10646の161以上、そしてハイフン(-)だ"が次のように変更された。

CSS2で識別子に使える文字は [A-Za-z0-9] とISO 10646の161以上、そしてハイフン(-)とアンダースコア(_)だ

さて、ここでブラウザリリースの歴史に目を向けてみます。
SEO-Equationというサイトのブラウザの歴史というコンテンツを参考にすると、CSS2の勧告は1998年5月です。
IE4のリリースは前年の1997年10月。 NN4は同年1998年7月となっています。 仕様書に従ってブラウザを作っていたとすれば、これは納得です。

ただ、そうなるとちょっと疑問なのがIE5.0。
リリースは仕様書の訂正前なのに、_に対応しているのです。
この頃のIEチームが凄かったのか、それとも既に情報としては出回っていたのか、はたまた他の理由があるのか・・・・・・。 ブラウザ開発の仕組みは詳しくないので、その辺りは想像するしかありません。

_未対応であるNN6.0のリリースが仕様書訂正直前の2000年11月。 _に対応したNN6.1のリリースが訂正直後の2001年8月というのも、計算が合います。

余談ながらCSS3では、セレクタの頭に_を付ける事も可能になるとか(草案現在)。
そうなれば、アンダースコアハックも書式上で正しいハックになるのでしょうか(そういう問題じゃない?)。
アンダースコアハックはプロパティの前に_でした。 いやあ、普段使わないから忘れてました(言い訳
まあ、CSS3に対応するブラウザが普及する頃には、IE6のシェアは下がっているかもしれませんけれどw

余談その2。
前述のブラウザの歴史を見ていると、IE6とNN6.1って、ほぼ同時期にリリースされているんですね。
そう考えると、IE6も悪くはないんじゃないかと思えてくるから不思議です。

しっかし、思いっきりウンチクな内容になってしまった・・・・・・。

2 Comment

こんばんわー。お邪魔します。

「へぇーーー」というネタ、ありがとうございます(w
普段ブラウザにはいろいろ悩む事もありますが、各ブラウザの歴史って見ていくと面白いですよねー。何がしたかったのかとか考えながら仕様書と照らし合わせたりしてるのってすごく大変だけど、結構そういう話、好きです。(←暇人)

・・・と、とてもためになるお話だったので、こちらの記事内からもリンクさせていただきました。


Name:Red | 2007年01月16日 23:29

>Redさん
コメントありがとうございます!
単に_について調べていたら、いつの間にやらマニアックな方向にいってしまいましたw
 
NNの4.8は、NN7が出た後に出たんですねえ。
何だか感慨深い物があります。
 
リンクも、ありがとうございました。

Name:Shun | 2007年01月16日 23:49

Contribution Form

Blog Search
Search
Recent Entry
Category
Monthly Archive