<caption>要素
Technical Summary
captionは、親要素がtableであるとき、その表の題名を表す要素です。適合するHTMLでは表の最初の子要素として置き、表の目的や内容を短く説明します。
HTML-AAMではcaptionをcaption roleに対応付け、親tableとの名前付け関係を定義します。ただし、captionの文字列が常にtable名になるわけではありません。aria-label / aria-labelledbyが優先され、captionがAccessibility Treeから隠されている場合は名前になりません。
Definition / Content model
| 項目 | 仕様上の内容 | 条件・範囲 |
|---|---|---|
| 意味 | 親がtable要素の場合、そのtableの題名を表す | table modelに参加する要素として扱う |
| 配置 | tableの最初の子要素 | 適合markupでは表ごとに1つまで。HTMLのcontent modelではcaptionは任意 |
| Content model | Flow content | 子孫にtable要素を含めない |
| Content attributes | Global attributes | 旧式のalign属性はobsoleteで不適合。位置や配置はCSSを使う |
| DOM interface | HTMLTableCaptionElement | HTMLElementを継承する。obsoleteなIDL属性alignも定義される |
table内の題名は、tableの意味やデータを理解する手がかりになります。表をfigureに含め、その表だけがfigureの内容で、ほかにfigcaptionがある形では、HTML Standardはcaptionを省きfigcaptionを使うよう勧めています。この推奨が当てはまる条件を、figure内の別コンテンツがある場合へ拡張しません。
古いHTMLにはcaption align属性とHTMLTableCaptionElement.alignが残っていますが、どちらもobsoleteです。新しいmarkupでは使わず、CSSのcaption-sideやtext-alignを使います。
表との関連付けとDOM interface
captionは単なる隣接テキストではなく、親tableの子要素です。table.caption getterは最初のcaption子要素を返し、該当するcaptionがなければnullを返します。setterは指定したcaptionをtableへ設定します。createCaption()はcaptionがなければ作成し、deleteCaption()は削除します。
const table = document.querySelector("table");
const caption = table.caption; // 最初のcaption。なければ null
const ensuredCaption = table.createCaption();
ensuredCaption.textContent = "月ごとの来館者数";
table.deleteCaption();
caption以外の位置にある要素、たとえばtrの子として追加されたcaptionは、そのtableのcaption getterでは取得されません。DOM setterによる修復や複数captionを含む不適合markupは、通常の適合markupとは分けて扱います。
表示位置とtable model
HTML上のcaption位置と画面上のcaption位置は別の概念です。CSS Tablesのcaption-sideはcaption boxをtable gridの上または下へ配置します。たとえばcaption-side: bottomを指定しても、caption要素がHTMLの最初の子要素であることや、そのtableとのDOM関係は変わりません。
caption {
caption-side: bottom;
text-align: start;
}
CSSによる位置指定が画面上・DOM上・支援技術の読み上げで同じ順序になるとは仮定しません。各Surfaceでの結果を独立して測定します。
Accessible role・relation・table name
| Surface | 定義 | 範囲・注意 |
|---|---|---|
| caption role | WAI-ARIAのcaption roleへ対応付ける | 実際のplatform APIへのrole値は各APIのWAI-ARIA mappingを経由する |
| Parent relation | captionからparent tableへのlabel関係をplatformごとに定義する | IAccessible2・ATK・AXではlabel-for関係、UIAでは親tableのLabeledByがcaptionを指す |
| Table accessible name | aria-label / aria-labelledbyを計算した後、最初のcaption子要素のtext subtreeを使う | なお名前が空の場合はtitle属性を使う。captionがAX treeでhiddenなら名前に使わない |
ここでいうaccessible nameは、支援技術が表を識別する名前です。可視captionの文字列が使われることが多いものの、author-provided ARIA nameがあれば優先されます。読み上げソフトが表の入口でその名前をいつ・どう読むかは、HTML-AAMのmappingだけからは断定できません。
Fact / Evidence(主張 / 根拠)
仕様上の定義、Accessibility mapping、CSSの表示位置を別の主張として追跡します。実装観測・WPT・支援技術の結果はImplementation Evidenceに分けます。
| 種別 | Fact / 主張 | 条件・範囲 | 状態 | 根拠 |
|---|---|---|---|---|
| SPEC | captionは、親要素がtableであるときその表の題名を表す | 親要素との関係、およびtable model上の役割 | 確認済み | HTML Standard: the caption element |
| SPEC | captionはtableの最初の子要素で、flow contentを持つが子孫tableを持たない | HTML適合性・content model。tableには任意のcaptionを1つ置く | 確認済み | HTML Standard: the caption element |
| SPEC | caption roleとparent tableのlabel relationをplatform mappingで定義する | WAI-ARIA role mappingと各platform APIの対応 | 確認済み | HTML-AAM: caption |
| SPEC | table name計算ではauthor-provided ARIA nameの後に最初のcaptionを使い、その後title属性を確認する | Accessible Nameの各段階とcaptionがAX treeに存在する条件 | 確認済み | HTML-AAM: table accessible name |
| SPEC | caption-sideはcaption boxをtable gridの上か下へ配置する | CSS Table Module Level 3で定義するtop / bottom。表示位置の定義 | 確認済み | CSS Tables: caption-side |
| SPEC | caption align content attributeとHTMLTableCaptionElement.alignはobsolete | 新規markupではCSSへ置き換える | 確認済み | HTML Standard: obsolete features |
Evidence
- HTML Standard: The
captionelement — 意味、context、content model、HTMLTableCaptionElement - HTML Standard: The
tableelement — captionを含むtable content modelとDOM API - HTML Accessibility API Mappings:
caption— caption role、tableとのplatform relation - HTML-AAM:
tableaccessible name — ARIA、caption、titleの順序とhidden captionの条件 - CSS Table Module Level 3:
caption-side— caption boxの表示位置 - HTML Standard: Obsolete features —
caption alignとIDLのobsolete状態 - WPT:
caption_001.html— caption getter / setter、null、子要素との関係 - W3C WAI: H39 — caption要素を使ってtableにcaptionを関連付ける技法
Implementation Evidence
以下は選定したfixture、WPT、Chrome、NVDAの観測です。仕様の適合や他環境で同じ出力になることを示すものではありません。AAM platform mapping、ブラウザーAccessibility Tree、Windows UI Automation、NVDAのspeech outputは区別して記録します。
| 種別 | 再現確認の範囲 | 記録する条件 | 状態 |
|---|---|---|---|
| IMPL | HTMLTableCaptionElement、DOM順序、table.caption、createCaption() / deleteCaption()、caption-sideの表示位置 |
2026-10-05 / Windows / Codex In-app Browser、Chrome UA 154.0.0.0、viewport 1536×695、navigator.language=en-US。build-config/atlas/research-results/caption-v1/(loopback 127.0.0.1:4210)で7/7 checks pass。IDL型、最初の子要素、getter、create/delete、行の子に置いたcaptionのgetter非該当、caption-side: bottomのcomputed値とtable下への描画を確認。Windows buildとDPRは未記録。 |
部分観測(Chrome 154 / fixture 7/7) |
| WPT | caption elementのDOM APIとCSS caption-sideの選定WPT |
2026-10-05 / Codex In-app Browser、Chrome UA 154.0.0.0 / wpt.live。caption_001.html はHarness OK、5/5 pass。caption-side-1.html はHarness OK、2/2 pass。選定ケース合計7/7 pass。wpt.liveの上流commitは固定できていない。CSS test中の複数captionはlayout test用の不適合markupであり、HTML適合性の確認には数えない。実測時のテスト版は未記録です。リンク先の内容は変わることがあり、当時と同じテストで再確認できるとは限りません。 |
部分実行(選定WPT 7/7 pass) |
| AAM | Chrome Browser Accessibility Treeでのtable role・caption由来のtable name、および4ページの見出し・主要リンク構造 | 2026-10-05 / Codex In-app Browser、Chrome UA 154.0.0.0。caption fixtureのBrowser AX snapshotではcaption文字列をtable nameとして公開し、明示したaria-labelの優先、hidden captionを含むtableの無名状態、title fallbackを観測。新規JA/ENページ4件の見出し、caption付き例table、言語切替と関連記事リンクも確認。個別のcaption role/platform relationはこのsnapshotから確定していない。Windows UIAとNVDA発話は未測定。NVDA起動ではtargetable windowが得られず、続く画面操作はComputer Useがbrowser URLを確定できず停止したため、AT読み上げを取得できていない。 |
部分観測(Chrome Browser AX / UIA・NVDA未測定) |
WPTは選定したケースのみです。browser accessibility treeやWindows UI Automationの値は、プラットフォームを超えたAAMの適合判定ではありません。NVDAの発話は、実際の出力を取得できた組み合わせに限って記録します。
Coverage / Open Issues
- ReviewedHTML上の意味、最初の子要素という条件、content model、DOM API、CSS caption-side、HTML-AAM roleとtable name計算
- Open全ブラウザーのHTML parsing・DOM setter差、複数captionを含む不適合markup、captionの子孫要素とtable model
- Open選定WPT以外の全WPT、他ブラウザー、macOS AX / Linux ATK、Windows UIAの全propertyは未評価
- OpenNVDAの読み上げ順・table navigation・JA/EN voice variation、他の支援技術との組み合わせ、Expert-gap Review
このページは初期Coverageです。記録した観測は、すべてのtable構造・ブラウザー・platform API・支援技術に一般化しません。
Related surfaces
初心者向けの例とcaptionの置き場所はYugienのcaption要素ページで説明しています。table全体のgridとparser recoveryはtable Topic、header cellとdata cellの関係はth Topicとtd Topicを参照してください。