IEでのCSSのバグを回避するhasLayout

IE7で拡大・縮小時にレイアウトが重なってしまったり、IEでフロートした要素がはみ出てしまったりとIE独自のCSSのバグがいくつかあります。
これは、IEのhasLayoutが原因のひとつとなっているので、それを回避する方法を考察します。

IE7で拡大時にレイアウトが重なってしまうバグ

hasLayoutとは

hasLayoutとは、オブジェクトがレイアウトを持っているかどうかを示すものです。
hasLayoutの値はread-onlyのため読み込みのみ可能で、falseとtrueがあります。

hasLayoutの値(read-only)

false
デフォルト値。
オブジェクトがレイアウトを持っていない。
true
オブジェクトがレイアウトを持っている。

IEでのCSSのバグを回避するhasLayoutの値

前述した拡大・縮小時にレイアウトが重なってしまったり、フロートした要素がはみ出てしまったりするバグは、このhasLayoutの値がfalseの場合に起きます。

これらのIEでのCSSのバグを回避するためには、hasLayoutの値をtrueにする必要があります。
hasLayoutの値をtrueにするには、CSSで特定のプロパティに下記の値を指定します。

hasLayoutの値をtrueにする値

property value
display inline-block
height any value
float left or right
position absolute
width any value
writing-mode tb-rl
zoom any value

IEのCSSでのバグを回避するためには、例えば「height」の値に「1%」を指定し、「hasLayout」の値を「true」にして回避します。

上記の表の中でよく使用されているものは「height="1%"」や「widthの値を指定する」などがあります。

CSSのバグに効果のあるhasLayoutの指定方法

hasLayoutを変更するプロパティには、「float」「position」「writing-mode」のように実装するレイアウトでその値を指定できないなどの制限があるものもあります。
また、「height="1%"」のように特定の箇所には使用できないものもあります。

そこで、「zoom」に注目してみました。
「zoom」は指定した要素を拡大縮小の指定をするものです。

ほとんどのレイアウトでは、拡大縮小せず100%の状態でユーザーに利用してもらうことを前提に制作していると思うので、この「zoom」を利用して指定する方法がよいと思います。

CSSのバグに効果のあるhasLayoutの指定方法

*{zoom:1;}

「*」は全てのタグに適応する意味になります。
全てを対象にするのが具合の悪い場合は、個別の箇所に指定してください。

※「zoom」は、IE独自のプロパティのためw3cのCSSチェックなどではエラーがでますが、使用する上では不具合は特にありません。

hasLayoutの参考ページ

hasLayout Property
[MSDN Library]

top of page

Trackback

leave your Comments

※承認制のため、即時には反映されません。
※匿名、通りすがりさんなどへの回答は控えさせていただきます。

Comments

CSS バグ

on 2007年8月8日

IE6で文字が消える…

・hasLayoutのせい。*{zoom:1;}とする。IE7向けに調整が必要。 ■参考 http://coliss.com/articles/build-websi (more…)

Fledgling Blog

on 2007年9月9日

zoom:1;…

今作っているWebサイトのトップページに新着情報を載せる予定なのですが、 DL DT DD を使ったコーディングで、CSSでDDをDTの横に表示するようにマイナスのma (more…)

jmblog.jp

on 2007年10月23日

IEで絶対配置(position:absolute)のボック…

先日、友達の依頼で XHTML+CSS のコーディングをしていたところ、position:absolute を指定したボックスが Win版IE6 でのみ表示されないとい (more…)

気まぐれ

on 2007年11月25日

CSS バグ 回避で検索して来ました。IE6-Windows2000で、貴サイトHEADER部分かなりはみ出てますよ~。

AdSenseが入りきってないのかな? 

コリス

on 2007年11月25日

> 気まぐれさん

ありがとうございました。
ご指摘通り、IEでAdSenseがはみ出てました。

うーん、最初は収まっていたはずなのですが、、、AdSenseのコードが変わったのかなぁ?

web制作 コーダーからなりあがり勉強記

on 2007年12月17日

IEでのCSSのバグの(だいたいの場合の)正体 hasLay…

いまさらですが、hasLayoutについて。
http://coliss.com/articles/build-websites/operation/css/143. (more…)

CSS3の足を引っ張るIEに悩む / 35歳からのWEB遊びブログ

on 2010年5月21日

[...] るhasLayoutの問題のようです。 グラデーションの指定をした要素に、幅を指定するなどで問題が解消します。hasLayoutについてと回避方法はコリスさんのサイトで詳しく解説されています。 [...]

最近見たページ » confidelic

on 2010年7月16日

[...] IEでのCSSのバグを回避するhasLayout [...]

TAM テクニカルチーム | hasLayoutを利用してIEのバグを回避する | Tips Note

on 2012年1月19日

[...]   ■IEでのCSSのバグを回避するhasLayout│コリス  http://coliss.com/articles/build-websites/operation/css/143.html ■hasLayoutとは何か│ウノウラボ  http://labs.unoh.net/2007/09/what-is-haslayout.html ■hasLayout|プ [...]

top of page

©2011 coliss