要約

データテーブルに適切なタグ付けと説明を付けることで、データを見られないユーザーや、データを理解するのに追加のサポートが必要なユーザーが、ナビゲーションしやすく、理解しやすくなります。

テクニック

例1 — ヘッダー行がひとつだけの表
<table>
   <tr>
      <th>Player</th>
      <th>Team</th>
      <th>Position</th>
      <th>Average</th>
      …
   </tr>
   <tr>
      <td>Babe Ruth</td>
      <td>New York Yankees</td>
      <td>Outfielder</td>
      <td>.342</td>
      …
   </tr>
   …
</table>
例 2 — 行ヘッダーが複数ある表
<table>
   <tr>
      <th></th>
      <th>Population (millions)</th>
      <th>Land Area (km2)</th>
      <th>Population Density (per km2)</th>
   </tr>
   <tr>
      <th>Alberta</th>
      <td>4.25</td>
      <td>640,330</td>
      <td>6.7</td>
   </tr>
   <tr>
      <th>British Columbia</th>
      <td>5.00</td>
      <td>922,503</td>
      <td>5.4</td>
   </tr>
   …
</table>
例3 — キャプションと説明付きの表

最初の例では説明文をcaption要素内に直接配置し、二番目の例ではキャプション内にdetails要素を使用し、三番目の例では説明文を表と組み合わせるためにfigureタグを使用しています(キャプションはfigcaption要素内に配置されます)。

<table>
   <caption>
      Table 1 — Population trends over the last
      century. The table is divided into ten-year increments
      with each decade group of columns providing data for …
   </caption>
   …
</table>
<table>
   <caption>
      <p>Table 1 — Population trends over the last century</p>
      
      <details>
         <summary>Description</summary>
         <p>
            The table is divided into ten-year increments
            with each decade group of columns providing data for
            …
         </p>
      </details>
   </caption>
   …
</table>
<figure>
   <figcaption>Table 1 — Population trends over the last century</figcaption>
   
   <details>
      <summary>Description</summary>
      <p>
         The table is divided into ten-year increments
         with each decade group of columns providing data for
         …
      </p>
   </details>
   
   <table>
      …
   </table>
</figure>
例 4 — 脚注付きの表

脚注は、tfoot内ではなく、表の後に入ります。表と脚注は両方とも、figure内でグループ化できます。

<figure>
   <figcaption>Table 1 — Rate of population decline</figcaption>
   <table>
     <tr>
       <th>Population</th>
       <th>Birth Rate<a epub:type="noteref" role="doc-noteref"
          href="#tblnote01">*</a></th>
     </tr>
     …
   </table>
   <aside epub:type="footnote" role="doc-footnote" id="tblnote01">
     <p>* Data not available for all years</p>
   </aside>
</figure>

よくある質問

表の画像は使えますか?

電子書籍では表のレンダリングが依然として問題となっていますが、実際のデータの代わりに表の画像を組み込むと、画像を見ることができない人からコンテンツを奪うことになります。

表は、ユーザーエージェントでまだ解決が必要な問題です。レンダリングを容易にするための拡張水平スクロールまたは垂直スクロール機能をほとんどのユーザーエージェントが使えないのです。その結果、大きな表は利用可能なスペース内でレンダリングされ、行と列がページビューをまたがって表示されてしまい、目の見えるユーザーにとっての電子書籍の品質が損なわれます。

表の画像を組み込む場合は、テーブルマークアップを含むファイルへのリンクの提供を検討してください。テキスト読み上げ再生が可能なユーザーであれば、レンダリング品質に関係なくマークアップをナビゲートできます。

一部のユーザーエージェントは、ブラウザーウィンドウにポップアップコンテンツをレンダリングします。これにより、レンダリングされる画像が小さすぎたり、ビューポートからはみ出したりして読めないということがなくなり、目の見えるユーザーの読みやすさも向上します。

利用可能な画面サイズに基づいて視覚的に表をレンダリングする別の方法については、レスポンシブテーブルに関する CSS-Tricks の記事も参照してください。

解説

表がアクセスしやすいように構造化されていない場合、セルを一つずつ移動する人にとっては、表に含まれるデータはすぐに意味のない数字やファクト、図の海と化します。表を見ることができないユーザーは、並びをチェックしたり、上部のヘッダーに戻って自分のいる位置を確認するなどの視覚的でチートな手段が利用できません。

HTMLテーブル要素を使用して表形式のデータをマークアップすると、支援技術のユーザーが行と列でデータを移動できるようになります。また、読んでいるデータを理解するために必要なコンテキストも提供されます。

注記

レイアウト目的で表を使用することは、HTML仕様では規格違反になっています。詳細については、レイアウト表のページを参照してください。

次のサブセクションでは、あらゆる表をアクセシブルにするために不可欠な基本的な方法について説明します。より複雑な問題については、ナレッジベースで個別に説明されています(関連トピックメニューを参照)。

ヘッダー

テーブルナビゲーションの主な支援の一つは、ヘッダーを適切に使用することです。正しく識別されてリンクされたヘッダーは、ユーザーがデータポイントをナビゲートするときに役立つコンテキストを提供します。

列または行ヘッダーはth要素を使用して識別されます。データセルはtd要素を使用して識別されます。

よくある悪い例は、td要素をヘッダーのようにスタイル設定することです(例:テキストを太字にして背景に陰影を追加するなど)。 thを使用しない限り、支援技術はセルをヘッダーとして認識せず、ユーザーがデータ内を移動するときにヘッダーとして読み上げられません。

最も単純な種類の表には、各列または各行に一つのヘッダーが含まれます(例1および2を参照)。このような表内のデータが自己記述的である場合や、表がそれほど大きくない場合は、ヘッダーをさらに識別する必要はありません。ユーザーはデータを理解できます。

複数の見出しや多数のデータ行があるなど、複雑な表の場合は、見出しの「範囲」を識別する必要があります。scope属性を追加すると、ヘッダーが現在の列または行に適用されるかどうかが支援技術に伝えられます。この属性を使用して、複数の列または行にヘッダーを適用することもできます。

注記

scope属性の詳細については、 「ヘッダースコープ」ページを参照してください。

場合によっては、表に複雑なヘッダーがあり、単純なスコープ宣言では不十分なことがあります。たとえば、セルのヘッダーが同じ列または行にない場合などです。このような場合、headers属性を使用すると、ヘッダーを構成する個々のセルを識別できます。この属性には、適用されるヘッダーセルのIDへの一つ以上の参照のリストが含まれます。

注記

headers属性の詳細については、「複雑なヘッダー」ページを参照してください。

表構造

表は、thead(表ヘッダー)、tbody(表本体)、およびtfoot(表フッター)要素を使用して、行セットの目的をより適切に表すように構造化できます。

表にはthead要素を一つだけ組み込め、その要素は表の最初の行を含む要素でなければなりません。ヘッダー行をグループ化するためにthead要素を追加することは、セマンティックマークアップの優れた実践ですが、この要素は表のアクセシビリティには影響しません。この要素は主にユーザビリティ上の理由で存在しています。たとえば、表をスクロールしてもthead内の行は静的なままになるようにスクリプト化されることがよくあります。また、ブラウザーはtheadを使って表を印刷するときに見出しを繰り返すこともできます(つまり、表が複数の印刷ページに分割されている場合)。

ヘッダーの後には、一つ以上のtbody要素が続きます。各tbodyは、表の一つのセクションを表します。複数のtbody要素を使用すると、たとえば、各セクションに固有のヘッダーを設定できます。この方法により、このような表の読みやすさが向上するため、アクセシビリティが向上します。

最後に、表の最後にはtfoot要素を一つだけ配置できます。tfoot要素は列の概要を表す場所です。tfootを使用するとユーザーは各行を移動しなくてもこの情報を見つけることができます。なおこれは、脚注などの無関係なコンテンツを配置する場所ではありません(例 4を参照)。

略語

表のヘッダーが数語以上の長さの場合、データセルごとにヘッダーが繰り返される(訳注:支援技術によってセルの移動の度に長いヘッダーも読み上げられる)と、ユーザーの操作が遅くなる可能性があります。このような長い繰り返しを避けるために、abbr属性を使用して短いヘッダーを割り当てることができます。

<th … abbr="Total insurance">
   Total insurance coverage
   cost on per annum basis
</th>
<th … abbr="Total interest">
   Total interest payments
   for the covered period
</th>

短縮タイトルは、その下のセルをアナウンスするときに、ヘッダー全文の代わりに使用されます。

注記

abbr属性のサポートは一貫していません。NVDAはこの属性をサポートしていませんが、JawsやVoiceOverなどの他の支援技術はサポートしています。

キャプションと概要

ユーザーが表の目的と内容の順序を理解できるようにするには、キャプションと概要を追加する必要があります。

キャプションは、表のタイトルに相当します。表に組み込める専用のcaption要素で提供することも、図表のキャプションなどの他の手段でも表現できます。キャプションとそのマークアップ方法の詳細については、「表のキャプション」ページを参照してください。

概要は、表の構造の説明を提供します。内容を見ることができないユーザーや、行間や列間で情報を追跡するのが難しいユーザーが、データのレイアウトを理解するのに役立ちます。概要の追加に関する詳細は、「表の概要」ページに記載されています。

スタイリング

表の構造を確保することは支援技術のユーザーにとって非常に重要ですが、表をアクセシビリティ対応にするために考慮すべきことはマークアップだけではありません。表のスタイル設定は、視力の弱いユーザーや色覚異常のユーザー、またディスレクシアなどの認知障害を持つユーザーにとっての表の読みやすさにも影響します。

表をスタイル設定する際に考慮すべき重要な事項は次のとおりです。

  • ヘッダーセルは視覚的に区別するために網掛けされることが多いため、前景テキストとの十分なコントラストを確保することが重要です。
  • データセルの外観をヘッダーと同じにしないでください。データセルの目的についてユーザーが混乱する可能性があります。
  • ユーザーがデータを追跡できるように、セル内のデータの配置を一定にします(例:すべての数値データを右揃えにする)。
  • 知覚障害のあるユーザーが視覚的に見ている場所を追跡しやすくするために、行の色を交互に変更したり、行を強調表示したりすることを検討してください。

関連リンク