CSS Grid 生成

次へ

CSS Grid は2次元レイアウトを組む標準的な方法ですが、コンテナの構文は忘れがちです。このジェネレーターがコンテナルールを代わりに書きます。等幅の列を固定数、トラック間の余白、最小幅を下回ると auto-fit 列に切り替わるメディアクエリを生成するので、小さな画面でも読みやすいレイアウトが保てます。出力はコンテナCSSのみ。要素の配置はご自身のスタイルシートで行います。

グリッドの作り方

  1. 1

    列数を設定する

    等幅のトラックを1〜12個。

  2. 2

    列の最小幅を設定する

    この幅を下回ると auto-fit に切り替わり、各列が使える最小サイズを保ちます。

  3. 3

    余白を設定する

    列と行の間のスペース。

  4. 4

    CSSを生成する

    ツールがコンテナルールとレスポンシブ代替を書き出します。

  5. 5

    コードをコピーする

    コンテナルールをスタイルシートに貼り付け、要素はご自身の `grid-column` / `grid-row` ルールで配置します。

生成されるコンテナ

display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 16px;

@media (max-width: 660px) {
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
}
  • repeat(3, minmax(0, 1fr)): 利用可能な幅を均等に分ける3列。1fr は残りのスペースの1分画で、minmax(0, 1fr) は列がコンテンツサイズより小さく縮むのを許します。
  • gap: 各トラック間の余白。
  • メディアクエリは repeat(auto-fit, minmax(220px, 1fr)) に切り替わり、それぞれ220px以上の列を可能な限り作ります。ブレークポイントは列数×最小幅(120pxが下限)なので、小さな画面では列が圧縮されずに折り返されます。

fr 単位

fr は「残りのスペースの1分画」という意味です。固定サイズのトラックを差し引いた後、残りのスペースを fr 単位の合計数で割ります。

grid-template-columns: 200px 1fr 2fr;

1000px のコンテナでは、最初の列が200pxを占め、残りの800pxが1:2に分かれて267pxと533pxになります。

auto-fillauto-fit

  • auto-fill: アイテムが足りないとき、空のプレースホルダートラックを作ります。
  • auto-fit: 空のトラックをゼロに畳み、残りのアイテムが伸びて行を埋めます。

レスポンシブ代替はカードグリッドに適した auto-fit を使い、行がいつも埋まって見えます。

列幅を変える

ジェネレーターは等幅の列を出力します。サイズを混ぜたいときは結果を編集します: grid-template-columns: 200px 1fr 2fr; で固定サイドバーと1:2の可変2列になります。名前付きエリア(grid-template-areas)や明示配置(grid-column: 1 / 3)は、生成されたコンテナの上に手で追加します。

Grid と Flexbox

  • Grid: トラックによる明示的な2次元レイアウト。行と列の構造を持つレイアウト(ページの骨格、ギャラリー、ダッシュボード)に向きます。
  • Flexbox: 単一の軸に沿った1次元の整列。アイテムが自然に流れる場面(ナビバー、ボタンの並び)に向きます。

実際のレイアウトは通常両方を組み合わせます。ページの骨格に Grid、コンポーネント内に Flexbox です。

よくある落とし穴

  • 子要素の min-width: 0 を忘れる: グリッドアイテムはデフォルトでコンテンツの最小幅を使うため、fr 列が最長の単語より縮めません。子に min-width: 0 を指定して縮めるのを許しましょう。
  • display: grid なしで入れ子にする: グリッドの子は、自分で宣言しない限りグリッドにはなりません。

よくある質問

小さな画面でレイアウトを守ります。生成されたメディアクエリが repeat(auto-fit, minmax(幅, 1fr)) に切り替わり、各列はその幅を最低限保ち、グリッドは列を圧縮せずに行を増やします。

ジェネレーターは等幅の列を出力します。結果の grid-template-columns 行を編集してサイズを混ぜてください。例: 中央の列を広くする 1fr 2fr 1fr や、固定サイドバーの 200px 1fr

通常は、アイテムがデフォルトの min-width: auto(コンテンツの最小幅と同じ)を持っているためです。グリッドアイテムに min-width: 0 を指定するとセル内で縮めます。

行と列の両方の構造があるレイアウト(ページレイアウト、写真ギャラリー、ダッシュボード)には Grid。アイテムが1つの軸に沿って流れる場面(ナビバー、ボタンの並び、フォーム項目の縦積み)には Flexbox です。

関連ツール