<th>要素
Technical Summary
th要素は、table内のheader cellを表します。headerとdataの区別は文字の装飾ではなくtable model上の区別であり、scope、headers、セルの位置とspanが、各cellに割り当てるheaderを決めます。
単純な行・列の見出しではscopeが使えます。headerの向きだけでは関係を表せない複雑なtableでは、構造を簡素化したうえでidとheadersによる明示的な関係付けを検討します。HTML-AAMのrole mappingと、各ブラウザー・支援技術での観測は分けて評価します。
Definition / Content model
| 項目 | 定義 |
|---|---|
| 意味 | table内のheader cell |
| Context | tr要素の子 |
| Content model | Flow content。ただしheader、footer、sectioning、heading contentの子孫は含めない |
| Categories | 特定のcontent categoryには分類されない |
| 主要属性 | Global attributes、colspan、rowspan、headers、scope、abbr |
| DOM interface | HTMLTableCellElement。tdと同じinterfaceを使う |
見出しcellとdata cellはどちらもtable grid上のcellです。thはheader cell、tdはdata cellとなり、table modelで見出し関係が処理されます。
scopeとheader type
| Keyword | headerの向き | 適用条件 |
|---|---|---|
row | 同じrow内のdata cells | row headerを指定 |
col | 同じcolumn内のdata cells | column headerを指定 |
rowgroup | 同じrow group内のdata cells | cellがrow groupに属する場合 |
colgroup | 同じcolumn group内のdata cells | cellがcolumn groupに属する場合 |
scopeのkeywordがない場合、または未知の値の場合はAuto stateです。Autoは属性に書く値ではなく、仕様上のstateです。Auto stateではtable model内のcell位置と、縦横にdata cellsがあるかどうかなどからheaderの向きを判定します。rowgroupとcolgroupは、該当するgroupに属さないcellへ使えません。
HTML-AAMは、計算されたheaderの種類に応じてcolumnheaderまたはrowheader roleへ対応付けます。実装が公開するrole・関係・読み上げは、HTML-AAMの規定と別に確認します。
自動header assignment
cellにheaders属性がない場合、HTML Standardの「Forming relationships between data cells and header cells」algorithmが、cellのgrid座標を使って見出しを割り当てます。概略として、対象cellから同じrowの左方向と同じcolumnの上方向を走査し、scopeで指定されたrow group・column groupのheaderも候補にします。
<table>
<thead>
<tr><th scope="col">商品</th><th scope="col">価格</th></tr>
</thead>
<tbody>
<tr><th scope="row">りんご</th><td>120円</td></tr>
</tbody>
</table>
この例の「120円」には、列見出しの「価格」と行見出しの「りんご」が関係します。rowspanやcolspanはcellの占めるgrid slotを変えるので、header assignmentもその形に左右されます。ソース順だけを見て関係を推測せず、HTML Standardのalgorithmと実装結果を別々に追跡します。
idとheadersによる明示的な関連付け
headersを指定したcellでは、属性値をASCII whitespaceで分けたID tokenからheader listを作ります。各tokenは同じtableに属するthのIDを参照し、対象cell自身を参照してはいけません。関係を追うため、header cell自身のheadersから別のheaderへ連なる場合も仕様で定義されています。
<table>
<thead>
<tr><th id="cost" scope="colgroup" colspan="2">費用</th></tr>
<tr>
<th id="base" scope="col" headers="cost">基本料金</th>
<th id="extra" scope="col" headers="cost">追加料金</th>
</tr>
</thead>
<tbody>
<tr>
<th id="plan" scope="row">プランA</th>
<td headers="plan cost base">1,000円</td>
<td headers="plan cost extra">200円</td>
</tr>
</tbody>
</table>
適合するmarkupでは、同じtableにある一意なIDを使い、参照関係を点検します。複雑なtableの構造自体を簡単にできないか先に検討してください。WAIのauthoring guidanceも、単純な表ではscope、多段・複数方向の関連付けが必要な表ではidとheadersを使う例を示しています。
主要属性とDOM interface
| 属性 | 対象と注意点 |
|---|---|
scope | row、col、rowgroup、colgroupのkeyword。欠落・不明値はAuto state |
headers | tdとthで使える。同一table内のth IDを参照するtoken列 |
abbr | ほかの文脈でこのheaderを参照するときに使う代替label。略記とは限らない |
colspan / rowspan | 同じtable grid上でcellが占めるcolumn数・row数。上限やrow group境界を含む条件を確認する |
HTMLTableCellElementにはcellIndex、colSpan、rowSpan、headers、scope、abbrなどがあります。headersやscopeのIDL属性が文字列を反映することと、ブラウザーがAccessibility APIへ公開するheader relationshipは別のsurfaceです。
Fact / Evidence(主張 / 根拠)
仕様上の主張を対象範囲と根拠位置に対応付けます。実装・WPT・Accessibilityの測定結果はImplementation Evidenceに分け、未測定範囲はCoverage / Open Issuesに記録します。
| 種別 | Fact / 主張 | 条件・範囲 | 状態 | 根拠 |
|---|---|---|---|---|
| SPEC | thはtable内のheader cellを表す。 | trの子として配置する要素とcontent modelを扱う場合。 | 確認済み | HTML Standard: the th element |
| SPEC | scopeの4 keywordはrow・column・group単位のheader stateを指定する。欠落・不明値はAuto stateとなる。 | rowgroup / colgroup stateは、cellが該当するgroupに属する条件がある。 | 確認済み | HTML Standard: the th element |
| SPEC | headersは同じtableのth IDを空白区切りで参照し、cell自身を参照しない。 | 属性値が指定された場合のtoken処理とheader listを扱う。 | 確認済み | HTML Standard: header and data cell semantics |
| SPEC | thのAccessibility roleはheader typeに応じてcolumn headerまたはrow headerに対応する。 | HTML-AAMはcolumn / column group headerとrow / row group headerでrole mappingを分ける。 | 確認済み | HTML-AAM: th element |
| SPEC | abbrはheader cellをほかの文脈で参照するための代替labelを指定できる。 | 実際にどの環境・支援技術がそのlabelをどう使うかは個別に観測する。 | 確認済み | HTML Standard: the th element |
Evidence
- HTML Standard: The
thelement — 意味、context、content model、scope、abbr、DOM interface - HTML Standard: Attributes common to
tdandth— rowspan、colspan、headers、cellIndex - HTML Standard: Header and data cell semantics — header typeとdata/header relationshipのalgorithm
- HTML Accessibility API Mappings:
th— computed roleとplatform mapping - WAI Tables Tutorial — 単純な見出しと複雑な見出し関連付けのauthoring guidance
Implementation Evidence
仕様上の主張とは別に、ブラウザー、WPT、Accessibility API、支援技術の結果を記録します。以下は選定したfixture・test・環境の範囲であり、全実装や全支援技術の共通結果を意味しません。
| 種別 | 再現確認の範囲 | 記録する条件 | 状態 |
|---|---|---|---|
| IMPL | scope、headers、abbrとrowSpan・colSpanのDOM反映、同じ表の見出しID参照を確認 |
2026-10-05 / Codex In-app Browser、Chrome UA 154.0.0.0、viewport 870×668、navigator.language=ja。fixture build-config/yugien/research-results/th-v1/(127.0.0.1:4194)で8/8 checks pass。scope(col / row / colgroup)、headers、abbr、rowSpan、colSpanを確認。1環境のみ。 |
部分観測(Chrome 154 / 1環境) |
| WPT | thを含む表セルのcellIndexと、表行のcells collectionに関する選定WPT |
2026-10-05 / Codex In-app Browser、Chrome UA 154.0.0.0 / wpt.live。cellIndex.html は6/6 pass。cells.html は1/1 pass。合計7/7 pass。wpt.liveの上流commitは固定できていない。scopeによる自動見出し関連付け、複雑な表のheader assignment、他ブラウザーは未実施。実測時のテスト版は未記録です。リンク先の内容は変わることがあり、当時と同じテストで再確認できるとは限りません。 |
部分実行(7/7 pass) |
| AAM | ブラウザーのaccessibility role/nameによるtable、columnheader、rowheader、cell、caption nameの観測。実スクリーンリーダーは未確認 | 2026-10-05 / Codex In-app Browser、Chrome UA 154.0.0.0、Windows NT 10.0 UA、viewport 870×668。Playwrightのbrowser accessibility role/name検索でtable 3、row 16、columnheader 10、rowheader 12、cell 24を観測。Fruit prices todayのcaptionがtableのaccessible nameとして一致し、見出し名も取得できた。これはブラウザー側のAX観測であり、支援技術の読み上げ確認ではない。NVDA等の実読み上げは未実施。Windows UI Automationは依頼により対象外。 |
部分観測(Browser AX / 読み上げ未確認) |
WPTの実行記録と、ブラウザーのAccessibility tree・Windows UI Automation・NVDAによる実測記録を区別します。選定したテストの結果はWPT全体の適合性を示しません。
Coverage / Open Issues
- Reviewed意味、context、主要属性、scope state、headers tokenの同一table条件、HTML-AAMの基本role mapping
- Openheader assignment algorithm全分岐、nested headers、重複ID、rowspan・colspan上限と境界条件の網羅
- OpenWPTは選定範囲のみ。他ブラウザー、全WPT、Windows UIA property全項目、NVDA以外の支援技術は未評価
- Open
abbrの読み上げ利用、複雑な表でのannounce順、ブラウザー・支援技術間の組み合わせ差、Expert-gap Review
このページは初期Coverageです。ここで記録した結果は、すべてのtable構造・ブラウザー・支援技術で同じheader relationshipが公開されることを意味しません。
Related surface
初心者向けの見出し例とscopeの使い方はYugienのth要素ページ、データを入れるセルの例はYugienのtd要素ページを参照してください。仕様とEvidenceはtd Topicで確認できます。表の題名とaccessible nameはcaption Topic、表全体のtable modelとparser recoveryはtable Topicを参照してください。