下の図を見てください:
<style type="text/css">
#box1 { margin: 4px; padding: 10px; font-size:24px; background: #aaa; color:#fff; }
#box2 { width: 129px; float: left; height: 120px;
background: lime; font-size:24px; background: #5ce; color:#fff; }
#box3 { clear:both; margin: 4px; padding: 10px; font-size:24px; background: #e58; color:#fff; }
</style>
<div id="box1">
<div id="box2">#box2</div>
#box1
</div>
<div id="box3">
#box3
</div>
box2は、box1からはみ出して表示されていますが、実際のHTMLのレイアウトでは、box2をbox1に含めたいというケースがあります。
このためには、幾つかのやり方があります。例えば、次のようにbox2の後にダミーの要素を追加し、このダミ-要素に clear:leftを設定する方法が考えられます。
<style type="text/css">
#box1 { margin: 4px; padding: 10px; font-size:24px; background: #aaa; color:#fff; }
#box2 { width: 129px; float: left; height: 120px;
background: lime; font-size:24px; background: #5ce; color:#fff; }
#box3 { clear:both; margin: 4px; padding: 10px; font-size:24px; background: #e58; color:#fff; }
#clear{ clear:left; display:block; } /* 追加 */
</style>
<div id="box1">
<div id="box2">#box2</div>
#box1
<span id="clear"></span> <-- 追加 -->
</div>
<div id="box3">
#box3
</div>
ただし、この方法では、レイアウトを変更するために元のHTML文書を変更しなければなりません。そこで、同様の作業を CSSのみで実装するclearfixと言う手法が利用されています。
次のようなスタイルを定義します。
.clearfix::after {
content: ".";
display: block;
clear: both;
height: 6px;
}
そして、次のようにbox1にスタイルを適用します。
<div id="box1" class="clearfix"> <div id="box2">#box2</div> #box1 </div>
<style type="text/css">
#box1 { margin: 4px; padding: 10px; font-size:24px; background: #aaa; color:#fff; }
#box2 { width: 129px; float: left; height: 120px;
background: lime; font-size:24px; background: #5ce; color:#fff; }
#box3 { clear:both; margin: 4px; padding: 10px; font-size:24px; background: #e58; color:#fff; }
.clearfix::after { content: "."; display: block; clear: both; height: 0px; visibility: hidden; }
</style>
<div id="box1" class="clearfix">
<div id="box2">#box2</div>
#box1
</div>
<div id="box3">
#box3
</div>