HTML テーブルのセマンティック化
テーブルは、ウェブページ上でデータを整理し表示するための強力な手段です。
基礎的な <table>、<tr>、<th>、<td> タグだけでもシンプルなテーブルは作成できますが、<thead>、<tbody>、<tfoot> 要素を使用することで、セマンティック(Semantic)な構造を提供し、アクセシビリティを高め、スタイルの制御能力を強化できます。
これらの要素はテーブルの異なるパーツを定義するのに役立ち、ブラウザ、検索エンジン、および補助技術(Assistive Technology)がテーブルの内容をより正確に理解することを可能にします。
1. テーブルのセマンティック構造を理解する
<thead>、<tbody>、<tfoot> 要素はテーブルにセマンティックな構造を与え、以下の 3 つの異なるセクションに分割します。
<thead>(表頭): テーブルの見出し行を含みます。通常はカラム(列)の見出しが含まれ、各列にどのようなデータが入っているかを記述します。<tbody>(表体): テーブルの主要なデータを含みます。一つのテーブルに複数の<tbody>要素を持たせることができ、関連する行をグループ化するのに非常に便利です。<tfoot>(表脚): テーブルのデータに関連する集計情報や計算結果を含みます。合計、平均値、またはその他の関連情報を含めることができます。
1.1 なぜこれが重要なのか?
これらの要素を使用するのは、単に見た目のためではなく、データの構造に「意味」を与えるためです。このセマンティックな明確さは、以下のメリットをもたらします。
- スタイル制御: テーブルの各セクションに対して特定の CSS スタイルを適用できるため、視覚的にヘッダー、メイン、フッターを簡単に区別できます。
- メンテナンス性: 構造が明確になることで、HTML コードの可読性が高まり、特に複雑なテーブルにおいてメンテナンスが容易になります。
- JavaScript によるインタラクション: JavaScript を使用して、テーブルの特定のセクションをターゲットに動的な更新や操作を行うことができます。
- アクセシビリティ (Accessibility): スクリーンリーダーなどの補助技術は、これらの要素を使用してテーブル構造をより良く理解し、障害を持つユーザーに正確に情報を伝えることができます。
2. 実戦:<thead>、<tbody>、<tfoot> を使う
それでは、実際にこれらの要素をどのように実装するかを見ていきましょう。
2.1 基本構造
これらの要素を使用したテーブルの基本構造は以下の通りです。
<table>
<thead>
<tr>
<th>見出し 1</th>
<th>見出し 2</th>
<th>見出し 3</th>
</tr>
</thead>
<tbody>
<tr>
<td>データ 1</td>
<td>データ 2</td>
<td>データ 3</td>
</tr>
<tr>
<td>データ 4</td>
<td>データ 5</td>
<td>データ 6</td>
</tr>
</tbody>
<tfoot>
<tr>
<td>フッター 1</td>
<td>フッター 2</td>
<td>フッター 3</td>
</tr>
</tfoot>
</table>解析:
<thead>は 1 行 (<tr>) と 3 つのヘッダーセル (<th>) を含みます。<tbody>は 2 行のデータを含み、各行には 3 つのデータセル (<td>) があります。<tfoot>は集計データを表す 1 行と 3 つのセルを含みます。
2.2 詳細な例:月間売上レポート
売上データを表示する、より詳細な例を見てみましょう。
<table>
<caption>月間売上レポート</caption>
<thead>
<tr>
<th>月</th>
<th>製品</th>
<th>売上高</th>
</tr>
</thead>
<tbody>
<tr>
<td>1月</td>
<td>コンポーネント A</td>
<td>$100</td>
</tr>
<tr>
<td>1月</td>
<td>コンポーネント B</td>
<td>$150</td>
</tr>
<tr>
<td>2月</td>
<td>コンポーネント A</td>
<td>$120</td>
</tr>
<tr>
<td>2月</td>
<td>コンポーネント B</td>
<td>$180</td>
</tr>
</tbody>
<tfoot>
<tr>
<th colspan="2">合計</th>
<td>$550</td>
</tr>
</tfoot>
</table>解析:
<caption>を追加してテーブルにタイトルを提供しました。<thead>でカラムの見出しを定義しました。<tbody>に実際の売上データを格納しました。<tfoot>で総売上高を表示し、colspan属性を使って「合計」の見出しが 2 カラム分またがるようにしました。
2.3 複数の <tbody> 要素の使用
複数の <tbody> 要素を使用することで、テーブル内で関連する行をグループ化できます。例えば、月ごとに売上データをグループ化する場合:
<table>
<caption>月間売上レポート</caption>
<thead>
<tr>
<th>月</th>
<th>製品</th>
<th>売上高</th>
</tr>
</thead>
<tbody>
<tr>
<th rowspan="2">1月</th>
<td>コンポーネント A</td>
<td>$100</td>
</tr>
<tr>
<td>コンポーネント B</td>
<td>$150</td>
</tr>
</tbody>
<tbody>
<tr>
<th rowspan="2">2月</th>
<td>コンポーネント A</td>
<td>$120</td>
</tr>
<tr>
<td>コンポーネント B</td>
<td>$180</td>
</tr>
</tbody>
<tfoot>
<tr>
<th colspan="2">合計</th>
<td>$550</td>
</tr>
</tfoot>
</table>解析:
- 2 つの
<tbody>要素を使用して、1月と 2月のデータをそれぞれグループ化しました。 - 「月」の見出しに
rowspan属性を使用し、各<tbody>内で 2 行分またがるように設定しました。
3. CSS によるスタイリング
<thead>、<tbody>、および <tfoot> 要素は、CSS を使用して簡単にスタイリングできます。
<style>
thead {
background-color: #f0f0f0; /* 薄いグレーの背景 */
}
tfoot {
background-color: #e0e0e0; /* 少し濃いグレーの背景 */
font-weight: bold; /* 太字 */
}
</style>この CSS コードにより:
<thead>の背景色が薄いグレーになります。<tfoot>の背景色が少し濃いグレーになり、テキストが太字になります。
4. まとめ
本セクションでは、<thead>、<tbody>、および <tfoot> タグについて学びました。
- これらの要素は、テーブル構造にセマンティックな意味を与えます。
- アクセシビリティ、SEO、およびコードのメンテナンス性を向上させます。
- CSS によるスタイリングや JavaScript による操作をより容易にします。