【CSS】ヘッダーを上部に固定し、スクロールで追従させる方法

【メイン画像】CSSを使って固定表示されるヘッダーの作り方

CSSプロパティposition: fixed;を使って、Webページの上部にヘッダーを固定し、画面をスクロールさせるとヘッダーがついてくる(ヘッダーが常時表示される)方法を紹介します。

実装例

スクロールできます。スクロールできます。

↓↓↓↓↓

スクロールできます。スクロールできます。

↓↓↓↓↓

スクロールできます。スクロールできます。

↓↓↓↓↓

スクロールできます。スクロールできます。

↓↓↓↓↓

スクロールできます。スクロールできます。

↓↓↓↓↓

スクロールできます。スクロールできます。

↓↓↓↓↓

スクロールできます。スクロールできます。

さらにJavaScriptを使った応用例として、スクロール時にフワッとヘッダーを表示させて追従させるという実装も。(こちらは別記事にて)

実装例(JavaScript 応用パターン)

スクロールできます。スクロールできます。

↓↓↓↓↓

スクロールできます。スクロールできます。

↓↓↓↓↓

スクロールできます。スクロールできます。

↓↓↓↓↓

スクロールできます。スクロールできます。

↓↓↓↓↓

スクロールできます。スクロールできます。

↓↓↓↓↓

スクロールできます。スクロールできます。

↓↓↓↓↓

スクロールできます。スクロールできます。

なお、同じようにサイドバーやフッターを固定(追従)させる方法については以下記事で紹介しています。

目次

固定表示ヘッダーの実装例とコード

本ページの上部に表示されているエリアが実装例です。

左側にロゴ(サイト名、他)を、右側にナビメニューを表示する領域を作りました。
また、ブラウザウィンドウのサイズに応じて、メニューの表示方法も変えてみました。

ウィンドウ幅デバイス表示内容
〜800pxスマホ、タッチパネルロゴ + ハンバーガーメニューを表示
801px〜PCロゴ + メニュー3つを横並び表示
ウィンドウサイズを変えて、確認してみてください。

ハンバーガーメニューついては以下記事にて詳しく紹介しています。


HTML / CSS コード

<!-- ヘッダー高さ分の余白   -->
<div class="header-box"></div>
<header>
  <div class="logo">仮ロゴ</div>
  <!-- PC用表示 -->
  <nav class="pc-menu">
    <ul>
      <li><a href="#">Menu 1</a></li>
      <li><a href="#">Menu 2</a></li>
      <li><a href="#">Menu 3</a></li>
    </ul>
  </nav>
  <!-- モバイル用表示 -->
  <div class="mobile-menu">
    <div class="line"></div>
    <div class="line"></div>
    <div class="line"></div>
  </div>
</header>

固定表示にはposition: fixed;を使う

特定の要素を、画面上の特定の位置に固定するには、CSSのposition: fixed;を使います!
これに加えて、画面上のどの位置に固定するかを「top」「left」「bottom」「right」を使って示します。

本実装例では、top: 0; left: 0;と指定しており、これは画面上端かつ左端に配置という意味になります。
width: 100%;を合わせて指定しているので、画面上端の左端から右端までheader要素が広がった状態で表示されています。

position: fixed;を使うと、他の要素が詰められて配置されて(ヘッダー要素の背面または正面に、他の要素が入り込んで)しまいます。画面をスクロールしていないときはヘッダー要素の領域はそのまま残しておきたいので、本例ではheader-boxクラスを付けた空のdiv要素を配置しておき、高さをヘッダー要素と同じにすることで対処しています。

ロゴとメニューを横並びレイアウトにするにはdisplay: flex;を使う

ロゴとメニューのレイアウトにはフレックスボックスを採用しています。
親要素にdisplay: flex;を適用することで、その子要素を横並びで表示したり、サイズや間隔を調整したりできるようになります。

詳しくは以下記事をご覧ください。

ウィンドウ幅に応じて表示を変えるにはメディアクエリを使う

ウィンドウ幅(画面サイズ)に応じた表示変更はメディアクエリ(@media)で対応します。
メディアクエリを使うと、特定のウィンドウ幅になったときにレイアウトや表示を自動的に切り替えることができるようになります。

詳しくは以下記事をご覧ください。

まとめと応用例

以上、ヘッダーを画面上部に固定し、スクロールしてもついてくる実装について紹介しました。
今回はヘッダーでしたが、「top」「left」「bottom」「right」の指定を変えることで、画面の好きな位置に要素を配置できます。いろいろな値を入れてみて、表示がどのように変わるかぜひ試してみてください。

なお、本記事ではハンバーガーメニュー(モバイル表示時)はアイコンのみで、クリックしても何も表示されません。
メニューも表示する方法は以下記事にて紹介していますので、ぜひ合わせてご覧ください。


当サイトで公開しているWebデザインやUIの実装例は、一覧として以下記事に纏めています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次