web制作のポイント

CSS floatパターン集|レイアウトの仕組みと現代との比較

更新日:2026-05-19 著者:unigram 読了目安:10分

この記事の要点

float: left/right の基本からclearfix・2/3カラムレイアウトまで、float時代のCSS技術をコード付きで解説。Flexbox・Gridとの比較も収録。

Webページのレイアウトを組む方法として、かつて広く使われていたのが float プロパティです。

現在は FlexboxCSS Grid が主流ですが、古いサイトの保守・コードの読み解きのために float の仕組みを知っておくことは重要です。

この記事でわかること

  • float: left / right の基本的な動作
  • clearfix(高さ崩れ防止)の仕組み
  • 2カラム・3カラムレイアウトの作り方
  • clear: both による回り込み解除
  • float / Flexbox / Grid のコード比較
⚠️ 新規開発には Flexbox / Grid を使うことを推奨します。float はテキスト回り込みや既存コードの保守目的で理解しておきましょう。

floatとは?

float は元々、画像にテキストを回り込ませるために設計されたプロパティです。後に多くの開発者がレイアウトにも流用するようになりましたが、その副作用(高さの崩れ)に対処するためのテクニックが必要になりました。

動作
float: left 要素を左に寄せ、後続要素が右側に回り込む
float: right 要素を右に寄せ、後続要素が左側に回り込む
float: none float を解除する(デフォルト値)

基本パターン編

01

基本の float(左・右寄せ)

float: left で要素を左に寄せ、後続のテキストや要素が回り込む。float: right で右寄せ。画像にテキストを回り込ませるのが本来の用途。

float: leftfloat: right
Preview
float: left
画像

float: left を指定した要素の右側に、後続のテキストが自動で回り込みます。

float: right
画像

float: right を指定すると要素が右端に配置され、テキストが左側から回り込みます。

HTMLCSS
index.htmlcopy
<div class="container">
  <img class="float-left" src="image.jpg" alt="画像">
  <p>画像の右側にテキストが回り込みます。</p>
</div>
style.csscopy
.float-left {
  float: left;           /* 要素を左に寄せ、後続要素を右側に回り込ませる */
  margin: 0 16px 8px 0; /* 右と下に余白を設けてテキストとの間隔を確保 */
  width: 120px;           /* float 要素は幅を明示的に指定する必要がある */
}
.float-right {
  float: right;          /* 要素を右に寄せ、後続要素を左側に回り込ませる */
  margin: 0 0 8px 16px;
  width: 120px;
}
02

clearfix — 高さの崩れを防ぐ

float した子要素は親の高さ計算から外れるため、親の高さが0になって崩れる。::after 疑似要素で clear: both を当てる「clearfix」がその対策の定番。

::after { content: ”; display: table; clear: both; }
Preview
❌ clearfix なし — 親の高さが0になり背景が見えない
float 要素
float 要素
← 親の border が float 要素を囲めていない
✅ clearfix あり — 親が float 子をきちんと囲む
float 要素
float 要素
HTMLCSS
index.htmlcopy
<div class="clearfix">  <!-- 親に clearfix クラスを付ける -->
  <div class="box">float 要素 A</div>
  <div class="box">float 要素 B</div>
</div>
style.csscopy
/* clearfix:float した子要素を親が正しく囲むための定番テクニック */
.clearfix::after {
  content: '';      /* 疑似要素を生成するために必須(中身は空) */
  display: table;   /* ブロック要素として配置し float の影響を受けないようにする */
  clear: both;      /* 左右どちらの float も解除して親が高さを認識できるようにする */
}
.box {
  float: left;    /* 要素を左に float させる */
  width: 48%;
  margin: 0 2% 0 0;
}

レイアウト応用編

03

2カラムレイアウト(float + margin)

サイドバーを float: left で固定幅にし、メインコンテンツに margin-left を設けて並べる。float 時代のサイドバーレイアウトの定番。

float: left(サイドバー)margin-left: サイドバー幅(メイン)
Preview
サイドバー
📊 概要📁 プロジェクト⚙️ 設定
メインコンテンツ
カード A
カード B
カード C
HTMLCSS
index.htmlcopy
<body class="clearfix">
  <nav class="sidebar">サイドバー</nav>
  <main>メインコンテンツ</main>
</body>
style.csscopy
.clearfix::after { content: ''; display: table; clear: both; }  /* 高さ崩れ防止 */
.sidebar {
  float: left;    /* サイドバーを左に寄せる */
  width: 200px;  /* サイドバーの幅を固定する */
}
main {
  margin-left: 200px;  /* サイドバー幅と同じ値を左マージンに設定して隣に配置する */
}
04

3カラムレイアウト

左サイドバー・メイン・右サイドバーの三列構成。左右を float させ、中央を margin で確保する。HTMLの記述順に制約がある点が欠点。

float: left(左サイドバー)float: right(右サイドバー)margin-left / margin-right(メイン)
Preview
左ナビ🏠 ホーム📰 ニュース
右ウィジェット📢 広告🔥 人気
メインコンテンツ
記事本文エリア
HTMLCSS
index.htmlcopy
<body class="clearfix">
  <!-- 左右の float を main より先に書く必要がある -->
  <nav class="nav-left">左ナビ</nav>
  <aside class="aside-right">右ウィジェット</aside>
  <main>メインコンテンツ</main>
</body>
style.csscopy
.clearfix::after { content: ''; display: table; clear: both; }
.nav-left {
  float: left;    /* 左サイドバーを左に寄せる */
  width: 160px;  /* 左サイドバーの幅を160pxに固定する */
}
.aside-right {
  float: right;  /* 右サイドバーを右に寄せる */
  width: 180px;  /* 右サイドバーの幅を180pxに固定する */
}
main {
  margin-left: 160px;   /* 左サイドバーの幅ぶんだけ左マージンを確保する */
  margin-right: 180px;  /* 右サイドバーの幅ぶんだけ右マージンを確保する */
}
05

均等カラム(%幅 + float)

全要素を float: left にして width をパーセントで指定する、float 版グリッドの定番。ただし box-sizing の扱いと margin の計算が煩雑。

float: leftwidth: 33.33%box-sizing: border-box
Preview
カラム 1
width: 33.33%
カラム 2
width: 33.33%
カラム 3
width: 33.33%
HTMLCSS
index.htmlcopy
<div class="row">
  <div class="col">カラム 1</div>
  <div class="col">カラム 2</div>
  <div class="col">カラム 3</div>
</div>
style.csscopy
.row {
  width: 100%;
}
.row::after { content: ''; display: table; clear: both; }  /* clearfix */
.col {
  float: left;               /* 全カラムを左に float させる */
  width: 33.33%;             /* 3等分(100 ÷ 3 ≈ 33.33%) */
  padding: 0 12px;           /* カラム内の左右の余白 */
  box-sizing: border-box;    /* padding を幅の内側に含める */
}

解除と応用編

06

clear: both — 回り込みの解除

float が続いた後、次の要素から回り込みを解除したいときに clear: both を使う。clear: left / right で片方だけ解除することも可能。

clear: bothclear: leftclear: right
Preview
float: left
float: right
← clear: both を指定 → ここから通常フローに戻る
通常フロー(clear 解除後の要素)
HTMLCSS
index.htmlcopy
<div class="float-left">左に float</div>
<div class="float-right">右に float</div>
<div class="clear">ここから通常フロー</div>
<div>この要素も通常フロー</div>
style.csscopy
.float-left  { float: left;  width: 120px; }
.float-right { float: right; width: 120px; }
.clear {
  clear: both;   /* 左右どちらの float も解除してここから通常フローに戻る */
  /* clear: left  → 左 float だけ解除 */
  /* clear: right → 右 float だけ解除 */
}
07

ヘッダー・フッター付きページ全体レイアウト

float を使ったサイト全体の構成。ヘッダーとフッターは幅100%で配置し、中段だけ float で左右に分ける。clearfix が必須。

float: left(サイドバー)margin-left: サイドバー幅(メイン)clearfix(コンテンツラッパー)
Preview
🌐 ヘッダー
width: 100%
サイド📊 概要📁 ファイル
メインコンテンツ(margin-left: 110px)
フッター© 2025
HTMLCSS
index.htmlcopy
<body>
  <header>ヘッダー</header>
  <div class="content-wrap clearfix">
    <nav class="sidebar">サイドバー</nav>
    <main>メインコンテンツ</main>
  </div>
  <footer>フッター</footer>
</body>
style.csscopy
header, footer {
  width: 100%;  /* ヘッダーとフッターは横幅いっぱいに広げる */
}
.clearfix::after {
  content: ''; display: table; clear: both;  /* 高さ崩れ防止 */
}
.sidebar {
  float: left;    /* サイドバーを左端に固定する */
  width: 200px;  /* サイドバーの幅を200pxに固定する */
}
main {
  margin-left: 200px;  /* サイドバーの幅ぶん左マージンを確保してメインを隣に配置 */
}

比較まとめ

08

float vs Flexbox / Grid — 比較まとめ

同じ「左サイドバー+メイン」レイアウトを float・Flexbox・Grid の3通りで書いた場合の比較。コード量と直感性の違いを確認できる。

float(古典)Flexbox(現代・推奨)Grid(現代・推奨)
Preview
サイドバー
メインコンテンツ
↑ どの方法でも見た目は同じ。タブでコードの違いを確認できる
HTMLCSSCSS — Flexbox(推奨)CSS — Grid(推奨)
index.htmlcopy
<div class="wrap">
  <nav class="sidebar">サイドバー</nav>
  <main>メインコンテンツ</main>
</div>
style.csscopy
/* float 版:clearfix 必須・margin で幅を確保する必要がある */
.wrap::after {
  content: ''; display: table; clear: both;  /* clearfix がないと高さが崩れる */
}
.sidebar {
  float: left;    /* サイドバーを左に寄せる */
  width: 200px;  /* 幅の明示的な指定が必須 */
}
main {
  margin-left: 200px;  /* サイドバー幅ぶん余白を作る(自動計算されない) */
}
style.css — Flexbox 版copy
/* Flexbox 版:clearfix 不要・直感的に書ける */
.wrap {
  display: flex;  /* これだけで子要素が横並びになる */
}
.sidebar {
  width: 200px;       /* サイドバーの幅を固定する */
  flex-shrink: 0;     /* 幅が縮まないようにする */
}
main {
  flex: 1;  /* 残りのスペースをすべて占有する(margin の計算不要) */
}
style.css — Grid 版copy
/* Grid 版:レイアウトの意図が一目でわかる */
.wrap {
  display: grid;
  grid-template-columns: 200px 1fr;
  /* 200px → サイドバーを200pxに固定する */
  /* 1fr   → メインが残りのスペースを占有する */
  /* float も clearfix も margin の計算も一切不要 */
}

まとめ

  • float は画像のテキスト回り込みが本来の用途。レイアウト目的は Flexbox / Grid を使う
  • float した子要素は親の高さ計算から外れる → clearfix(::after)で対処
  • clear: both で float の影響を解除してから通常フローに戻る
  • 2カラムは float: left + margin-left、3カラムは左右を float させて中央を margin で確保
  • 同じレイアウトが Flexbox なら clearfix 不要、Grid ならさらに1行で書ける

 

この記事を書いた人

unigram
web、印刷、映像などの制作をしています。@京都、フリーランス18年目。 大学で講師もしています。 自身の備忘録も兼ねて、Web制作・WordPress・SEO・GA4・生成AI活用をテーマに情報発信しています。わかりやすく優しい内容で記事作成を心がけています。