floatバグ対策
Wednesday, Sep 14, 2005 - 19:19 +09:00
※この記事は追記・編集して新サイトへ移行されています。
floatボックスが親ボックスを貫通して表示される問題について。
親ボックスの中に「float:left;」(box_A)と「float:right;」(box_B)がある。OperaやFirefoxで見てみよう。判りやすいように親ボックスには padding を指定してあるが、親ボックスが中身(floatボックス)に合わせて伸びてくれないことが判る。
<div style="width:140px; padding: 10px; border:1px solid #666;">
<div style="float: left; width: 70px; height: 100px; background: #222; border:1px solid #999;">box_A</div>
<div style="float: right; width: 50px; height: 50px; background: #222; border:1px solid #999;">box_B</div>
</div>
バグとは書いたがCSSの仕様であり、CSSを正しく解釈するブラウザであれば正しい表示です。とはいえ、たとえば親ボックスに背景を指定している場合などには、非常に困る。一番簡単な解決策は、親ボックスの中でfloatボックスの後に、clearを指定したボックスを入れること。
clear: both;を指定
このように、floatボックスの後にfloatでないボックスがあれば、非floatボックスの範囲まで親ボックスは伸びてくれる。ただし上の例のように clear:both; を指定していないと、非floatボックスが右か左かに回りこんでしまい、そこまでしか親ボックスが伸びてくれない。より確実を期すなら(2つのfloatボックスに親ボックスの背景を表示させたいなら)、clear:both; が必要となるわけだ。
とはいえ、大人の事情で親ボックスにclearボックスを置けない場合もある。その場合はCSS側で次のように指定する。
#main:after {
content: ".";
clear: both;
display: block;
height: 0;
visibility: hidden;
}
#main {
display: inline-table;
_height: 1%;
/* \*/ display: block; /* */
}
こうすれば親ボックスにclearボックスを入れずとも、親ボックスをfloatボックスの高さに合わせて拡張することができる。この場でのプレビューはメンドイので割愛。さすがに職場からじゃ無理さっ!
posted in HTML/CSS | Comment (1) | Trackback (0)
1 Comments
- 1. Sig. / June 13, 2006 at 12:33
巧く使えば、IE-macのfloat問題も解決できる模様。
(親ボックスでclear指定してると、子ボックスで同方向のfloatが効かない)ただし、Safariで指定部位のa:hover周りが「もたつく」ようになる。
場合によりけり。悩ましいところ。
Trackback
- このエントリーのトラックバックURL
- http://rospear.info/other/mt-tb.cgi/63