Flexbox レイアウト
この章では、Tailwind CSS で Flexbox レイアウトを構築する方法を学びます。
Flex コンテナの作成
flex クラスで Flex コンテナを作成します。
<div class="flex">
<div>アイテム 1</div>
<div>アイテム 2</div>
<div>アイテム 3</div>
</div>
インライン Flex
<span class="inline-flex">...</span>
方向 (flex-direction)
| クラス | 方向 |
|---|---|
flex-row | 左から右 (デフォルト) |
flex-row-reverse | 右から左 |
flex-col | 上から下 |
flex-col-reverse | 下から上 |
<!-- 縦並び -->
<div class="flex flex-col">
<div>上</div>
<div>中</div>
<div>下</div>
</div>
<!-- 横並び (逆順) -->
<div class="flex flex-row-reverse">
<div>右端に表示</div>
<div>中央に表示</div>
<div>左端に表示</div>
</div>
折り返し (flex-wrap)
| クラス | 動作 |
|---|---|
flex-wrap | 折り返す |
flex-nowrap | 折り返さない (デフォルト) |
flex-wrap-reverse | 逆方向に折り返す |
<div class="flex flex-wrap">
<div class="w-1/3">1</div>
<div class="w-1/3">2</div>
<div class="w-1/3">3</div>
<div class="w-1/3">4</div> <!-- 次の行へ -->
</div>
主軸の配置 (justify-content)
| クラス | 配置 |
|---|---|
justify-start | 開始位置 |
justify-end | 終了位置 |
justify-center | 中央 |
justify-between | 両端揃え (間隔均等) |
justify-around | 均等配置 (両端に余白) |
justify-evenly | 完全均等配置 |
<!-- 中央揃え -->
<div class="flex justify-center">
<div>中央に配置</div>
</div>
<!-- 両端揃え -->
<div class="flex justify-between">
<div>左端</div>
<div>右端</div>
</div>
<!-- 均等配置 -->
<div class="flex justify-evenly">
<div>1</div>
<div>2</div>
<div>3</div>
</div>
交差軸の配置 (align-items)
| クラス | 配置 |
|---|---|
items-start | 開始位置 |
items-end | 終了位置 |
items-center | 中央 |
items-baseline | ベースライン揃え |
items-stretch | 伸縮 (デフォルト) |
<!-- 垂直中央揃え -->
<div class="flex items-center h-32 bg-gray-100">
<div>垂直中央</div>
</div>
<!-- 完全中央揃え -->
<div class="flex items-center justify-center h-screen">
<div>画面中央</div>
</div>
個別アイテムの配置 (align-self)
| クラス | 配置 |
|---|---|
self-auto | 親の設定に従う |
self-start | 開始位置 |
self-end | 終了位置 |
self-center | 中央 |
self-stretch | 伸縮 |
<div class="flex items-start h-32 bg-gray-100">
<div>開始位置</div>
<div class="self-center">中央</div>
<div class="self-end">終了位置</div>
</div>
伸縮 (flex-grow / flex-shrink)
| クラス | 動作 |
|---|---|
grow | 余白を埋める |
grow-0 | 伸びない |
shrink | 縮む |
shrink-0 | 縮まない |
<!-- 中央のアイテムが余白を埋める -->
<div class="flex">
<div class="w-20">固定幅</div>
<div class="grow">残りを埋める</div>
<div class="w-20">固定幅</div>
</div>
基準サイズ (flex-basis)
| クラス | サイズ |
|---|---|
basis-0 | 0 |
basis-1/4 | 25% |
basis-1/2 | 50% |
basis-full | 100% |
basis-auto | 自動 |
<div class="flex">
<div class="basis-1/4">25%</div>
<div class="basis-1/2">50%</div>
<div class="basis-1/4">25%</div>
</div>
basis-* は Flex コンテキスト内での初期サイズを指定します。w-* と似ていますが、basis-* は flex-grow / flex-shrink の計算基準となる点が異なります。Flex レイアウト内では w-* よりも basis-* を使うことで、意図通りの伸縮が行われます。
ショートハンド (flex)
| クラス | 意味 |
|---|---|
flex-1 | flex: 1 1 0% (均等に伸縮) |
flex-auto | flex: 1 1 auto |
flex-initial | flex: 0 1 auto |
flex-none | flex: none (固定) |
<!-- 均等幅 -->
<div class="flex">
<div class="flex-1">1/3</div>
<div class="flex-1">1/3</div>
<div class="flex-1">1/3</div>
</div>
flex-1 と flex-auto の違い
flex-1 と flex-auto の違いに注意してください。flex-1 は flex-basis: 0% のためコンテンツの大きさに関係なく均等に分割されます。一方 flex-auto は flex-basis: auto のためコンテンツの大きさを考慮した上で残りスペースを分配します。均等な幅にしたい場合は flex-1 を使いましょう。
間隔 (gap)
gap クラスでアイテム間の間隔を設定します。
<div class="flex gap-4">
<div>間隔 16px</div>
<div>間隔 16px</div>
<div>間隔 16px</div>
</div>
<!-- 横と縦で異なる間隔 -->
<div class="flex flex-wrap gap-x-4 gap-y-2">
<div>横 16px、縦 8px</div>
...
</div>
順序 (order)
| クラス | 順序 |
|---|---|
order-first | -9999 |
order-last | 9999 |
order-none | 0 |
order-1 〜 order-12 | 1〜12 |
<div class="flex">
<div class="order-3">3 番目に表示</div>
<div class="order-1">1 番目に表示</div>
<div class="order-2">2 番目に表示</div>
</div>
実践例
ナビゲーションバー
<nav class="flex items-center justify-between px-6 py-4 bg-white shadow-sm">
<div class="text-xl font-bold">Logo</div>
<div class="flex gap-6">
<a href="#" class="hover:text-blue-500">Home</a>
<a href="#" class="hover:text-blue-500">About</a>
<a href="#" class="hover:text-blue-500">Contact</a>
</div>
</nav>
カードレイアウト
<div class="flex flex-col h-full bg-white rounded-lg shadow-sm">
<img src="..." class="rounded-t-lg" />
<div class="flex-1 p-4">
<h3 class="font-bold">タイトル</h3>
<p class="text-gray-600">説明文...</p>
</div>
<div class="p-4 border-t border-gray-200">
<button class="w-full py-2 bg-blue-500 text-white rounded-sm">
詳細を見る
</button>
</div>
</div>
入力フォーム
<div class="flex">
<input
type="text"
class="flex-1 px-4 py-2 border border-gray-300 rounded-l-lg focus:outline-hidden"
placeholder="検索..."
/>
<button class="px-4 py-2 bg-blue-500 text-white rounded-r-lg">
検索
</button>
</div>
まとめ
flexで Flex コンテナを作成justify-*で主軸、items-*で交差軸の配置grow/shrinkで伸縮を制御gapでアイテム間隔を設定- レスポンシブと組み合わせて柔軟なレイアウトを実現
次に読む
- Grid レイアウト — 2 次元レイアウトを設計する
- スペーシング — padding/margin/gap の使い分けを整理する
- Tailwind CSS ガイド 目次 — 全 18 章の構成に戻る