CSSフロートとクリア
フロートは、FlexboxとGridが登場する前のCSSの主要なレイアウト方法でした。モダンレイアウトではFlexbox/Gridが優先されますが、フロートを理解することはまだ重要です——レガシーコードベースで遭遇することがあります。
フロートプロパティ早見表
| プロパティ | よく使う値 | 用途 |
|---|---|---|
float |
left、right、none |
フロートの方向 |
clear |
left、right、both、none |
フロート効果のクリア |
フロートプロパティ
floatは要素をコンテナの片側に「浮かせ」、他のコンテンツがその周りに回り込みます。
サンプル
HTML
<style>
.float-left {
float: left;
width: 120px;
background: #e3f2fd;
border: 1px solid #90caf9;
padding: 10px;
}
.float-right {
float: right;
width: 120px;
background: #fce4ec;
border: 1px solid #f48fb1;
padding: 10px;
}
</style>
<div class="float-left">左フロート</div>
<div class="float-right">右フロート</div>
<p>テキストがフロートされた要素の周りに回り込みます...</p>
フロートの動作
サンプル
HTML
<style>
.container {
border: 2px solid #333;
padding: 10px;
}
.image {
float: left;
margin-right: 15px;
margin-bottom: 10px;
width: 150px;
height: 100px;
background: #e3f2fd;
}
</style>
<div class="container">
<div class="image">画像</div>
<p>テキストがフロートされた画像の周りに回り込みます。これはフロートが本来設計されていた古典的なテキスト回り込み効果です。テキストはフロートされた要素の自然に流れます。</p>
</div>
フロートの問題:高さの崩れ
すべての子要素がフロートされると、親が「包み忘れ」ます:
サンプル
HTML
<style>
.parent {
border: 2px solid red;
}
.child {
float: left;
width: 100px;
height: 100px;
background: #e3f2fd;
border: 1px solid #1976d2;
}
</style>
<div class="parent">
<div class="child">子1</div>
<div class="child">子2</div>
</div>
結果:親のボーダーが上部に張り付き、子がオーバーフロー——フロートされた子はドキュメントフローのスペースを占有しないためです。
フロートのクリア
1. clearプロパティの使用(従来方法)
サンプル
HTML
<div class="parent">
<div class="child">コンテンツ</div>
<div class="child">コンテンツ</div>
<div style="clear: both;"></div>
</div>
2. 親のoverflow
サンプル
HTML
<style>
.parent {
overflow: hidden;
}
</style>
BFC(ブロック整形コンテキスト)の動作を利用します。
3. 疑似要素Clearfix(推奨)
標準的で推奨される方法:
サンプル
HTML
<style>
.clearfix::after {
content: "";
display: block;
clear: both;
}
</style>
<div class="parent clearfix">
<div class="child" style="float: left;">コンテンツ</div>
<div class="child" style="float: left;">コンテンツ</div>
</div>
モダンな代替手段:Flexbox
ほとんどのフロートレイアウトは、FlexboxまたはGridに置き換えることができます:
サンプル
HTML
<style>
/* 旧方法:フロート */
.old-layout {
overflow: hidden;
}
.old-layout .col {
float: left;
width: 33.33%;
}
/* モダン方法:Flexbox */
.modern-layout {
display: flex;
}
.modern-layout .col {
flex: 1;
}
</style>
❓ よくある質問
Q フロートはまだレイアウトに使用されますか?
A 推奨されません。フロートはテキスト回り込み用に設計されたもので、レイアウト用ではありません。FlexboxとGridはフロートレイアウトを完全に置き換えました。「画像 + テキスト回り込み」エフェクトにのみフロートを使用してください——これが現代の正しいユースケースです。
Q clearfixとは何ですか?
A clearfixはフロート効果をクリアするための古典的なハックです。親コンテナに`::after { content: ""; display: block; clear: both; }`を追加すると、フロートされた子を「包み込み」ます。FlexboxまたはGridでは、clearfixは不要です。
Q フロートの親の高さ崩れ怎么办?
A 高さ崩れは、フロートされた要素がドキュメントフローから離れるため発生します——親がその高さを検出できません。解決策:親に`overflow: hidden`を設定する、clearfixを使用する、またはFlexboxレイアウトに切り替えます。
📖 まとめ
- フロートはかつてCSSの主要なレイアウト方法でしたが、現在はFlexboxとGridに大きく置き換えられています
- フロートの核心的な問題は「高さ崩れ」——古典的な修正方法はclearfix疑似要素です
- 新規プロジェクトではFlexboxまたはGridを使用し、テキスト回り込みエフェクトにはフロートがまだ最適です
📝 演習
- 画像が左にフロートされ、テキストがその周りに回り込む画像とテキストのページを作成してください。
- フロートを使用して「3カラムレイアウト」を実装してください——左200px、右200px、中央はアダプティブ。
- 「高さ崩れ」を実演し、少なくとも3つの方法(clearfix、overflow、疑似要素)で解決してください。
- フロートの3カラムレイアウトをFlexboxで書き直し、コードの違いを比較してください。



