CSSレイアウトでfloatを使用した際、通常は親要素内にfloatする要素があり、floatに続く要素にclearを指定し回り込みを解除します。(これが基本です。)clearfixとはclearプロパティを使わずにfloatを解除する手段です。
例えば親要素内でデザイン上どうしてもfloatを解除する為のボックスを設けたくない場合などに利用します。
一部のブラウザで親要素内でfloatを解除しなかった場合に起こる現象として、親要素内に指定した背景画像が表示されない、或いは親要素の下まで表示されないなどがあります。
以下にサンプル解説します。
サンプルソースと通常指定
<div id="mainbox"> <!-- 親要素 -->
<div id="box-a"> *** </div> <!-- float -->
<div id="box-b"> *** </div> <!-- float -->
<div id="box-c"> *** </div> <!-- clear -->
</div>
#mainbox{
width: 800px;
margin: 0 auto;
background: url(***) repeat-y 0 0;
}
#box-a{
width: 600px;
float: right;
}
#box-b{
width: 200px;
float: left;
}
#box-c{ clear: both; }
通常指定サンプルの表示
親要素内でfloatを解除しなかった場合の例
<div id="mainbox"> <!-- 親要素 -->
<div id="box-a"> *** </div> <!-- float -->
<div id="box-b"> *** </div> <!-- float -->
</div>
#mainbox{
width: 800px;
margin: 0 auto;
background: url(***) repeat-y 0 0;
}
#box-a{
width: 600px;
float: right;
}
#box-b{
width: 200px;
float: left;
}
親要素内でfloatを解除しなかった場合のサンプル表示
clearfixの指定とサンプルソース
<div id="mainbox" class="clearfix"> <!-- 親要素 -->
<div id="box-a"> *** </div> <!-- float -->
<div id="box-b"> *** </div> <!-- float -->
</div>
#mainbox{
width: 800px;
margin: 0 auto;
background: url(***) repeat-y 0 0;
}
.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
.clearfix { display: inline-table; }
/* Hides from IE-mac \*/
* html .clearfix { height: 1%; }
.clearfix { display: block; }
/* End hide from IE-mac */
#box-a{
width: 600px;
float: right;
}
#box-b{
width: 200px;
float: left;
}
clearfixを指定した場合のサンプル表示
参考文献