hasLayoutって言葉をご存知ですか?私も最近知ったんですが、hasLayoutプロパティとはWindows IEの独自拡張プロパティだそうです。私も記事を書きつつも未だに詳しくはわかっていないのですが、わかる限りで書きます。
まれにWindows IEで配置に関する問題が発生した場合に、その部分に幅を指定するだけで問題が解消されることがあります。これは別に幅を指定したことで解決したわけではなくて、幅を指定したことでhaslayoutプロパティの値が「true」になったことで問題が解消されているそうです。
ではhaslayoutプロパティとはどういうものかというと、あくまで推測の域で説明させて頂きますと「要素自身が大きさや位置を決定しているかどうか」だと思います。つまり要素自身が自身の大きさや位置を決定しているなら「true」、要素自身が大きさや位置を決定していない状態なら「false」。falseの場合はどこで大きさや位置を決定しているのかというと要素の親の要素ということになります。ちなみに初期値は「false」だそうです。
また下記要素は常に「true」の状態になっています。
- body
- img
- object
- input
- select
- button
- table
- tr
- th
- td
では他の初期値が「false」になっているものを「true」に変えるプロパティの組み合わせはどれかというと
- width: auto以外の値
- height: auto以外の値
- float: leftかright
- position: absolute
- display: inline-block
- zoom: normal以外の値
となります。上記以外にもありますが、IE7のみと限定しているので掲載しませんでした。上記の中でもwidthプロパティは使いやすいかと思います。例えば「width: 100%;」ならピクセル指定が都合の悪い時にでも使えますしね。
なお今回の記事は「coliss」さんや「バシャログ。」さんの記事を参考にさせて頂きました。ありがとうございます。また「Webプロフェッショナルのための黄金則 HTML+CSS虎の巻 (Web Designing BOOKS)」も参考にしています。もっと詳しく知りたいという方はご購入の上、お読みください。損はしないと思います。