Menu

HTML の header タグ: 使い方、例、固定ヘッダー

<header> 要素には、ページやセクションの導入部 (ロゴ、タイトル、ナビゲーション、著者名) を入れます。サイトのヘッダーの作り方、<header> と <head> や見出しとの違い、記事の中での使い方、スクロールしても固定されるヘッダーを解説します。

このページのコードはエディタで実行できます - 編集してすぐに結果を確認できます。

HTML でヘッダーを作る方法

ページの上部 (ロゴ、サイト名、メインメニュー) を <header> 要素で囲みます。初期の見た目がないブロックボックスなので、CSS を数行書けばバーになります。

ロゴに付けた margin-inline-end: auto が、メニューとボタンをバーの反対の端まで押しやります。<style> 要素を消してもヘッダーであることは変わりません。ヘッダーにしているのは暗い背景ではなくタグです。

header、head、h1 の違い

名前は似ていても役割の違う 3 つです。

要素場所表示されるか個数
<head><html> の直下、<body> の前されない。<title>、<meta>、<link> を入れるちょうど 1 つ
<header><body> の中される。ページやセクションの導入部いくつでも
<h1> から <h6><body> の中のどこでもされる。見出しいくつでも

下の <head> は、ブラウザがタブに表示するページのタイトルを設定しています。プレビューで見えるものは、すべて <body> から来ています。

ヘッダーには見出しが入っていることが多いですが、必須ではありません。また、見出しをヘッダーで囲む必要もありません。

記事の中のヘッダー

<header> はページだけでなく、いちばん近い記事やセクションの導入部にもなります。各記事が独自のヘッダーを持つブログ記事の一覧は、正しく、よくある書き方です。

スクリーンリーダーにとって banner ランドマークになるのは、ページの階層のヘッダー (article、aside、main、nav、section の中にないもの) だけです。記事のヘッダーは普通のグループなので、banner が複数になることはありません。

固定ヘッダー

position: sticky を使うと、その下の内容がスクロールしてもヘッダーは上部に留まります。下の箱の中をスクロールしてみてください。

動かすための細かい点が 3 つあります。top: 0 (位置の指定がないと sticky は何もしません)、背景色 (ないと行が透けて見えます)、そして配置された内容が上に描かれないようにする z-index です。実際のページではページ自体がスクロールする箱なので、ヘッダーは <body> の直下に置きます。

position: fixed のヘッダーも留まりますが、ページの流れから外れるので、内容がその下に潜り込み、上部に padding が必要になります。sticky ならレイアウト上の場所を保ちます。

ヘッダーに入れられるもの

ヘッダーには、見出し、ロゴの画像、<nav>、検索フォーム、ボタンなど、ほとんどの内容を入れられます。別の <header> や <footer> は入れられず、<footer>、<address>、別の <header> の中に置くこともできません。

<header>
  <a href="/"><img src="logo.svg" alt="Acme home"></a>
  <nav aria-label="Main">...</nav>
  <form role="search">...</form>
</header>

ロゴがトップページへのリンクになっているときは、スクリーンリーダーが読み上げるのはその alt テキストなので、リンク先がわかるように書きましょう (「Acme home」)。

よくある間違い

  • <header> と <head> を混同する。 メタデータは <head> に入れ、見える内容は決して入れません。
  • すべての見出しに <header> を使う。 見出しだけならヘッダーで囲む必要はありません。導入部の内容がまとまっているときに <header> を使いましょう。
  • 背景のない固定ヘッダー。 ページのテキストがスクロールして透けて見えます。background を指定しましょう。
  • 固定されない sticky。 祖先に overflow: hidden や overflow: auto があると、それが sticky のスクロールする箱になり、ヘッダーはその箱の中で固定されるか、まったく固定されません。祖先を確認しましょう。
  • サイトのメニューをヘッダー内の <div> に入れる。 スクリーンリーダーのユーザーが移動できるよう <nav> を使いましょう。

よくある質問

HTML の header タグとは何ですか?

<header> は導入部の内容のためのセマンティックな要素です。ページ上部のサイトのロゴとメニューや、記事の上部のタイトルと著者名を入れます。初期スタイルのない普通のブロックボックスです。

HTML の head と header の違いは何ですか?

<head> は <title>、<meta> タグ、スタイルシートへのリンクを入れる文書の見えない部分で、ちょうど 1 つだけあります。<header> は <body> の中にある見える内容で、1 ページに複数置けます。

1 ページに header 要素を複数置けますか?

置けます。ページには普通サイトのヘッダーが 1 つあり、各 <article> や <section> もタイトルやメタ情報のための独自の <header> を持てます。スクリーンリーダーにとってページの banner になるのは、article、aside、main、nav、section の中にないヘッダーだけです。

nav は header の中に入れるべきですか?

入れてもかまいません。メインメニューがページの上部にあるときは、よく中に入れます。<nav> を <header> の外に置くのも正しい書き方なので、レイアウトに合うほうを選びましょう。

スクロールしてもヘッダーを上部に固定するには?

position: sticky; top: 0; に加えて背景色と z-index を指定し、内容がその下をスクロールするようにします。sticky が効くのはヘッダーの親がヘッダーより高い間だけで、祖先に overflow: hidden があるとページに固定されなくなります。

Coddy programming languages illustration

Coddyでコードを学ぼう

始める