メインコンテンツまでスキップ

Grid レイアウト

この章では、CSS Grid を Tailwind CSS で活用する方法を学びます。

Grid コンテナの作成

grid クラスで Grid コンテナを作成します。

<div class="grid">
<div>アイテム 1</div>
<div>アイテム 2</div>
<div>アイテム 3</div>
</div>

カラム数の指定

固定カラム数

<!-- 3 カラム -->
<div class="grid grid-cols-3">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
</div>
クラスカラム数
grid-cols-11
grid-cols-22
grid-cols-33
grid-cols-44
grid-cols-66
grid-cols-1212

v4 の動的カラム数

v4 では任意の数値を直接指定できます。

<!-- v4: 任意の数値 -->
<div class="grid grid-cols-5">...</div>
<div class="grid grid-cols-15">...</div>

自動フィット

<!-- コンテンツに合わせて自動調整 -->
<div class="grid grid-cols-[repeat(auto-fit,minmax(200px,1fr))]">
<div>カード 1</div>
<div>カード 2</div>
<div>カード 3</div>
</div>

行数の指定

<div class="grid grid-rows-3 grid-flow-col">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
</div>

間隔 (gap)

<!-- 全方向 -->
<div class="grid grid-cols-3 gap-4">...</div>

<!-- 横と縦で異なる間隔 -->
<div class="grid grid-cols-3 gap-x-4 gap-y-8">...</div>

スパン (結合)

カラムスパン

<div class="grid grid-cols-4 gap-4">
<div class="col-span-2">2 カラム分</div>
<div>1 カラム</div>
<div>1 カラム</div>
<div>1 カラム</div>
<div class="col-span-3">3 カラム分</div>
</div>
クラススパン
col-span-11 カラム
col-span-22 カラム
col-span-33 カラム
col-span-full全カラム

行スパン

<div class="grid grid-cols-3 grid-rows-3 gap-4">
<div class="row-span-2">2 行分</div>
<div>通常</div>
<div>通常</div>
<div>通常</div>
<div class="row-span-2">2 行分</div>
</div>

開始・終了位置

カラム位置

<div class="grid grid-cols-6 gap-4">
<div class="col-start-2 col-end-4">2〜3 カラム目</div>
<div class="col-start-5">5 カラム目から</div>
</div>
クラス位置
col-start-11 から開始
col-end-33 で終了
col-start-auto自動

行位置

<div class="grid grid-cols-3 grid-rows-3 gap-4">
<div class="row-start-2 row-end-4">2〜3 行目</div>
</div>

配置

アイテムの配置 (place-items)

<!-- 中央揃え -->
<div class="grid place-items-center h-screen">
<div>画面中央</div>
</div>
クラス配置
place-items-start開始位置
place-items-end終了位置
place-items-center中央
place-items-stretch伸縮

コンテンツの配置 (place-content)

<div class="grid grid-cols-2 place-content-center h-64">
<div>1</div>
<div>2</div>
</div>

個別アイテムの配置 (place-self)

<div class="grid grid-cols-3 h-32">
<div class="place-self-start">開始</div>
<div class="place-self-center">中央</div>
<div class="place-self-end">終了</div>
</div>

自動配置 (grid-auto-flow)

クラス配置方向
grid-flow-row行方向 (デフォルト)
grid-flow-col列方向
grid-flow-row-dense行方向 (密)
grid-flow-col-dense列方向 (密)
<!-- 列方向に配置 -->
<div class="grid grid-rows-3 grid-flow-col gap-4">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
</div>

サブグリッド

サブグリッドの用途

サブグリッド (grid-cols-subgrid / grid-rows-subgrid) は CSS Grid Level 2 の機能です。子要素が親グリッドのトラック定義を継承できるため、カードリスト内のフッターの高さ揃え等に便利です。

サブグリッドユーティリティは Tailwind CSS v3.4 から利用できます (v4 でも同様)。

<div class="grid grid-cols-4 gap-4">
<div class="col-span-3 grid grid-cols-subgrid">
<div>サブ 1</div>
<div>サブ 2</div>
<div>サブ 3</div>
</div>
</div>

サブグリッドが特に有用なのは、カードリストのように複数の子要素の高さを揃えたい場合です。

<!-- カードリスト内でフッターの高さを揃える -->
<div class="grid grid-cols-3 gap-6">
<div class="grid grid-rows-subgrid row-span-3">
<h3 class="text-lg font-bold">タイトル</h3>
<p class="text-gray-600">説明文 (長さが異なっても揃う)</p>
<a href="#" class="text-blue-500">もっと見る →</a>
</div>
<!-- 他のカードも同じ構造 -->
</div>

実践例

ダッシュボードレイアウト

<div class="grid grid-cols-4 grid-rows-3 gap-4 h-screen p-4">
<!-- ヘッダー -->
<header class="col-span-4 bg-white rounded-lg shadow-sm p-4">
ヘッダー
</header>

<!-- サイドバー -->
<aside class="row-span-2 bg-white rounded-lg shadow-sm p-4">
サイドバー
</aside>

<!-- メインコンテンツ -->
<main class="col-span-3 bg-white rounded-lg shadow-sm p-4">
メインコンテンツ
</main>

<!-- フッター -->
<footer class="col-span-3 bg-white rounded-lg shadow-sm p-4">
フッター
</footer>
</div>

カードギャラリー

<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 p-6">
<div class="bg-white rounded-lg shadow-sm overflow-hidden">
<img src="..." class="w-full h-48 object-cover" />
<div class="p-4">
<h3 class="font-bold">カード 1</h3>
<p class="text-gray-600">説明文...</p>
</div>
</div>
<!-- 繰り返し -->
</div>

画像グリッド

<div class="grid grid-cols-4 gap-2">
<div class="col-span-2 row-span-2">
<img src="..." class="w-full h-full object-cover" />
</div>
<div>
<img src="..." class="w-full h-full object-cover" />
</div>
<div>
<img src="..." class="w-full h-full object-cover" />
</div>
<div>
<img src="..." class="w-full h-full object-cover" />
</div>
<div>
<img src="..." class="w-full h-full object-cover" />
</div>
</div>

Flexbox vs Grid

用途推奨
1 次元レイアウト (横並び・縦並び)Flexbox
2 次元レイアウト (行と列)Grid
コンテンツベースのサイズ調整Flexbox
厳密なグリッド配置Grid
ナビゲーション、ボタングループFlexbox
カードギャラリー、ダッシュボードGrid

まとめ

  • gridgrid-cols-* でグリッドレイアウト
  • col-span-* / row-span-* でセル結合
  • place-items-* でアイテムを配置
  • gap で間隔を設定
  • レスポンシブと組み合わせて柔軟なレイアウト

次に読む