HTMLでヘッダーを固定する5つの方法

初心者でもできるHTMLヘッダー固定方法HTML
この記事は約27分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればサンプルコードを活用して機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

HTMLでウェブページのヘッダーを固定する技術は、サイトのナビゲーションの利便性を向上させ、ユーザー体験を格段に高めることができます。

この記事では、その具体的な方法と実装例を、初心者でも理解しやすい形で順を追って解説していきます。

ヘッダーを固定することで、ページをスクロールしても常にアクセスしやすいナビゲーションを提供できるため、情報の検索効率が向上します。

●HTMLヘッダーの固定とは

ウェブページにおいてヘッダーを画面の上部に固定することは、訪問者がどのページにいても同じ操作性を保持できるため、非常に重要です。

これにより、ユーザーはページをスクロールしても、常にヘッダーを通じて他のページへ簡単にアクセスできるようになります。

特に長いページでは、この技術がユーザビリティを大きく改善します。

○固定ヘッダーの基本理解

ヘッダーをウェブページの上部に固定するための基本的な方法は、HTMLとCSSを使用することです。

HTMLでヘッダー部分を定義し、CSSでその位置を固定することで、スクロールしてもヘッダーが画面上部に留まるよう設定します。

まず、HTMLでヘッダー部分を下記のようにマークアップします。

<header>
  <h1>マイウェブサイト</h1>
  <nav>
    <ul>
      <li><a href="#home">ホーム</a></li>
      <li><a href="#about">私について</a></li>
      <li><a href="#services">サービス</a></li>
      <li><a href="#contact">連絡先</a></li>
    </ul>
  </nav>
</header>

次に、CSSを用いてヘッダーを固定します。

下記のCSSコードでは、position: fixed; プロパティを使用してヘッダーが常に上部に固定されるように設定し、ページの他の内容がヘッダーの下にスクロールするようになっています。

header {
  position: fixed;
  top: 0;
  width: 100%;
  background-color: #fff; /* 背景色は白に設定 */
  z-index: 1000; /* 他の要素より前面に表示 */
}

このCSSコードは、ヘッダーをページの最上部に固定し、スクロールしても常に見える状態を保持します。

このように設定することで、ユーザーがページ上でどの位置にいても、簡単にナビゲーションを利用でき、サイトの使い勝手が向上します。

●固定ヘッダーの作成方法

ウェブデザインにおいて固定ヘッダーの実装は、ユーザビリティの向上だけでなく、デザインの一貫性を保つ上でも重要な要素です。

ヘッダーを固定する方法には、CSSだけでなくJavaScriptやjQuery、さらにはBootstrapを使用した方法があります。

それぞれの技術を使った固定ヘッダーの作成方法を具体的に見ていきましょう。

○サンプルコード1:CSSを使用した基本的なヘッダー固定

先ほどの例では、シンプルなCSSを用いたヘッダーの固定方法を紹介しましたが、ここではさらに実用的な例を紹介します。

下記のHTMLとCSSコードは、ヘッダーをページ上部に固定し、その下にページコンテンツがスクロールするように設計されています。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>固定ヘッダーのサンプル</title>
<style>
  body, html {
    padding: 0;
    margin: 0;
  }
  header {
    background: #333;
    color: white;
    padding: 10px 20px;
    text-align: center;
    position: fixed;
    width: 100%;
    top: 0;
    left: 0;
  }
  main {
    margin-top: 60px;
    padding: 20px;
  }
</style>
</head>
<body>
<header>これは固定されたヘッダーです</header>
<main>
  <p>ここにページの主要なコンテンツが入ります。</p>
</main>
</body>
</html>

このコードでは、header タグを使用してページの上部に固定されるヘッダーを作成しています。

position: fixed; がキーポイントで、これによりヘッダーが常に上部に表示され続けるようになります。

○サンプルコード2:JavaScriptを活用した動的なヘッダー固定

静的なCSSだけでなく、JavaScriptを使用してヘッダーを動的に固定する方法もあります。

下記の例では、ユーザーがページをスクロールするとヘッダーが表示され、上にスクロールすると隠れるという動きを実現しています。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>動的な固定ヘッダーのサンプル</title>
<style>
  header {
    background: #333;
    color: white;
    padding: 10px 20px;
    width: 100%;
    position: fixed;
    top: -50px;
    transition: top 0.3s;
  }
</style>
<script>
window.onscroll = function() {
  var currentScrollPos = window.pageYOffset;
  document.getElementById("header").style.top = (currentScrollPos > 50 ? "0" : "-50px");
};
</script>
</head>
<body>
<header id="header">これは動的に表示されるヘッダーです</header>
<main>
  <p>スクロールしてヘッダーの動きを確認してください。</p>
</main>
</body>
</html>

JavaScriptのonscroll イベントを利用して、スクロール位置に基づいてヘッダーのtop プロパティを動的に変更しています。

これにより、スムーズなユーザー体験を提供することができます。

○サンプルコード3:jQueryを用いたスクロール追従型ヘッダー

jQueryを使った例も紹介します。

jQueryを使用すると、少ないコードで同様の動的な効果を簡単に実現することができます。

下記のコードは、ページをスクロールするとヘッダーが上から現れるようにするものです。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>jQuery固定ヘッダーのサンプル</title>
<style>
  header {
    display: none;
    background: #333;
    color: white;
    padding: 10px 20px;
    width: 100%;
    position: fixed;
    top: 0;
  }
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
  $(window).scroll(function() {
    if ($(this).scrollTop() > 100) {
      $('header').slideDown();
    } else {
      $('header').slideUp();
    }
  });
});
</script>
</head>
<body>
<header>これはスクロールに応じて表示されるヘッダーです</header>
<main>
  <p>スクロールしてヘッダーの表示を確認してください。</p>
</main>
</body>
</html>

このコードでは、jQueryのscroll() 関数を使用して、特定のスクロール位置でヘッダーをslideDown() または slideUp() で表示または非表示にしています。

○サンプルコード4:Bootstrapを使用したレスポンシブヘッダー固定

Bootstrapを使用すると、レスポンシブなデザインが簡単に実現できます。

Bootstrapのクラスを使用して、デバイスの画面サイズに応じて適切に表示される固定ヘッダーを作成することができます。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Bootstrap固定ヘッダーのサンプル</title>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
<style>
  .fixed-top {
    background-color: #333 !important;
  }
</style>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark fixed-top">
  <a class="navbar-brand" href="#">ナビゲーションバー</a>
  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>
  <div class="collapse navbar-collapse" id="navbarNav">
    <ul class="navbar-nav">
      <li class="nav-item active">
        <a class="nav-link" href="#">ホーム <span class="sr-only">(current)</span></a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">機能</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">価格</a>
      </li>
      <li class="nav-item">
        <a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">無効</a>
      </li>
    </ul>
  </div>
</nav>
<main style="padding-top: 80px;">
  <div class="container">
    <p>Bootstrapによるレスポンシブなナビゲーションバーの例です。</p>
  </div>
</main>
</body>
</html>

この例では、Bootstrapの.fixed-top クラスを使用して、ナビゲーションバーをページの上部に固定しています。

これにより、どのデバイスからアクセスしても、ヘッダーが適切に表示され、ユーザーにとって使いやすいインターフェースが提供されます。

○サンプルコード5:Advanced CSS技術でのヘッダー固定

最後に、Advanced CSS、特にCSS GridやFlexboxを利用したモダンなアプローチを紹介します。

これらの技術を使うことで、より複雑で動的なレイアウトのヘッダーも簡単に固定することが可能です。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Advanced CSS固定ヘッダーのサンプル</title>
<style>
  body, html {
    height: 100%;
    margin: 0;
  }
  .header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 10px 20px;
    background: #333;
    color: white;
    position: fixed;
    width: 100%;
    top: 0;
    z-index: 1000;
  }
  .main-content {
    padding: 60px 20px 20px;
    height: calc(100% - 80px); /* ヘッダーの高さを引いた残りの高さ */
    overflow-y: auto; /* コンテンツが多い場合はスクロール可能 */
  }
</style>
</head>
<body>
<div class="header">
  <div>ロゴまたはタイトル</div>
  <nav>
    <a href="#home">ホーム</a>
    <a href="#about">私について</a>
    <a href="#services">サービス</a>
    <a href="#contact">連絡先</a>
  </nav>
</div>
<div class="main-content">
  <p>ここに主要コンテンツが表示されます。FlexboxとCSS Gridを使った高度なレイアウト例です。</p>
</div>
</body>
</html>

このコードでは、display: flex; を使用してヘッダーエレメントの中のアイテムを水平に均等に配置しています。

Flexboxは特にレスポンシブなデザインに適しており、画面サイズに応じて要素の配置を自動で調整することができます。

また、.main-contentcalc() を使用して、ヘッダーの高さを動的に調整し、全画面の利用を最適化しています。

●ヘッダー固定時のよくあるエラーと対処法

ヘッダーを固定する際には、いくつかの一般的なエラーが発生する可能性があります。

これらの問題を解決するための対策を詳しく見ていきましょう。

ヘッダー固定の実装でよく遭遇する問題は、コンテンツの重なりやスクロール時のちらつきなどがあります。

これらの問題には、具体的な対処法が存在します。

○サンプルコード1:z-index問題の解決

ヘッダーと他の要素が重なってしまう問題は、CSSのz-indexプロパティを適切に設定することで解決できます。

このコードでは、ヘッダーが常に他の要素より前面に来るように設定されています。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>z-indexによる固定ヘッダーのサンプル</title>
<style>
  body, html {
    margin: 0;
    padding: 0;
    height: 100%;
  }
  header {
    background-color: #333;
    color: white;
    padding: 10px 20px;
    width: 100%;
    position: fixed;
    top: 0;
    left: 0;
    z-index: 1000; /* 他のコンテンツより高い値に設定 */
  }
  main {
    margin-top: 50px; /* ヘッダーの高さに応じて調整 */
    padding: 20px;
  }
</style>
</head>
<body>
<header>このヘッダーはページの最上部に固定されます</header>
<main>
  <p>この部分はヘッダーに隠れません。</p>
  <p>ページ内容を追加してスクロールを試してみてください。</p>
</main>
</body>
</html>

このコードでは、z-index1000に設定しています。

これにより、ヘッダーが他のページ内容より常に上に表示され、重なることなくクリアに表示されます。

○サンプルコード2:スクロール時のちらつき防止

スクロール時にヘッダーがちらつく問題は、ページの再描画が原因で起こります。

この問題を防ぐためには、ヘッダーのpositionプロパティをfixedに設定し、さらにtransformプロパティを使用することで改善できます。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>スクロール時のちらつき防止サンプル</title>
<style>
  header {
    background-color: #333;
    color: white;
    padding: 10px 20px;
    width: 100%;
    position: fixed;
    top: 0;
    left: 0;
    transform: translateZ(0); /* GPUアクセラレーションを利用 */
    z-index: 100; /* 必要に応じてz-indexを設定 */
  }
</style>
</head>
<body>
<header>このヘッダーはスクロールしてもちらつきません</header>
<main>
  <p>ここにページの主要なコンテンツが入ります。</p>
</main>
</body>
</html>

この例では、transform: translateZ(0); を使用しています。

これによりブラウザがGPUアクセラレーションを活用し、スクロール時のちらつきを減らすことができます。

これらのテクニックを適用することで、ヘッダーの固定がよりスムーズに、かつ視覚的にも快適に行えるようになります。

●ヘッダー固定の応用例

ヘッダー固定の技術は、ウェブサイトのナビゲーションを一層使いやすくするだけでなく、さまざまな応用が可能です。

ここでは、ナビゲーションメニューの統合や検索バーの追加、モバイルフレンドリーな設計まで、具体的な応用例として実装をご紹介します。

○サンプルコード1:ヘッダー内にナビゲーションメニューを含める

ヘッダーに直接ナビゲーションメニューを組み込むことで、ユーザーはどのページからでも容易にサイト内を移動できます。

下記のHTMLとCSSのコードは、ナビゲーションメニューを含む固定ヘッダーの一例を表しています。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ナビゲーション付き固定ヘッダー</title>
<style>
  body, html {
    margin: 0;
    padding: 0;
  }
  header {
    background-color: #333;
    color: white;
    padding: 10px 20px;
    position: fixed;
    width: 100%;
    top: 0;
  }
  nav ul {
    list-style: none;
    padding: 0;
  }
  nav ul li {
    display: inline;
    margin-right: 10px;
  }
</style>
</head>
<body>
<header>
  <nav>
    <ul>
      <li><a href="#home" style="color: white;">ホーム</a></li>
      <li><a href="#about" style="color: white;">私について</a></li>
      <li><a href="#services" style="color: white;">サービス</a></li>
      <li><a href="#contact" style="color: white;">連絡先</a></li>
    </ul>
  </nav>
</header>
<main style="padding-top: 50px;">
  <p>ここにサイトの内容が入ります。ヘッダーはスクロールしても常に表示されます。</p>
</main>
</body>
</html>

この設計では、ヘッダーがページの上部に固定され、ナビゲーションメニューが常にアクセス可能です。

これにより、サイトの使い勝手が大幅に向上します。

○サンプルコード2:ヘッダーに検索バーを組み込む

サイト内検索を容易にするために、ヘッダーに検索バーを組み込むこともできます。

下記の例では、固定ヘッダー内に検索フォームを配置しています。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>検索バー付き固定ヘッダー</title>
<style>
  header {
    background-color: #333;
    color: white;
    padding: 10px 20px;
    position: fixed;
    width: 100%;
    top: 0;
  }
  .search-container {
    text-align: right;
  }
</style>
</head>
<body>
<header>
  <div class="search-container">
    <form action="/search">
      <input type="text" placeholder="サイト内検索..." name="search">
      <button type="submit">検索</button>
    </form>
  </div>
</header>
<main style="padding-top: 60px;">
  <p>ここにサイトの内容が入ります。ヘッダーはスクロールしても常に表示されます。</p>
</main>
</body>
</html>

この検索バーを利用することで、ユーザーは任意のページから直接情報を検索できるため、サイトのナビゲーション効率が向上します。

○サンプルコード3:モバイルフレンドリーなヘッダー固定

モバイルデバイスに適したヘッダー設計も重要です。

下記のコードは、小さなスクリーンでも操作しやすいモバイルフレンドリーなヘッダーを実現しています。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>モバイルフレンドリーな固定ヘッダー</title>
<style>
  header {
    background-color: #333;
    color: white;
    padding: 10px 20px;
    position: fixed;
    width: 100%;
    top: 0;
  }
  .menu-icon {
    display: none;
    float: right;
    font-size: 30px;
  }
  @media (max-width: 600px) {
    .menu-icon {
      display: block;
    }
    nav ul {
      display: none;
    }
  }
</style>
</head>
<body>
<header>
  <span class="menu-icon">&#9776;</span>
  <nav>
    <ul>
      <li><a href="#home" style="color: white;">ホーム</a></li>
      <li><a href="#about" style="color: white;">私について</a></li>
      <li><a href="#services" style="color: white;">サービス</a></li>
      <li><a href="#contact" style="color: white;">連絡先</a></li>
    </ul>
  </nav>
</header>
<main style="padding-top: 50px;">
  <p>ここにサイトの内容が入ります。このヘッダーはモバイルデバイスに最適化されています。</p>
</main>
</body>
</html>

この設計では、画面の幅が600px以下になると、メニューアイコンが表示され、通常のナビゲーションメニューが非表示になります。

これにより、モバイルデバイスでの操作性が向上し、ユーザビリティが保たれます。

●エンジニアが知っておくべきHTMLヘッダー固定の豆知識

HTMLでヘッダーを固定する技術は、その便利さから多くのウェブサイトで採用されていますが、実装する際にはいくつかの豆知識を知っておくとより効果的に活用できます。

ここでは、特にパフォーマンスとSEOへの影響に焦点を当てて、ヘッダー固定の際のポイントを解説します。

○豆知識1:パフォーマンスへの影響

ヘッダーを固定する際、ページのパフォーマンスに影響を与える要素がいくつかあります。

特に、再描画やリフローを引き起こすCSSプロパティの使用は注意が必要です。

ここでは、パフォーマンスを保ちながらヘッダーを固定する方法のサンプルコードを紹介します。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>パフォーマンスに優れた固定ヘッダー</title>
<style>
  body, html {
    padding: 0;
    margin: 0;
    height: 100%;
    overflow-x: hidden; /* 横スクロールを防ぐ */
  }
  header {
    background-color: #000;
    color: white;
    padding: 10px 20px;
    position: fixed;
    width: 100%;
    top: 0;
    transform: translateZ(0); /* GPUアクセラレーションを活用 */
  }
  main {
    padding-top: 50px; /* ヘッダーの高さ分下にずらす */
  }
</style>
</head>
<body>
<header>これはパフォーマンスに優れた固定ヘッダーです</header>
<main>
  <p>ページのコンテンツがここに入ります。スクロールしてもヘッダーは固定されたままです。</p>
</main>
</body>
</html>

このコード例では、transform: translateZ(0)を使用してGPUアクセラレーションを活用し、パフォーマンスの低下を防いでいます。

また、overflow-x: hiddenを指定することで不必要な横スクロールバーが表示されるのを防ぎます。

○豆知識2:SEOへの影響

ヘッダーを固定することは、ユーザーエクスペリエンスを向上させる一方で、SEOにも影響を与える可能性があります。

固定ヘッダーがコンテンツの一部を覆い隠すと、特にモバイルデバイスでコンテンツが見えにくくなることがあります。

このような問題を防ぐためには、メディアクエリを使用してデバイスごとに適切なスタイリングを実装することが重要です。

ここでは、レスポンシブな固定ヘッダーのサンプルコードを見ていきましょう。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>SEOに配慮した固定ヘッダー</title>
<style>
  header {
    background-color: #000;
    color: white;
    padding: 10px 20px;
    position: fixed;
    width: 100%;
    top: 0;
    z-index: 1000;
  }
  @media (max-width: 600px) {
    header {
      padding: 5px 10px; /* モバイルではより小さなパディング */
    }
  }
  main {
    padding-top: 60px; /* ヘッダーの高さに合わせて調整 */
  }
</style>
</head>
<body>
<header>SEOに配慮した固定ヘッダーです</header>
<main>
  <p>このレイアウトは各デバイスに適応し、コンテンツが隠れることなく表示されます。</p>
</main>
</body>
</html>

この例では、メディアクエリを利用してモバイルデバイス用にヘッダーのスタイルを調整しています。

これにより、すべてのデバイスでコンテンツが正しく表示され、SEOの評価を損なうことがありません。

まとめ

この記事では、HTMLでヘッダーを効果的に固定する方法について、具体的なサンプルコードを交えながら解説しました。

固定ヘッダーはサイトのナビゲーションを向上させるだけでなく、ユーザビリティの向上にも寄与します。

パフォーマンスやSEOへの影響を最小限に抑えつつ、さまざまなデバイスに適応するレスポンシブな設計を行うことが重要です。

本記事で解説したテクニックを適切に適用することで、訪問者にとって使いやすく、プロフェッショナルなウェブサイトを構築することが可能です。