<main>要素
Technical Summary
main要素は、文書の主要な内容を表します。HTML Standardは、hidden属性のないmain要素を1つの文書に複数置くことを認めていません。
配置できる祖先要素は限定されています。アクセシビリティ上はmain roleのlandmarkになり、HTML-AAMはWAI-ARIAのmappingを使います。規範的な条件、ブラウザー実装、WPTの範囲は分けて記録します。
Definition / Categories
| 項目 | 仕様上の整理 |
|---|---|
| 意味 | 文書の主要な内容(dominant contents) |
| Categories | Flow content、Palpable content。Sectioning contentではない |
| Context | Flow contentが使える場所。ただし祖先要素が配置条件を満たすこと |
| Content model | Flow content |
| Tag omission | 開始tag・終了tagとも省略できない |
| Content attributes | Global attributes。main固有の属性はない |
| DOM interface | HTMLElement |
「主要な内容」は、画面上で最も大きい領域や、文書内で最初に出てくる内容という意味ではありません。その文書の中心的な話題または機能に直接関係する部分を示します。
文書内の数とhidden属性
HTML Standardの適合条件は、1つの文書にhidden属性のないmain要素を複数置かないことです。検査対象はCSSで表示されているかどうかではなく、hidden属性の有無です。
<main>このページの内容</main>
<main hidden>切り替え前の別コンテンツ</main>
CSSでdisplay: noneにしただけの要素にはhidden属性がありません。そのため、画面上で隠れていても、この適合条件では別のmainとして数えます。反対に、hidden属性を付けた要素がCSSで見えるように変更されても、その属性はDOMに残ります。HTML上の適合性と実際の表示状態は別に確認します。
別のiframeが読み込む文書は別のDocumentです。それぞれの文書は独立してmainを持てます。
配置条件と祖先要素
HTML Standard上、main要素の祖先にできる要素は次のものに限られます。
html、body、div- Accessible Nameを持たない
form - Autonomous custom element
したがって、mainをarticle、aside、footer、header、nav、または別のmainの内側に置く構造は適合しません。通常のページではbody直下か、祖先がdivだけの場所に置くと条件を確認しやすくなります。
この階層条件はHTMLの適合性の要件です。ブラウザーのAccessibility Treeが不適合な要素をどのroleで公開するかは、仕様条件とは別に観測します。
Content modelとDOM
mainのContent modelはFlow contentです。見出し、段落、リスト、記事などを含められます。main自身はSectioning contentではなく、見出しレベルや文書の見出し構造を作りません。ページの題名と節の階層は、必要なh1〜h6で表します。
HTML Standardはmain固有の属性を定めていません。id、class、langなどのGlobal attributesを使えます。DOM interfaceはHTMLElementです。
const main = document.querySelector('main');
console.log(main instanceof HTMLElement); // true
console.log(main.localName); // "main"
console.log(getComputedStyle(main).display); // ブラウザーの初期スタイルを観測
HTMLはmain要素にdisplay: block相当の既定表示を定めています。サイトのCSSが表示方法を上書きすることがあるため、実装調査では対象ページのComputed Styleも記録します。
Accessibility / HTML-AAM
HTML-AAM 1.0 Working Draft(2026-10-21)は、mainの暗黙のroleをWAI-ARIAのmain roleに対応付けています。WAI-ARIAではmainはlandmarkです。これは、支援技術やブラウザーのページ構造ナビゲーションで、文書の中心部分へ移動する手がかりになります。
mainのaccessible nameはauthorから指定できますが、WAI-ARIAでは必須ではありません。1つのmain landmarkには多くの場合、追加のaria-labelを付ける必要はありません。複数の文書や複数のmain領域がある状況では、ラベルの必要性を個別に検討します。
HTML Standardの配置条件と、ブラウザーがAccessibility Treeにroleを公開する実装結果は別のFactです。1つのブラウザーでの観測を、すべてのOSのAccessibility APIや支援技術に一般化しません。
Fact / Evidence(主張 / 根拠)
仕様上の規範、アクセシビリティのmapping、実ブラウザーの観測、WPTの実行範囲を区別します。
| 種別 | Fact / 主張 | 条件・範囲 | 状態 | 根拠 |
|---|---|---|---|---|
| SPEC | mainは文書の主要な内容を表し、Flow contentとして使う。 | HTML Living Standard 4.4.14。Categories、Context、Content model。 | 仕様確認済み | HTML Standard: The main element |
| SPEC | 文書はhidden属性のないmainを複数含んではならず、各mainの祖先は指定された要素だけで構成する。 | HTML Living Standardのcardinality・hierarchically correct mainの規則。CSSの非表示指定とは区別する。 | 仕様確認済み | HTML Standard: cardinality and hierarchy |
| AAM | HTML-AAMはmainをWAI-ARIAのmain roleへ対応付ける。roleはlandmarkで、accessible nameは必須ではない。 | HTML-AAM 1.0 WD 2026-10-21 / WAI-ARIA 1.2。規範文書とブラウザー実測は別範囲。 | 文書確認済み | HTML-AAM: main · WAI-ARIA: main role |
Evidence
- HTML Living Standard, 4.4.14 The main element — meaning, categories, context, content model, hierarchy, and document cardinality.
- HTML Accessibility API Mappings 1.0 Working Draft, 2026-10-21 — implicit role and platform API mappings.
- WAI-ARIA 1.2, main role — landmark meaning, supported naming, and accessible-name requirement.
- Selected WPT: reflection-grouping.html — the grouping-element reflection suite includes
main; this does not cover all main placement or landmark rules. - WPT HTML DOM tests — source directory for the selected test.
Implementation Evidence
2026-10-25にChrome 156でブラウザー観測とWPTを実行しました。通常のmain、hidden属性、CSSで隠したmain、iframe内の別Documentをfixtureで確認し、4ページすべての表示幅・テーマ・role queryも調べました。選定WPTは5,904件すべてpassしましたが、mainの配置条件やlandmarkを直接検証するテストではありません。
専用fixture: main-v1は通常の階層条件を満たすmain、hidden属性、CSSで非表示にしたmain、iframe内の別Documentを比べます。同じ文書にhidden属性のないmainが2つあるため、fixture自体は適合例ではなく、条件を観測するためのものです。fixtureはdocs/atlas/main-v1-fixture.html、実行記録はdocs/atlas/main-evidence-2026-10-25.mdに登録します。
| 種別 | 再現確認の範囲 | 記録する条件 | 状態 |
|---|---|---|---|
| IMPL | DOM・Computed Styleで文書内の数、hidden属性、階層、既定表示、iframe内の別Documentを確認。4ページのレスポンシブ幅と共通機能も確認 |
2026-10-25 / Chrome UA 156.0.0.0 / Windows NT 10.0。fixture docs/atlas/main-v1-fixture.htmlで、通常のmainはdisplay:block・HTMLElement、hidden付きとCSS非表示はdisplay:none、hiddenなしの数は2、別Documentのmainは1と確認。標準viewport 1280x720 / DPR 1.25とresponsive viewport 390x844 / DPR 1.0でYugien/Atlasのja/en全4ページを確認。各ページにmainは1つ、共有検索リンクと2つの言語alternateリンクがあり、横方向のoverflowなし。 |
部分観測(Chrome 1環境) |
| WPT | grouping elementsのreflection WPT。main専用の配置・個数・landmarkテストではない |
2026-10-25 / Chrome UA 156.0.0.0 / Windows NT 10.0 / wpt.live。reflection-grouping.htmlを実行。Harness status OK、5,904件中5,904件pass。WPTのgrouping-elements一覧にmainがありますが、このテスト結果はHTML Standardの配置・cardinality規則やHTML-AAMのrole mappingを検証しません。wpt.liveが配信したcommit SHAは確認できていないためwptRevisionはnull。ほかのWPT・ブラウザーは未実行。実測時のテスト版は未記録です。リンク先の内容は変わることがあり、当時と同じテストで再確認できるとは限りません。 |
一部実行(配信版は未記録) |
| AAM | ChromiumのPlaywright role queryとブラウザーDOM snapshotによるmain認識の観測 |
2026-10-25 / Chrome UA 156.0.0.0 / fixture docs/atlas/main-v1-fixture.html。PlaywrightのgetByRole('main')は表示中のmainを1件、accessible nameが主コンテンツのmainを1件、iframe内の別Documentのmainを1件検出。hidden付きとCSSのdisplay:noneは通常queryに含まれません。4ページでも各1件を確認。これはChromium内のrole queryによる観測で、Windows UI Automation、IAccessible2、スクリーンリーダーは未実測。CodexのDOM snapshotはmainをcontainerとして表示するため、OSのAccessibility API treeとは区別します。 |
一部観測(Chromium role query) |
WPTの選定ファイルが通っても、mainのすべての適合条件や他のブラウザー、OSのAccessibility APIが検証済みになるわけではありません。
Coverage / Open Issues
- 仕様確認済み意味、Categories、Context、Content model、文書内の数、祖先要素、DOM interface
- 仕様確認済みHTML-AAMのmain role mappingとWAI-ARIA landmark / accessible name要件
- 一部観測済みChrome 156、標準/狭い表示幅、ライト/ダーク、4ページのmain role query、選定WPT 5,904件pass。対象範囲はImplementation Evidenceを参照
- 未完了他ブラウザー、Windows UI Automation、IAccessible2、支援技術の読み上げ
WPTの配信版commitは確認できていません。選定したWPTはHTML Standardのすべての配置規則を検証した結果として扱いません。
Related surface
mainの役割を初心者向けに確認する場合は、Yugienのmain要素ページを参照してください。主コンテンツの中の独立した記事や投稿はarticle要素、埋め込まれた文書の境界はiframe要素、文書内のリンクはa要素でも確認できます。