戻 る │ ホーム │ 次 へ

clearfixについて

下の図を見てください:

#box2
#box1
#box3
<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を設定する方法が考えられます。

#box2
#box1
#box3
<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>

完成図

#box2
#box1
#box3
<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>
Copyright(c)2014 Yutaka Tsuchida All rights reserved. テンプレートby LinkFly