CSS Gridジェネレーター

grid-template-columns/rows・justify-items・align-items・gapをGUIで操作しながら、リアルタイムのプレビューを見てCSS Gridレイアウトを試せる無料ツール。生成されたCSSコードはワンクリックでコピー可能。

使い方のヒント

  • grid-template-columns: repeat(3, 1fr)のfr単位は「残りスペースを分け合う比率」を表し、pxのような固定値と違って画面幅が変わっても列の比率が保たれます。
  • gapプロパティは行間・列間の余白のみに適用され、marginと違ってグリッドの外側には影響しません。行と列で別の余白(row-gap/column-gap)を指定することも可能です。
  • 「auto」モードのトラックはコンテンツの実際のサイズに合わせて伸縮するため、画像やテキスト量が不定な列・行に向いています。
  • grid-column: span 2のようなアイテム個別のspan指定を使うと、ヘッダーやフッターだけをグリッド全幅に広げるレイアウトが簡単に作れます。
  • 複雑な格子状の配置が必要な場合はGrid、ナビゲーションバーのような1方向の並びで十分な場合はFlexboxが適しています(CSS Flexboxジェネレーターも参照)。

よくある質問

行と列の両方を同時にコントロールしたい2次元レイアウト(ページ全体の骨格やダッシュボードなど)にはCSS Gridが適しています。一方、ナビゲーションバーやカードの横並びのように「1方向(行または列)の並び」だけで十分な場合はFlexboxの方がシンプルに書けます。両方を組み合わせて、ページ全体はGrid、コンポーネント内部はFlexboxという使い分けもよく行われます。

frは「fraction(割合)」の略で、コンテナ内の余った空間を指定した比率で分配する単位です。例えばgrid-template-columns: 1fr 2frと指定すると、2列目が1列目の2倍の幅になるよう余白が分配されます。pxのような絶対値と違い、画面サイズが変わっても比率を保ったまま伸縮するのが特徴です。

repeat()は同じパターンのトラックを繰り返し指定するための関数で、repeat(3, 1fr)はgrid-template-columns: 1fr 1fr 1frと書くのと同じ意味になります。列数が多い場合や動的に変わる場合でも、繰り返し回数とトラックサイズの2つの引数だけで簡潔に記述できます。

ホーリーグレイル(聖杯)レイアウトとは、ヘッダー・サイドバー・メインコンテンツ・フッターを組み合わせた、Webデザインで古くから定番とされる画面構成のことです。CSS Grid以前はfloatやテーブルタグを使った複雑な実装が必要でしたが、Gridのgrid-template-areas等を使うことで少ないコードで再現できるようになりました。

grid-column: span Nは、そのアイテムを横方向にN個分のトラック(列)にまたがって配置するプロパティです。例えばヘッダー要素だけをgrid-column: span 3として全列にまたがせることで、他のアイテムは通常のセルに収まりつつヘッダーだけを全幅表示するレイアウトが作れます(grid-rowにも同様にspanを指定できます)。
ツールくん

余談ですが ― Flexboxとは異なる「2次元」を目指したCSS Grid

CSS Grid Layout(正式名称: CSS Grid Layout Module)は、Flexboxが「1方向(行または列)の並び」に特化しているのに対し、行と列を同時に定義できる2次元のレイアウトシステムとして設計されました。W3Cでの標準化は2011年頃から進み、2017年にChrome・Firefox・Safari・Edgeの主要ブラウザで足並みを揃えて実装されたことで、実務での採用が一気に広がりました。

Grid登場以前、ページ全体を「ヘッダー・サイドバー・メインコンテンツ・フッター」という格子状に配置する、いわゆる「ホーリーグレイル(聖杯)レイアウト」は、floatやテーブルタグを使った複雑な回避策でしか実現できませんでした。CSS Gridはgrid-template-columns・grid-template-rows・grid-template-areasといった宣言的なプロパティにより、この定番レイアウトをわずか数行のCSSで組めるようにしました。

現在ではダッシュボードUIや画像ギャラリー、雑誌風のマガジンレイアウトなど、行と列を意識したデザインの多くがCSS Gridで実装されています。ネストしたグリッドの間で親のトラック幅を子が引き継げる「subgrid」も主要ブラウザで対応が進んでおり、より複雑なレイアウトの一貫性を保ちやすくなっています。

実務では「ページ全体の骨格はGrid、コンポーネント内部の要素の並びはFlexbox」という役割分担が定着しつつあります。両者は競合する技術ではなく、1次元の整列と2次元の格子配置という異なる得意分野を持つ補完的なツールであり、1つのページの中で両方を組み合わせて使うのがむしろ標準的な設計パターンとされています。