CSSグリッドはCSSで最も強力なレイアウトシステムですが、グリッドプロパティを手書きするのは面倒です——カラム数、ギャップサイズ、名前付きテンプレートエリアを繰り返し調整するときは特に。CSSグリッドジェネレーターを使えば、レイアウトを視覚的に設定して必要なCSSをそのままコピーできます。

CSSグリッドジェネレーターを試す →

CSSグリッドの仕組み

CSSグリッドはコンテナを2次元レイアウトシステムに変えます。Flexbox(単一軸でアイテムを並べる)と異なり、グリッドは行と列の両方を同時に明示的に制御できます。

.container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: auto;
  gap: 1.5rem;
}

これで3カラムのグリッドが作成され、各カラムが利用可能な幅を均等に分割し、セル間に1.5remのギャップが入ります。

グリッドの主要プロパティ

grid-template-columnsgrid-template-rows

グリッドのトラック構造を定義します。よく使うパターン:

パターンCSS結果
均等カラムrepeat(3, 1fr)3等幅カラム
固定+流動240px 1frサイドバー+メインコンテンツ
名前付きエリア[sidebar] 240px [main] 1fr名前付きカラムトラック
自動充填repeat(auto-fill, minmax(200px, 1fr))レスポンシブカードグリッド
混合単位200px 1fr 2fr固定+流動2カラム

gap(旧 grid-gap

トラック間のスペースを制御します。行と列のギャップを個別に設定できます:

gap: 1rem;           /* 両方向に同じギャップ */
gap: 1rem 2rem;      /* row-gap column-gap */
row-gap: 1rem;
column-gap: 2rem;

grid-columngrid-row

グリッド内でアイテムを明示的に配置:

.hero {
  grid-column: 1 / -1;   /* 全幅にスパン */
  grid-row: 1 / 3;       /* 2行にスパン */
}

.sidebar {
  grid-column: 1;
  grid-row: 2 / 5;
}

.main {
  grid-column: 2 / -1;
  grid-row: 2 / 5;
}

-1 は最後のグリッドラインを指すため、1 / -1 はカラム数に関わらず常に全幅になります。

grid-template-areas

名前付きエリアで複雑なレイアウトを可読に:

.layout {
  display: grid;
  grid-template-columns: 240px 1fr;
  grid-template-rows: 60px 1fr 40px;
  grid-template-areas:
    "header  header"
    "sidebar main"
    "footer  footer";
}

.header  { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main    { grid-area: main; }
.footer  { grid-area: footer; }

grid-template-areas の各文字列は1行を表します。同じ名前を繰り返すと複数セルにスパンします。. は空セルを表します。

よく使うグリッドパターン

カードグリッド(自動レスポンシブ)

最も一般的なユースケース:メディアクエリなしで利用可能スペースを埋め自然に折り返すカードグリッド。

.card-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 1.5rem;
}

auto-fill は収まる限りカラムを生成します。minmax(280px, 1fr) で各カードは最小280px幅を保ちながら利用可能スペースに拡張します。

ホーリーグレイルレイアウト

ヘッダーとフッター付きの古典的な3カラムレイアウト:

.page {
  display: grid;
  grid-template-columns: 200px 1fr 160px;
  grid-template-rows: auto 1fr auto;
  grid-template-areas:
    "header  header  header"
    "nav     main    aside"
    "footer  footer  footer";
  min-height: 100vh;
}

メイソンリー風グリッド

真のメイソンリーにはJavaScriptが必要ですが、近似できます:

.masonry {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-auto-rows: 10px;
  gap: 10px;
}

/* 各アイテムはコンテンツの高さに応じて行をスパン */
.item { grid-row-end: span 20; }    /* 短い */
.item.tall { grid-row-end: span 35; } /* 長い */

ダッシュボードグリッド

.dashboard {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  gap: 1rem;
}

.widget-full    { grid-column: span 12; }
.widget-half    { grid-column: span 6; }
.widget-third   { grid-column: span 4; }
.widget-quarter { grid-column: span 3; }

グリッドレイアウトをレスポンシブにする

メディアクエリを使う方法

.grid {
  display: grid;
  grid-template-columns: 1fr;          /* モバイルは1カラム */
  gap: 1rem;
}

@media (min-width: 640px) {
  .grid { grid-template-columns: repeat(2, 1fr); }
}

@media (min-width: 1024px) {
  .grid { grid-template-columns: repeat(4, 1fr); }
}

auto-fill + minmax(メディアクエリなし)

.grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 280px), 1fr));
  gap: 1rem;
}

min(100%, 280px) は非常に狭い画面でのオーバーフローを防ぎます——minmax のよくある落とし穴です。

名前付きエリア+メディアクエリ

.layout {
  display: grid;
  grid-template-areas:
    "header"
    "main"
    "sidebar"
    "footer";
}

@media (min-width: 768px) {
  .layout {
    grid-template-columns: 1fr 300px;
    grid-template-areas:
      "header  header"
      "main    sidebar"
      "footer  footer";
  }
}

グリッドとFlexbox:使い分け

どちらも現代的なレイアウトツールです。区別はシンプルです:

  • グリッド:2次元レイアウト。行と列の両方を制御。ページ構造、ダッシュボード、カードグリッド、フォームレイアウトに使います。
  • Flexbox:1次元。アイテムは単一軸に沿って並びます。ナビゲーションバー、ボタングループ、単一要素のセンタリング、行内のアイテム整列に使います。

組み合わせても機能します——グリッドレイアウトの中にFlexコンテナを入れることも、その逆も可能です。

グリッドレイアウトのデバッグ

Chrome、Firefox、EdgeはすべてDevToolsにグリッドインスペクターを内蔵しています。Elementsパネルでグリッドコンテナの横にある grid バッジをクリックすると、グリッドラインがページ上に重ねて表示され、カラム/行番号とギャップが確認できます。

FirefoxのGridインスペクターは特に強力で、名前付きエリアのハイライトと複数の同時グリッドオーバーレイをサポートしています。

CSSグリッドジェネレーターを使う

複雑なレイアウトで grid-template-columnsgrid-template-rowsgap の値を手動で設定するのは試行錯誤になりがちです。CSSグリッドジェネレーターなら:

  • カラム数と行数を視覚的に設定
  • ドラッグでトラックサイズを調整
  • frpx%auto 単位を切り替え
  • 完全なCSSブロックをコピーしてすぐに貼り付け

CSSグリッドジェネレーターを試す →