トップページの中の プロパティの中の Hのプロパティ一覧の中の hasLayout

hasLayout

  • 最終更新:2009年6月25日 13:56

hasLayoutはIE独自のプロパティで、他のプロパティのように宣言として書く事はできない読み取り専用のプロパティです。
このhasLayoutは、それぞれの要素がレイアウト情報を持っているか居ないかを判断しており、デフォルトの値は「false」になっているためレイアウト情報は無しになります。
尚、body, img, object, hr, input, button, textarea, table, tr, th, td, frameset, frame, iframe, marqueeなどは「true」で固定になっているため変更できません。

hasLayoutを「true」にする宣言
プロパティ
display inline-block
height auto以外
float left or right
position absolute
width auto以外
writing-mode tb-rl
zoom auto以外

値をtrueにする事で、IE6, 7における大半のバグ対策ができます。

CSSを覚え始めの頃はIE6や7を基準に考えがちだと思いますが、その時に、IEだとサイドバーの背景が繰り返されるのにIE以外では繰り返されないと言った事は無かったでしょうか?(ボクが覚え始めの頃あっただけかも知れませんが)

これは、このhasLayoutが関係していた事になります。
floatプロパティを使って2カラムレイアウトを組む場合など、親要素にwidthプロパティの指定のみだと仕様上は子要素にfloatが指定されたボックスが有ると高さを算出してくれませんが、IE6, 7の場合widthプロパティの値がauto以外でhasLayoutの値が「true」になるため、レイアウト情報が有るとみなされ高さが算出されます。
これにより、IE6, 7だけ背景が表示されるという訳です。

また、この他のバグでもhasLayoutが関係している事が多く、widthプロパティなどでは汎用性が高くないため、全ての要素にほぼ問題なく指定できるzoomプロパティを使ってバグ対策するケースが多いです。

IE6, 7におけるバグという表現は、CSSの仕様と違った場合の事を指していますが、hasLayoutはIE6, 7の仕様なので、バグと言うよりそういう仕様になっているのがIE6, 7です。と言うのが正しいかもしれません。

対応ブラウザ
  • IE6対応
  • IE7対応
  • IE8未対応
  • Firefox3.5未対応
  • Opera10未対応
  • Safari4未対応
  • Chrome3未対応

このページの上部へ