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