読者です 読者をやめる 読者になる 読者になる

以下斜め読んだ内容

pseudo translation of useful posts, book reviews, remarks,etc. twitter: feeddict

!importantはieでは実装に不備

css

http://cssbug.at.infoseek.co.jp/detail/winie/b168.html

同じブロックレベル要素の中で、!importantつきのプロパティを書き(例、width:100px !important;)下の行に!importantなしのプロパティ(width:120px;)と書いたセレクタをあるブロックレベル要素に適用すると、モダンブラウザでは!importantつきのプロパティが適用されるが、ieでは下の行にあるwidth:120px;のほうを適用してしまう。

アンダースコアハックはこれを使えば使わずに済むということか?

update:2008.3.11

IE7では!important実装の不備は解消された。上の例だと、IE6までは、widthは120pxになってしまうが、IE7では他のモダンブラウザと同様に、widthは100pxで表示される。

実は、IEのimportant宣言に関する不備は他にもあるらしく、しかもこれはIE6-7共通のものがある。
アンダースコアハックは文法的に正しくないプロパティの書き方をする。

ex. 1
div#test{
width:200px;
_width:300px;
}

モダンブラウザでは_width〜の箇所は無視される。〜IE6では、widthプロパティの指定として読み取られるため、widthは300pxになる。これを利用したのが、アンダースコアハック。IE7では_width〜は無視されるようになった。

ex. 2
div#test{
width:200px;
_width:300px !important;
}

ところが、文法的に正しくないプロパティを使っている箇所にimportant宣言を使うと、IE6-7では無視されず、しかも優先度が一番上のものとして解釈されてしまう。

と、!important Declarations » Learn CSS3 | Cheat Sheet | CSS Tutorial | Selectors | Propertiesには書かれてるが、自分の環境では確認できなかった。beta版のIE7に基づく情報じゃないのか?