hasLayoutプロパティによるIE6~7のバグ回避
IE6~7には以下のようなCSSのバグがあり、hasLayoutプロパティをtrueにすることで回避できます。
そもそもhasLayoutプロパティとは、オブジェクト(要素)がレイアウト情報を持っているかを示すもので、デフォルトではfalseが指定されています。
しかし、以下のプロパティではデフォルトでhasLayoutプロパティがtrueに設定されています。
- body
- img
- object
- hr
- input
- button
- textarea
- table
- tr
- th
- td
- frameset
- frame
- iframe
- marquee
このhasLayoutプロパティは本来読み取り専用ですが、以下のプロパティと値を組み合わせることでtrueにすることができます。
IE6の場合
プロパティ | 値 |
---|---|
position | absolute |
float | left or right |
display | inline-block |
width | any value or auto |
height | any value or auto |
zoom | any value or normal(IE独自プロパティ) |
writing-mode | tb-rl |
IE7の場合
プロパティ | 値 |
---|---|
overflow | hidden or scroll or auto |
overflow-x | hidden or scroll or auto |
overflow-y | hidden or scroll or auto |
min-width | any value or auto |
max-width | any value or auto |
min-height | any value or auto |
max-height | any value or auto |
ただし、zoomプロパティについてはリスト要素(ul、ol、li)では、マーカーが消えてしまうバグがあるため、リスト要素のみzoom:normal;とするか、li要素に対してdisplay:list-item;とmargin-leftをマーカーが表示される値を指定することで回避できます。