一覧へ

CSS Grid — 2次元レイアウトの解決策

CSS Gridの主要な概念、grid-templateで行と列を定義する方法、およびFlexboxとの違いを説明します。

中級
|
5
|
検証済み (2026-07)
進捗0/55 (0%)

CSS Grid — 2次元レイアウトの解決策

このトピックを終えると

CSS Gridを使って、行と列ベースのレイアウトを構成する方法を理解できるようになります。


Flexboxだけでは不十分な場合

Flexboxは1次元です。横方向または縦方向のいずれか一方にアイテムを配置します。しかし、ダッシュボードのように、行と列の両方を制御する必要があるレイアウトでは、限界があります。

CSS Gridは2次元レイアウトシステムです。行と列を同時に定義し、アイテムを希望するセルに配置します。


基本的な使い方

css
.container {
  display: grid;
  grid-template-columns: 200px 1fr 200px;
  grid-template-rows: 60px 1fr 40px;
  gap: 16px;
}

3列3行のレイアウトです。1frは、残りのスペースを占めるという意味です(fraction)。左200px、中央は残り、右200px。


fr単位

css
grid-template-columns: 1fr 2fr 1fr;

残りのスペースを比率で分割します。1:2:1なので、中央の列は両側の2倍の幅になります。pxと組み合わせて使用することもできます。

css
grid-template-columns: 250px 1fr;

左側は固定の250px、右側は残りのすべて。


repeat — 反復パターン

同じ列を複数回使用する場合:

css
/* 同じ表現 */
grid-template-columns: 1fr 1fr 1fr 1fr;
grid-template-columns: repeat(4, 1fr);

レスポンシブなカードグリッド:

css
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));

「最小250px、残りのスペースを均等に分割し、スペースが不足した場合は折り返す。」この1行でレスポンシブなカードグリッドが完成します。メディアクエリなしで。


アイテムの配置

特定のアイテムを希望するセルに配置できます:

css
.header {
  grid-column: 1 / -1; /* 1行目から最後の行まで(全体の幅) */
}

.sidebar {
  grid-row: 2 / 4; /* 2行目から4行目まで(2行を占有) */
}

grid-column: 1 / 3は、1番目の縦線から3番目の縦線まで、つまり2つのセルを占有します。-1は最後の線です。


grid-template-areas — 視覚的な配置

css
.container {
  display: grid;
  grid-template-areas:
    "header header header"
    "sidebar content aside"
    "footer footer footer";
  grid-template-columns: 200px 1fr 150px;
  grid-template-rows: 60px 1fr 40px;
}

.header  { grid-area: header; }
.sidebar { grid-area: sidebar; }
.content { grid-area: content; }
.aside   { grid-area: aside; }
.footer  { grid-area: footer; }

CSSでレイアウトの形状を絵のように描くことができます。


Grid vs Flexbox

両方とも使用できます。役割が異なります。

Flexbox: 一方向の配置。ナビゲーションバー、ボタングループ、カード内のコンテンツの整列。 Grid: 行と列の両方を同時に制御。ページ全体のレイアウト、ダッシュボード、カードグリッド。

通常、大きなレイアウトはGridで構成し、内部の小さな要素はFlexboxで整列させます。


重要なポイント

CSS Gridは、行と列を同時に制御する2次元レイアウトシステムです。 fr単位で残りのスペースを比率で分割し、repeat(auto-fill, minmax(...))でレスポンシブなグリッドを作成します。 大きなレイアウトはGrid、小さな要素の整列はFlexboxが一般的です。

💬 質問・コメント

0件のコメント

ログインせずに投稿できます。ゲスト投稿は投稿者自身で編集・削除できません。

0/2000

読み込み中...