CSS Grid を使って、ヘッダーのレイアウトをわかりやすく整理する方法を解説します。
ヘッダーにはロゴ・メニュー・CTAボタンなど多くの要素があり、見やすさや使いやすさを左右する重要なパートです。
しかし、ボタンの位置調整が難しかったり、レイアウトが2段構成になったりと、初心者ほど悩みやすい部分でもあります。
そこで本記事では、Grid を使ってヘッダーをスッキリ配置する考え方から、実際のコード例まで紹介します!
FimgaのデータやAIのプロンプトも公開しています。コーディングの練習にもどうぞ。
今回作成するレイアウトはこちら
SP版

PC版

Figmaのデータはこちら
\HTML・CSSの基本を学ぶならこちら/
目次
全体の構造を考える

最初に、全体がどうまとまっているかを見ていきます。
子要素を赤で囲んでいき、HTMLの目星をつけます。
SPはロゴとハンバーガーメニューのため、シンプルにすみそうですね。
どんな要素があるのかわかったら、マス目状に分けられるかを考えます。
SPデザインは1×2

PCデザインは2×3

それぞれ分けることが出来そうです。
構造を考えることが出来たので、HTMLを組んでいきます。
HTMLを組む

HTMLの構造を考えます。
SPとPCで大きく違うため、SPのheaderとPCのheaderをわけて作ります。
PCのデザインを中心にグリッドを活かして構築していきましょう。
SPのHTML
<header class="header">
<div class="header-inner">
<div class="header-logo"><img src="/assets/img/logo.png" alt="" /></div>
<button class="header-button">
<span class="menu-bar"></span>
<span class="menu-bar"></span>
<span class="menu-bar"></span>
</button>
</div>
</header>ヘッダータグの中に、グリッドを作るためのheader-innerで要素を囲います。
ヘッダータグはposition:stickyをつけたり、背景色をつけたりします。
ロゴとハンバーガーメニュー(ボタン)の2つだけなので、構造はとてもシンプルです。
SPのHTML構造
- header-inner
- header-logo
- header-button
PCのHTML
<header class="header-pc">
<div class="header-pc__inner">
<div class="header-pc__logo">
<img src="./assets/img/logo.png" alt="サイトロゴ" />
</div>
<div class="header-pc__tel">
<span class="tel-label">TEL</span>
<p class="tel-number">0120-000-000</p>
</div>
<a href="#" class="header-pc__contact">
<img src="/assets/img/mail-icon.svg" alt="" class="contact-icon" />
<span class="contact-text">メールでご相談</span>
</a>
<nav class="header-pc__nav">
<ul class="header-pc__menu">
<li class="menu-item"><a href="">メニュー</a></li>
<li class="menu-item"><a href="">メニュー</a></li>
<li class="menu-item"><a href="">メニュー</a></li>
<li class="menu-item"><a href="">メニュー</a></li>
<li class="menu-item"><a href="">メニュー</a></li>
<li class="menu-item"><a href="">メニュー</a></li>
</ul>
</nav>
</div>
</header>構造が違うのでSPのヘッダーとは別に作ります。
ヘッダータグ直下にグリッドのためのdivを作るのは同じ。
子要素が多く、それぞれの役割も異なるため、innerの直下に必要な要素を4つまとめて配置します。
PCのHTML構造
- header-pc__inner
- header-pc__logo
- header-pc__tel
- header-pc__contact
- header-pc__nav
上にあげた要素をグリッドレイアウトで調整していきます。
CSS gridを作る
ヘッダータグに直接グリッドをつけると調整がメンドクサイので直下にグリッド用のdivタグを作っておきます。
なるべくタグやクラスには一つの役割だけにしておくと後々の調整が楽になるのでinnerを設置しておきましょう。
SPのCSS

グリッドレイアウトのCSSはこうなります。
.header-inner {
display: grid;
grid-template-columns: 1fr auto;
}grid-template-columns: 1fr auto;で横方向に2カラムを指定しています。
縦方向には1列ですので指定はしません。要素も少なくシンプルですね。
レイアウトよりアニメーションが問題になるかもしれません。
PCのCSS

4つの要素をバラバラに配置します。

上記のイメージで分けるためにジェネレーターを使います。CSS Grid Generator

gridコンテナを作るだけでは配置位置までは決まらないため、必要に応じて子要素側に位置指定のプロパティを追加します。
*グリッドレイアウトに関わるプロパティを中心に載せています
.header-pc__inner {
max-width: 1200px;
margin: 0 auto;
display: grid;
grid-template-columns: 200px auto auto ;
gap: 16px;
}
.header-pc__logo{
grid-row: span 2 / span 2;
}
.header-pc__nav {
grid-column: span 2 / span 2;
grid-column-start: 2;
}grid-template-columnsで、ロゴのサイズを固定化して配置できるのが便利です。
200px auto autoとありますが、一番左の枠は固定幅(200px)にできるため、レイアウトが安定して理解しやすくなります。
グリッドのプロパティが難しいと感じる方は、この記事を参照してください。
AIに作ってもらう

最近はAIの進化が止まりませんね。ちょっとしたコーディングならすぐにできてしまいます。
AIに今回のレイアウトを実践してもらうためには、以下のようなプロンプトを使うといいです。
HTMLがわからない初心者でも、このプロンプトを使えばAIが構造から生成してくれます。
プロンプトとデザイン画像を貼り付けましょう。
▼プロンプトコピペ用▼
あなたはプロのWebフロントエンドエンジニアとして振る舞ってください。
これから1枚のデザイン画像を渡します。この画像をもとに、
完全にHTML+CSSで再現したコードを作ってください。
【求めるアウトプット】
1. 画像から読み取れる要素を分解し、セクション構造(見出し・画像・ボタン・ナビなど)を説明
2. その構造に沿ってセマンティックなHTMLを生成
- header / nav / main / footer / section / article など適切に使用
3. スタイルはすべてCSSで記述
- Gridを優先的に使う
- Flexも必要に応じて使用
- 余白・フォントサイズ・色など画像から推測して設定
4. レスポンシブCSSを作成(スマホ → PC の順で)
- 768pxで切り替え
5. 可能であればデザインの補足説明(実装時の注意ポイントなど)
【追加ルール】
・画像以外の前提は勝手に決めない(推測が必要な場合は“推測”と明記)
・CSSはそのままコピペで動く形にする
・必要ならSVGアイコンも生成
・HTML/CSS以外は出力しない
【参考画像】
(ここに画像を添付)ただ、大枠のデザインは出来上がりますが、細かい調整は必要になってきます。
HTMLを自身で考えて組むことが出来たらやりやすいと思います。
まとめ:グリッドでヘッダーレイアウトを作る

グリッドレイアウトを使用してヘッダーを作成しました。
SPのデザインはシンプルで良いのですが、ヘッダーが2段になっていたりすると構造を考える必要がありますね。
グリッドを使ったヘッダーレイアウト
- デザインをみて、何を分割するかを確認する
<header>に直接display:gridを指定しない- ロゴは固定サイズのことが多いので、グリッドのプロパティで固定してしまう
メニューやボタン等、1行で済むようなものはflexのほうがわかりやすくて便利です。
グリッドにこだわる必要はありません。
グリッドレイアウトが便利なのはレスポンシブに強かったり、分割したサイズを調整しやすいところです。
ロゴの配置を調整できるだけでも便利ですよ!
最後までご覧いただきありがとうございました。
