【CSS】grid-template-areasでレイアウトを直感的に設計する方法

【CSS】grid-template-areasでレイアウトを直感的に設計する方法 HTML/CSS

CSS Gridを使うと複雑なレイアウトをシンプルに記述できます。その中でもgrid-template-areasは、レイアウトを視覚的に設計できる便利なプロパティです。領域名を文字列で定義し、それを要素に割り当てるだけで、直感的にページ構造を構築できます。

grid-template-areasの基本構文

grid-template-areasでは、グリッドの各セルに名前を付け、文字列で並べてレイアウトを表現します。

.container {
  display: grid;
  grid-template-columns: 200px 1fr;
  grid-template-rows: auto 1fr auto;
  grid-template-areas:
    "header header"
    "sidebar main"
    "footer footer";
}

HTML構造とエリアの割り当て

定義したエリア名をgrid-areaで要素に割り当てます。以下の例ではヘッダー、サイドバー、メインコンテンツ、フッターを直感的に配置できます。

<div class="container">
  <header class="header">ヘッダー</header>
  <aside class="sidebar">サイドバー</aside>
  <main class="main">メインコンテンツ</main>
  <footer class="footer">フッター</footer>
</div>

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

レスポンシブ対応の切り替え

メディアクエリを使えば、モバイル時にレイアウトを縦並びに変えることも簡単です。

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

空白セルの扱い

空白を作りたい場所はピリオド(.)を使います。例えば、左右に余白を確保し中央にメインを置く場合は以下のように書けます。

.container {
  display: grid;
  grid-template-columns: 1fr 600px 1fr;
  grid-template-areas:
    ". main .";
}
.main { grid-area: main; }

まとめ

grid-template-areasを使うと、コードがレイアウト図のように見えるため、チーム開発やデザインとのすり合わせにも有効です。セマンティックにエリア名を付ければ可読性が上がり、レスポンシブ対応も容易になります。直感的に構造を把握できるこの方法を活用すれば、CSS Gridによるレイアウト設計がより快適になります。