dT*blog

design and programming

IE7で再考するボックスモデルとDOCTYPEスイッチ

IE7のWeb標準準拠の動きのおかげで、DOCTYPEスイッチとボックスモデルハックを使用してきたサイトは、その設計を見直さないといけないという、やたら哀しげな状況が生まれている。まあ、自分の手がけてきたサイトがそうなんですが。

取り急ぎ、簡単な対策をメモ。

対象となるのは、XML宣言付きのXHTMLで、CSSハックによってボックスモデルを互換モードで表示しているサイト。要は、IE6を中心に設計されちゃっているサイトね。

XML宣言付きのXHTMLは、IE6だけ互換モードで、Firefoxとかその他のメジャーブラウザは標準モードで表示を行う。今はIE6ユーザーが全盛なので、標準モードのブラウザの表示をIE6に合わせようとして、以下のようなボックスモデルハックを使うことがある。

* {
    box-sizing:	border-box;
    -moz-box-sizing:	border-box;
}

このボックスモデルハックの真意は、「標準モードのブラウザも、ボックスの描画時は互換モードと同じようにしてね」ということ。ところが、IE7は、そこらへんの空気を読まずに、XML宣言付きXHTMLを標準モードで表示し、ボックス描画も標準通りに行うので、表示崩れを起こしてしまう。

対処法としては、IE6中心の発想を改めて、標準モードで正しく表示されるようにCSSを定義すること。そして、IE6のために、アンダーバーハックを使って独自の定義をする。

* {
    /* box-sizing 等は消去!! */
}
.sample {
    width:		200px;
    border:	2px solid #000;
    padding:	0 10px;
    _width:	224px; /* for ie6 */
}

アンダーバーハックは、IE7ではバグが修正されているため、スタイルとして反映されない。つまり、_width はIE6だけに反映される。IE7の製品版リリースまでは実際にどうなるか分からないけれども、たぶんこのままイケるんじゃないかと睨んでいる。

こんなことなら、最初から標準に向かってCSSを設計しておくんだったなあーと、しきりに後悔している。同士の人、頑張りましょう。

Posted by dT by 12:21

トラックバック

このエントリーのトラックバックURL
http://www.deftrash.com/admin/mt/mt-tb.cgi/374

コメント




保存しますか?

(書式を変更するような一部のHTMLタグを使うことができます)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30