clearfixは過去の案件からそのまま流用することが多く、あまりきちんと調べたりすることもなかったのですが、少し調べる機会があったので最近のclearfixについてメモしておきます。
サンプルコード
まずはclearfixなどを特に使用しない場合です。
HTML
<div class="list"> <div class="list_item">list1</div> <div class="list_item">list2</div> <div class="list_item">list3</div> <div class="list_item">list4</div> <div class="list_item">list5</div> <div class="list_item">list6</div> </div>
CSS
.list {
width: 800px;
margin: 0 auto;
padding: 10px 0;
background: #3498DB;
}
.list_item {
float: left;
width: 180px;
height: 180px;
margin: 5px 10px;
background: #E74C3C;
}
floatした要素(.list_item)の親要素(.list)の高さがpadding分しか算出されていません。
clearfix対応前のデモページ
最新のclearfixは以下になります。
HTML
<div class="list clearfix"> <div class="list_item">list1</div> <div class="list_item">list2</div> <div class="list_item">list3</div> <div class="list_item">list4</div> <div class="list_item">list5</div> <div class="list_item">list6</div> </div>
CSS
.clearfix:after {
content: "";
display: block;
clear: both;
}
float要素の後に疑似要素を配置して、clear: both;を行っています。
clearfix対応後のデモページ
最近はあまりないと思いますが、IE6や7の対応が必要な場合は以下のようになります。
CSS
.clearfix {
zoom: 1;
}
.clearfix:before,
.clearfix:after {
content: "";
display: table;
}
.clearfix:after {
clear: both;
}
clearfixの代わりにoverflow: hidden;を使うことでも対応できます。
HTML
<div class="list"> <div class="list_item">list1</div> <div class="list_item">list2</div> <div class="list_item">list3</div> <div class="list_item">list4</div> <div class="list_item">list5</div> <div class="list_item">list6</div> </div>
CSS
.list {
overflow: hidden;
}
overflow: hidden;で対応のデモページ
注意点として、overflow: hidden;の方法の場合、親要素の外側にはみ出すと非表示になります。
他にも印刷時の不具合なども発生することがあるようなので、基本的にはclearfixを使用する方がよいと思います。
【参考サイト】
- clearfixの最新版 -フロート関連やマージン相殺の不具合を解決するモダンブラウザ用clearfix | コリス
- とあるコーダーの備忘録 |overflow:hidden;とclearfix
- CSSのclearfixにoverflow:hiddenを使用してはいけない理由 | iwb.jp
コメントが承認されるまで時間がかかります。