<nav>要素
Technical Summary
navは、同じ文書やほかの文書へ移動するための主要なリンク群を表すsectioning contentです。すべてのリンク群をnavにする要件はありません。
HTML-AAMは暗黙のroleをnavigationに対応付けます。複数のnavigation landmarkが異なる目的を持つ場合は、それぞれのaccessible nameで目的を区別します。仕様上の定義、規範文書上のmapping、選定WPT、単一ブラウザーの観測を分けて記録します。
Definition / Categories
| 項目 | 仕様上の整理 |
|---|---|
| 意味 | 同じページ内またはほかのページへの移動先を示すリンクを含むsection |
| Categories | Flow content、Sectioning content、Palpable content |
| Context | Sectioning contentが使用できる場所 |
| Content model | Flow content |
| Tag omission | 開始tag・終了tagとも省略できない |
| DOM interface | HTMLElement |
| HTML-AAM implicit role | navigation(landmark role) |
仕様の意味は、ナビゲーションを目的とするsectionです。リスト要素を使うか、項目をいくつ含むかはnavの定義だけでは限定されません。
意味と適用範囲
HTML Standardは、navを「ほかのページまたは同じページ内の場所へ移動するリンクを含むsection」と定義し、主なnavigation blockに使うものと説明しています。ページ上のリンク群をすべてnavにする必要はありません。
サイトの主なメニュー、記事の目次、パンくずリストは代表的な例です。フッターにある利用規約や著作権情報などの短いリンク一覧は、通常、リンクがあるという理由だけでnavにする必要はありません。分類は見た目だけでなく、そのまとまりが担う案内の目的で判断します。
navはsectioning contentですが、見出しを自動で作ったり、リンクを自動生成したりしません。見出しが必要なときは別に見出し要素を置きます。アンカーの遷移は中にあるa要素とそのhrefが担います。
Content modelとDOM
Content modelはFlow contentです。順序が意味を持つ案内にはol、同列のリンクにはulを使う例が一般的ですが、リストは必須ではなく、文章などのFlow contentも入れられます。
DOM interfaceはHTMLElementです。専用のナビゲーションAPIや、navだけに定められたキーボード操作はありません。利用者は通常どおり中のリンクやコントロールへ移動します。視覚的な配置や色はCSSで決まり、要素の意味とは別に確認します。
const nav = document.querySelector('nav');
console.log(nav instanceof HTMLElement); // true
console.log(nav.localName); // "nav"
console.log(nav.getAttribute('role')); // null: role属性は指定していない
role属性がないことと、Accessibility Treeにroleがないことは同じではありません。HTML-AAMのimplicit roleと、ブラウザーが公開したAccessibility Treeの内容を別に調べます。
Accessibility / Landmark Name
HTML-AAM 1.0 Working Draft(2026-10-21)は、navの暗黙のroleをWAI-ARIAのnavigation roleに対応付けています。WAI-ARIAではnavigationはlandmarkです。ランドマークは、ページの大きな領域を支援技術から見つけ、移動する手がかりになります。
landmarkの名前は、その領域が何を案内するのかを伝えます。WAI-ARIA APGは、ページにnavigation landmarkが1つだけなら名前を省略でき、複数ある場合は目的が分かる名前を付けるよう勧めています。同じリンク群を同じ形で繰り返す場合は、同じ名前を付けます。これはAPGの実装指針として扱い、HTML StandardのContent modelとは分けます。
aria-labelまたはaria-labelledbyで名前を指定できます。HTML-AAMのname computationでは、参照されたラベルがほかの名前指定より優先されます。スクリーンリーダーはrole名を別に伝えるため、ラベル自体に「navigation」や「ナビゲーション」と重ねて書く必要はありません。特定の支援技術による発話は今回のブラウザー観測には含めません。
HTMLのnav要素を使えば暗黙のroleが伝わります。通常はrole="navigation"を重ねて指定する必要はありません。
Fact / Evidence(主張 / 根拠)
規範的なHTMLの定義、HTML-AAMのrole mapping、APGの実装指針を別の主張として整理します。
| 種別 | Fact / 主張 | 条件・範囲 | 状態 | 根拠 |
|---|---|---|---|---|
| SPEC | navは同じ文書または別文書への移動リンクを含むsectionであり、主なnavigation blockに用いる。全リンク群に必要な要素ではない。 | HTML Living Standard §4.3.4。意味、categories、context、content model、主要なnavigation blockの注記。 | 仕様確認済み | HTML Standard: The nav element |
| AAM | HTML-AAMはnavをWAI-ARIAのnavigation roleへ対応付ける。navigation roleはlandmarkで、名前はauthorが指定できる。 | HTML-AAM 1.0 WD 2026-10-21、WAI-ARIA 1.2。実ブラウザー・platform APIでの公開は別に測定する。 | 文書確認済み | HTML-AAM: nav · WAI-ARIA: navigation |
| AAM | 複数のnavigation landmarkには目的を区別する名前を付け、同じリンク群を繰り返す場合は同じ名前を使うことをAPGが推奨する。 | WAI-ARIA APG Navigation Landmark pattern。著者向けの実装指針で、HTML Standardの規範要件ではない。 | 文書確認済み | WAI-ARIA APG: Navigation Landmark |
Evidence
- HTML Living Standard, §4.3.4 The nav element — meaning, categories, context, content model, and the scope of navigation sections.
- HTML Accessibility API Mappings 1.0 Working Draft, 2026-10-21 — implicit role and accessible-name mappings.
- WAI-ARIA 1.2, navigation role — role definition and landmark semantics.
- WAI-ARIA APG, Navigation Landmark — author guidance for one or multiple navigation landmarks and repeated link sets.
- WPT at revision
68d964a5f292bc4b2c2eba2f21e2b916190b6ad2:html-aam/roles.html— theel-navcomputed-role test. - WPT at the same revision:
html-aam/names.html— navigation accessible-name sources and precedence.
Implementation Evidence
2026-10-25にChrome 155で選定WPT 188件を実行し、Chrome 156のローカルブラウザーで4ページを1280×720・390×844の2 viewportで確認しました。ライト・ダーク切替、ページの横はみ出し、ランドマーク名も観測しています。各結果は記録したブラウザーと範囲に限られます。スクリーンリーダーの発話とWindows platform accessibility APIは測定していません。
専用fixture: nav-v1の12項目はすべて成功しました。ランドマークのrole/name確認、4ページのviewport・theme観測、WPTの実行条件と対象範囲はdocs/atlas/nav-evidence-2026-10-25.mdに記録しています。
| 種別 | 再現確認の範囲 | 記録する条件 | 状態 |
|---|---|---|---|
| IMPL | 4ページでのDOM構造、nav内に置ける内容、複数navの名前、画面幅への対応、共通テーマ切替 |
2026-10-25 JST / ローカルChromium 156.0.0.0(User-AgentはWindows NT 10.0)/ navigator.language=ja / DPR 1。yugien/ja/nav.html、yugien/en/nav.html、atlas/ja/nav.html、atlas/en/nav.htmlを1280×720・390×844で確認。1280px時のdocument scroll widthは1265px。390px時のdocument・body scroll widthは375pxでbody client widthと同じ。ページ全体の横はみ出しはありません。長いコード例は横スクロール可能なpre内、AtlasのFact tableは横スクロール可能なwrapper内(client width 342px / scroll width 608px)。各ページでテーマ切替をクリックし、ライト#f5f1e8、ダーク#1b201e、システム(明示的なdata-themeなし、このbrowserの設定はdark)を確認。nav-v1 fixtureは12/12項目が成功。 |
部分観測(Chromium 156 / 2 viewport / ライト・ダーク) |
| WPT | navの暗黙のroleと、選定したaccessible nameの対応・優先順位 |
2026-10-25 JST / Chrome Stable 155.0.8059.85 / Windows build 26300 / headless WPT runner。WPT revision 68d964a5f292bc4b2c2eba2f21e2b916190b6ad2で、html-aam/roles.htmlは60/60成功し、el-navも成功。html-aam/names.htmlは128/128成功。navに関する名前の8件(名前なし、aria-label、aria-labelledby、title、優先順位4件)はすべて成功。合計188/188成功。この2ファイルだけを実行し、ほかのWPTファイルとブラウザーは未実行。実行したテストの版: |
選定WPT 188/188成功(Chrome 155 / revision固定) |
| AAM | 4ページとnav-v1 fixtureにおけるChromiumのnavigation roleとaccessible nameの公開 |
2026-10-25 JST / ローカルChromium 156.0.0.0(User-AgentはWindows NT 10.0)/ viewport 1280×720・390×844 / DPR 1 / navigator.language=ja。browserのgetByRole("navigation") queryでは、Yugien各ページに2件、Atlas各ページに3件が見つかりました。各ページで想定した日本語・英語の名前は、それぞれ1件ずつに一致しました(サイト内案内、パンくず、Atlasのページ内目次)。nav-v1は名前のないnav、aria-label、aria-labelledby、同じ目的で同じ名前を持つ2つのnav、nav外の通常リストも確認。Chromiumのbrowser role/name queryのみ。Windows UI Automation、ほかのplatform API、スクリーンリーダーの発話は未測定。 |
部分観測(Chromium 156 role/name query / 1 browser) |
Coverage / Open Issues
- Specification checkedMeaning, categories, context, content model, and sectioning-content boundaries
- AAM checkedHTML-AAM navigation-role mapping and APG guidance for named and repeated landmarks
- WPT selected files run
roles.htmlandnames.htmlat one pinned revision - OpenOther browsers, Windows UI Automation and other platform APIs, screen-reader speech, and the remainder of HTML-AAM/WPT coverage