フロントエンド - CSS・スタイリング

CSS Grid しーえすえす ぐりっど

グリッドレイアウトFlexboxレイアウトレスポンシブデザインgrid-templateフロントエンド
CSS Gridについて教えて

簡単に言うとこんな感じ!

Webページのレイアウトを「方眼紙」みたいに縦横のマス目で組む仕組みだよ!「左に画像・右に文章・下に関連記事を3列で」みたいな複雑な配置も、CSSの数行でスパッと書けちゃうんだ!


CSS Gridとは

CSS Grid(CSSグリッドレイアウト) は、Webページの要素を縦(行)と横(列)の二次元グリッド上に配置するためのCSSのレイアウト機能です。方眼紙にパーツを貼り付けるイメージで、画面全体の骨格を直感的に設計できます。

従来のWebレイアウトはfloat(フロート)やtableタグを駆使するなど、回り道が多くありました。2017年ごろに主要ブラウザが一斉対応したCSS Gridにより、複雑な2次元レイアウトをシンプルなCSS宣言だけで実現できるようになりました。特に「ヘッダー・サイドバー・メインコンテンツ・フッター」のような定番構成は、数行のコードで組めるのが大きな魅力です。

システム発注の現場では、制作会社から「グリッドで組んでいる」と聞いたら「縦横のマス目ベースで構造化されたレイアウト設計をしている」と理解するとよいでしょう。レスポンシブ対応(スマホ・PC両対応)との相性も良く、現代のフロントエンド開発では標準的な技術となっています。


CSS Gridの基本構造と仕組み

CSS Gridは「グリッドコンテナー(親要素)」と「グリッドアイテム(子要素)」の関係で成り立っています。

概念役割例え
グリッドコンテナーグリッド全体の器方眼紙そのもの
グリッドアイテム配置される各パーツ方眼紙に貼るシール
グリッドライン行・列を区切る線方眼紙の罫線
グリッドトラック行または列のひとかたまり方眼紙の1行・1列
グリッドセル行と列が交差する1マス方眼紙の1マス
グリッドエリア複数セルをまたぐ領域シールが複数マスを覆う状態

代表的なプロパティと使い方をまとめると次のとおりです。

プロパティ説明使用例
display: gridグリッドコンテナーを宣言親要素に設定
grid-template-columns列の数と幅を定義repeat(3, 1fr) で3等分
grid-template-rows行の数と高さを定義100px auto 60px
grid-template-areasエリアに名前をつけて配置"header header"
gapセル間の余白gap: 16px
grid-columnアイテムの列方向スパンgrid-column: 1 / 3
grid-rowアイテムの行方向スパンgrid-row: 2 / 4

覚え方:「グリッドは方眼紙、frはフレキシブルな分け前」

列幅などで使う fr(フラクション) という単位が最初は戸惑いポイントです。「fr = fraction(分数・分け前)」と覚えておくと、1fr 2fr 1fr は「4等分して左1・中2・右1の比率で分ける」とすぐ読めるようになりますよ。

grid-template-areasで「絵で描くレイアウト」

.container {
  display: grid;
  grid-template-columns: 200px 1fr;
  grid-template-rows: 60px 1fr 50px;
  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; }

エリア名を ASCII アートのように並べるだけで、ビジュアル通りに配置される、直感的な記法です。


歴史と背景

  • 1996年 — Bert BosとHåkon Wium Lieがグリッドレイアウト構想を提案。当時は実現されず
  • 2011年 — MicrosoftがIE10向けに独自実装-ms-grid)。実験的に先行搭載
  • 2012年 — W3CがCSS Grid Layout仕様の草案を公開
  • 2017年3月Chrome・Firefox・Safariが相次いでCSS Gridを正式サポート。一気に実用段階へ
  • 2017年10月 — Edgeも対応。主要ブラウザ全揃いとなり業界標準として普及開始
  • 2020年代Flexboxと並ぶ「2大レイアウト技術」として定着。各種デザインシステムでデフォルト採用

CSS GridとFlexboxの使い分け

CSS Gridと並んでよく使われる Flexbox(フレックスボックス) との違いは「1次元 vs 2次元」に集約されます。

CSS Grid vs Flexbox — 守備範囲の違い CSS Grid(二次元) 行と列を同時にコントロール header header(結合) side main content footer(全列結合) Flexbox(一次元) 行か列、どちらか一方向を整列 item1 item2 item3 ← 横一列に並べる(主軸)→ ↕ 縦揃えは副軸で調整 ↕ Grid:複雑な全体レイアウト向き Flexbox:ナビ・カード列など1方向整列向き
比較項目CSS GridFlexbox
次元二次元(行+列)一次元(行か列)
得意なことページ全体の骨格レイアウトナビバー・カード列・ボタン並び
配置の主導権コンテナー側が決めるアイテム側のサイズに左右されやすい
ブラウザ対応IE11以降(部分対応)IE10以降
覚えにくさやや多いプロパティ比較的シンプル

実務では 「大枠のページ構成→Grid、部品の中の並び→Flexbox」 と使い分けるのが定番です。


関連する規格・RFC

規格内容
CSS Grid Layout Module Level 1(W3C)CSS Gridの基本仕様。W3C勧告(Recommendation)として公式化
CSS Grid Layout Module Level 2(W3C)サブグリッド(subgrid)など発展機能を追加した次世代仕様
CSS Flexible Box Layout Module Level 1(W3C)Flexboxの公式仕様。Gridと並ぶ主軸レイアウト規格

関連用語

  • Flexbox — 一次元(横or縦)方向の要素整列を担うCSSレイアウト機能
  • レスポンシブデザイン — 画面サイズに応じてレイアウトを自動調整するデザイン手法
  • CSS — Webページの見た目・スタイルを定義するスタイルシート言語
  • メディアクエリ — 画面幅などの条件でCSSを切り替えるための記法
  • フロントエンド — ユーザーが直接見る・操作するWeb側の領域全般
  • HTML — Webページの構造・骨格を定義するマークアップ言語
  • デザインシステム — UIコンポーネントやスタイルのルールを一元管理する仕組み