「スクロールしてもヘッダーが上に残るようにしたい」「ナビゲーションメニューをいつでも押せる状態にしたい」——WordPressサイトを作っていると、こうした要望に必ず一度はぶつかります。
実はこの「ヘッダー固定(フィックスド)表示」、テーマの設定だけで済む場合もあれば、CSSを書く必要がある場合もあり、やり方を間違えると本文がヘッダーの下に隠れてしまうという初心者がよくつまずく落とし穴もあります。
この記事では、WordPressでヘッダーを固定表示にする方法を、テーマの設定機能を使う方法と追加CSSで対応する方法の両方から解説します。
コピペで使えるCSSサンプルと、固定後によく起きる「コンテンツが隠れる」「モバイルで崩れる」といった不具合の直し方も合わせて紹介します。
ヘッダー固定表示のメリット・デメリット
ヘッダーを固定する前に、メリットとデメリットの両方を把握しておくと、自分のサイトに合うかどうかを判断しやすくなります。
メリット
- ページのどこを読んでいても、メニューやロゴへすぐアクセスできる
- お問い合わせ・購入ボタンなどのCTAを常時表示でき、行動を促しやすい
- 長いランディングページや記事ページで、迷子になりにくい
デメリット
- スマートフォンなど画面が小さい端末では、表示領域が狭くなる
- 本文の見出しがヘッダーの下に隠れてしまう不具合が起きやすい
- ヘッダーの高さが大きいデザインでは、窮屈な印象になりやすい
WordPressでヘッダーを固定表示にする2つの方法
実装方法は大きく2つに分かれます。どちらを選ぶべきかは、使用しているテーマに固定ヘッダー機能があるかどうかで決まります。
| 方法 | 向いているケース | メンテナンス性 |
|---|---|---|
| ① テーマの設定機能を使う | テーマに固定ヘッダーのオプションがある場合 | 高い(テーマ更新に追従しやすい) |
| ② 追加CSSで固定する | テーマに機能がない、または細かく調整したい場合 | 中(CSSの管理が必要) |
まずは自分のテーマのカスタマイザーに「ヘッダー固定」「Sticky Header」のような設定項目がないか確認しましょう。なければ、次の章で紹介する追加CSSの方法に進んでください。
追加CSSでヘッダーを固定表示にする手順
テーマに専用機能がない場合は、CSSのposition: fixed;を使ってヘッダーを固定します。以下の手順で進めてください。
- CSSを書く場所を決める
「外観 → カスタマイズ → 追加CSS」を使うのが最も手軽です。テーマファイルを直接編集する場合は、必ず子テーマ(チャイルドテーマ)の
style.cssに記述してください。親テーマを直接編集すると、テーマ更新時にすべての変更が消えてしまいます。 - ヘッダーのクラス名を確認する
ヘッダー部分を右クリックして「検証」(ブラウザの開発者ツール)を開き、ヘッダー全体を囲んでいる要素の
classまたはidを確認します。多くのテーマではheader、.site-header、#mastheadのような名前になっています。
Apuraテーマの場合、開発者ツールで確認すると次のような構造になっています。この記事のCSSサンプルで使っている
.site-headerは、<header>タグに付与されたクラス名です。<!-- ブラウザの開発者ツールで見えるHTML(出力例) --> <header id="masthead" class="site-header"> <div class="header-inner"> <!-- ① ロゴ・サイト名エリア --> <div class="site-branding"> <a href="https://example.com/" class="custom-logo-link" rel="home"> <img src="logo.png" class="custom-logo" alt="サイト名" /> </a> </div> <!-- ② グローバルナビゲーション --> <nav id="site-navigation" class="main-navigation" aria-label="グローバルメニュー"> <ul class="nav-menu"> <li><a href="/about/">About</a></li> <li><a href="/contact/">Contact</a></li> </ul> </nav> </div><!-- .header-inner --> </header><!-- #masthead -->上記のHTMLを出力している
header.phpの該当部分は次のとおりです。子テーマでクラス名を変更したい場合や、独自のヘッダー要素を追加したい場合の参考にしてください。<!-- header.php(Apuraテーマ・該当部分の抜粋) --> <header id="masthead" class="site-header"> <div class="header-inner"> <!-- ① ロゴ・サイト名 --> <div class="site-branding"> <?php if ( has_custom_logo() ) : ?> <a href="<?php echo esc_url( home_url( '/' ) ); ?>" class="custom-logo-link" rel="home"> <?php the_custom_logo(); ?> </a> <?php else : ?> <p class="site-title"> <a href="<?php echo esc_url( home_url( '/' ) ); ?>" rel="home"> <?php bloginfo( 'name' ); ?> </a> </p> <?php endif; ?> </div><!-- .site-branding --> <!-- ② グローバルナビゲーション --> <nav id="site-navigation" class="main-navigation" aria-label="<?php esc_attr_e( 'グローバルメニュー', 'apura' ); ?>"> <?php wp_nav_menu( [ 'theme_location' => 'primary', 'menu_class' => 'nav-menu', 'container' => false, ] ); ?> </nav><!-- #site-navigation --> </div><!-- .header-inner --> </header><!-- #masthead --> - 固定用CSSを追加する
確認したクラス名に合わせて、以下のCSSを書き換えて追加します。
.site-headerの部分は実際のクラス名に置き換えてください。.site-header { position: fixed; top: 0; left: 0; width: 100%; z-index: 999; } /* ヘッダーの高さ分だけ本文を下にずらし、コンテンツが隠れるのを防ぐ */ body { padding-top: 80px; /* ヘッダーの実際の高さに合わせて調整 */ } - 表示を確認・調整する
保存後、ページをスクロールしてヘッダーが上部に固定されているか確認します。
padding-topの数値は、ヘッダーの実際の高さ(開発者ツールで確認できます)にぴったり合わせるとズレがなくなります。スマートフォン表示も忘れずに確認してください。
よくある不具合と対処法
本文の見出しがヘッダーの下に隠れる
これは最も多いトラブルです。
position: fixedにした要素は通常の文書の流れから外れるため、その分の高さをpadding-topやmargin-topで補ってあげる必要があります。
さらに、ページ内リンク(目次やアンカーリンク)を使っている場合は、スクロール先がヘッダーの下に隠れることもあるので、以下のCSSも合わせて追加すると改善します。
/* アンカーリンクの飛び先がヘッダーに隠れないようにする */
h2, h3, h4 {
scroll-margin-top: 90px; /* ヘッダーの高さ+余白 */
}
スマートフォンでヘッダーが大きすぎる・崩れる
PCでは問題なくても、スマートフォンではヘッダーが画面の多くを占めてしまうことがあります。メディアクエリで、画面幅に応じてヘッダーの高さやフォントサイズを縮小しましょう。
@media (max-width: 600px) {
.site-header {
height: 56px;
}
body {
padding-top: 56px;
}
}
他の固定要素(メニューバーや通知バー)と重なる
固定表示のお知らせバーや管理者バーなど、他にもposition: fixedの要素がある場合は、z-indexの数値を見直して重なり順を整理してください。数値が大きいほど手前に表示されます。
テーマ側に固定ヘッダー機能がある場合
CSSを自分で書きたくない場合や、表示の崩れを気にせず安全に設定したい場合は、固定ヘッダー機能をあらかじめ備えたテーマを使うのも一つの選択肢です。
ApuraPro(有料)では、カスタマイザーの設定からヘッダーの固定表示・スクロール時の挙動(縮小表示など)を切り替えられるため、CSSを書かずに見出しの隠れやモバイルでの崩れを気にせず設定できます。
すでにCSSで固定ヘッダーを実装していて、メンテナンスに手間がかかっていると感じる場合は、テーマ標準機能への切り替えも検討してみてください。
まとめ
ヘッダーの固定表示は、まずテーマに専用機能がないか確認し、なければposition: fixedとpadding-topのセットで実装すると安心です。
固定後は「コンテンツが隠れていないか」「スマートフォンで崩れていないか」を必ずチェックし、必要に応じてscroll-margin-topやz-indexで微調整しましょう。
