td-has-header
大きな表のデータセルには関連付けられた見出しがある必要があります
大きく単純な(colspan/rowspanのない)表のすべての<td>が、headers属性、上にある暗黙の列見出し<th>、または左にある暗黙の行見出し<th>によって、関連付けられた見出しを持っていることを確認します。
適用範囲:4行以上かつ4列以上あり(暗黙の行見出し・列見出しの関連付けが役立つ「大きな」表。小さな表は通常、見ればわかります)、表のどこにもcolspan/rowspanがない<table>要素です(rowspanが0のセルは行グループの終わりまで伸びるため結合とみなし、colspanが0のものは1とみなします)。ロール(role属性のうち既知で抽象的でない最初のトークンで、大文字と小文字は区別しません)がtable、grid、treegrid以外の表(role="presentation"のレイアウト用の表など)は除外します。データセルを持たないためです。
期待される結果:見出しセルがまったくない表については、表に対して1回確認を求めます。見出しの不要なレイアウト用の表と、見出しのないデータ表は、マークアップからは区別できないためです。見出しセルを持つ表では、空でない<td>がすべて、次のいずれかの方法で関連付けられた見出しを持っています。
- 空でない
headers属性(ここでは信頼します。それが実在する<th>のidに解決されるかはtable-headers-attr-validが扱い、このルールの関心事ではありません)、または - 暗黙の列見出し:同じ列の、より前の行にある見出しセル、または
- 暗黙の行見出し:同じ行の、より前にある見出しセル。
見出しセルとは、ほかのロールを持たない<th>、またはrole="columnheader"かrole="rowheader"を持つ任意のセルです(そのような<td>はデータセルではなく見出しです)。テキストも、名前を持ちうる内容(画像、コントロール、ARIAのラベルを持つ要素)もない<td>はデータを含まないため、見出しは不要です。行見出しの上にある空の角のセルがよくある例です。
検出結果が報告する内容:
row、column:表の中でセルがある位置で、0から数えます。行は上から、セルは行内で左から数えます。
これらのdata.detailsのフィールドは、検出結果を読み解き、再現するのに役立ちます。reasonCodeと、出力スキーマで安定と明記された一部のフィールドを除き、安定した契約ではありません。マイナーリリースで名前が変わったり、なくなったりすることがあるため、これらに依存した実装はしないでください。
例
<table><tr><th></th><th>Q1</th><th>Q2</th><th>Q3</th></tr><tr><th>North</th><td>1</td><td>2</td><td>3</td></tr><tr><th>South</th><td>4</td><td>5</td><td>6</td></tr><tr><th>East</th><td>7</td><td>8</td><td>9</td></tr></table>
すべての<td>に、暗黙の行見出し(同じ行の前にある<th>)と列見出し(同じ列の前にある<th>)の両方があります。4x4という最小サイズは必須で、それより小さな表にはこのルールは適用されません。
<table><tr><th>Name</th><th>Team</th><th>Room</th><td></td></tr><tr><td>Ana</td><td>Sales</td><td>2.01</td><td>Mon</td></tr><tr><td>Bo</td><td>Legal</td><td>2.04</td><td>Tue</td></tr><tr><td>Chen</td><td>IT</td><td>3.10</td><td>Fri</td></tr></table>
見出しの行が1列足りず、最後の列のセルには行、列、headers属性による関連付けがありません。見出しセルがまったくない表については、見出しの不要なレイアウト用の表である可能性があるため、代わりに確認を求めます。
確認方法
このルールが判断できない場合はcantTellを報告し、判断を人に委ねます。ルールが投げかける各質問を、理由コードごとに、答えるための手順とともにここに示します。検出結果にも同じ手順がhowToCheckとして、スキャンの言語で含まれます。出力スキーマを参照してください。
TD_TABLE_NO_HEADERS
- レポートに示された表を画面上で確認してください。
- それが、最上行または最初の列が残りのラベルとなる行と列でデータを示しているか、コンテンツを横に並べるレイアウトにすぎないかを判断してください。
- データを含む場合は、ラベルの行または列を調べ、<th>要素(またはheaders属性)が使われているか確認してください。
満たす場合:表はコンテンツをレイアウトしているだけである(そのことをrole="presentation"で示すべきです)か、ラベルとなるセルが見出しとしてマークされています。
満たさない場合:表はデータを含んでいますが、見出しとしてマークされたセルがないため、スクリーンリーダーの利用者に各値の意味が伝わらず、WCAG 1.3.1を満たしません(F46)。