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をマーカーが表示される値を指定することで回避できます。