CSSの回り込みと解除のサンプルです。
目次
floatプロパティの動き
- floatプロパティは、指定した対象を左または右に寄せて、後続を反対側に回り込ませます。
- 以下はMDNのfloatのリンクです。
https://developer.mozilla.org/ja/docs/Web/CSS/float
イメージ
floatプロパティを使用したときのイメージです。
test1のボックスにfloat:leftを指定しました。
test1のボックスが左に配置され、後続の文字のaaaとbbbが右に回り込みます。

コード
上記イメージのコードです。
<style>
#main{
float:left;
height:70px;width:200px;
border:1px solid #000;
background-color:#E0FFFF;
text-align:center;
}
</style>
<div id="main" >test1</div>
<p>aaa</p>
<p>bbb</p>
3行目は、11行目に対してfloat:leftを指定しています。
float:leftを指定しない場合
3行目のfloat:leftを指定しない場合は、以下のよう縦に並びます。

float:rightを指定した場合
3行目をfloat;rightとすると、
test1が右に配置され、後続のaaaとbbbが左に回り込みます。

clearプロパティの動き
- floatプロパティの回り込みを解除します。
- 以下はMDNのclearのリンクです。
https://developer.mozilla.org/ja/docs/Web/CSS/clear
イメージ
clearプロパティを使用したときのイメージです。
test1のボックスにfloat:leftを指定しました。
bbbにclear:leftを指定しました。
test1のボックスが左に配置され、後続の文字のaaaが右に回り込み、clear:leftを指定したbbbの回り込みが解除されています。(回り込んでいません)

コード
上記イメージのコードです。
<style>
#main{
float:left;
height:70px;width:200px;
border:1px solid #000;
background-color:#E0FFFF;
text-align:center;
}
.p2{
clear:left;
}
</style>
<div id="main" >test1</div>
<p class="p1">aaa</p>
<p class="p2">bbb</p>
3行目は、14行目に対してfloat:leftを指定しています。
10行目は、16行目に対してclear:leftを指定しています。
10行目をclear:bothとしても結果は同じになります。
clear:rightとした場合は、回り込みは解除されません。
overflow:hiddenでfloatを解除する
floatした要素は、親要素から高さを認識できなくなります。
親要素にoverflow:hiddenを使用すると親要素から高さを認識できるようになります。
イメージ
サンプルとして親のボックス(main)とその子のボックス(aaaとbbb)があり、その下にfooterのボックスがあるとします。
子のボックスのaaaにfloat:leftをbbbにfloat:rightを指定すると
aaaとbbbが浮いて(float)、親のボックスが子のボックスの高さを認識できなくなります。
その結果、以下のようにfooterのボックスが上まできてしまいます。

親のボックスのmainにoverflow:hiddenを追記するとmainのボックスは、浮いた(float)のボックスの高さを認識するので、その後にfooterが表示されます。

コード
上記イメージのコードです。
<style>
.main{
overflow:hidden;
width:200px;background-color:#E0FFFF;
}
.sub1{
float:left;
width:70%;
height:100px;
background:AntiqueWhite;
}
.sub2{
float:right;
width:25%;
background:AntiqueWhite;
}
.footer{width:200px;background:LightSalmon;}
</style>
<div class="main">
<div class="sub1">aaa</div>
<div class="sub2">bbb</div>
</div>
<div class="footer">footer</div>
3行目は、overflow:hidden指定しています。
clearfixでfloatを解除する
上記コードのoverflow:hiddenの代わりにclearfixでもfloatを解除でき同じ見た目になります。
コード
clearfixを使用するサンプルです。
<style>
.main{width:200px;background-color:#E0FFFF;}
.clearfix::after {
content: "";
display: block;
clear: both;
}
.sub1{
float:left;
width:70%;
height:100px;
background:AntiqueWhite;
}
.sub2{
float:right;
width:25%;
background:AntiqueWhite;
}
.footer{width:200px;background:LightSalmon;}
</style>
<div class="main clearfix">
<div class="sub1">aaa</div>
<div class="sub2">bbb</div>
</div>
<div class="footer">footer</div>
4-8行目は、clearfixです。定番の書き方です。
4行目は、afterでcontentがなにもないブロック要素をclearfixクラスの要素の後ろに追加し、そこでclear bothを行ってfloatを解除しています。
関連の記事
CSS ボックスの配置のサンプル(positionのrelative)
CSS ボックスの配置のサンプル(positionのabsolute)
CSS ボックスの配置のサンプル(positionのfixed)
CSS 要素の重なる順番を指定するサンプル(z-index)
CSS 要素のボックスの種類を指定するサンプル(display)