<table要素> - テーブル
公開日:
table要素は、表を作成するための要素です。
概要
- 名前
- table
- カテゴリー
- Flow content
- Palpable content
- 配置できる場所
- Flow contentが期待される場所。
- コンテンツモデル
- 任意でcaption要素、それに続く0個以上のcongroup要素、任意でそれに続くthead要素、それに続く0個以上のtbody要素、または1個以上のtr要素、任意でそれに続くtfoot要素。
- タグの省略
- 開始タグも終了タグも省略できません。
- DOM Interface
- HTMLTableElement
- デフォルトのスタイル
table { display: table; border-collapse: separate; border-spacing: 2px; border-color: grey; }
- 仕様書
- https://html.spec.whatwg.org/multipage/tables.html#the-table-element
属性
グローバル属性
全てのタグで利用できるグローバル属性を指定できます。
説明
ルール
table要素の中身は、順番を守って子要素を配置していかなければいけません。そのルールは次の通りです。例えば、caption要素は最初の子要素としてのみ配置できます。
行
table要素の使い方は簡単です。セル(td要素)を任意の数だけ用意して、それをtr要素でまとめて下さい。それが1つの行になります。行を集めれば、テーブルになります。ちなみにセルとは項目のことです。当然ですが、セルの個数を合わせないと表示が崩れてしまいます。
HTML
<table>
<!-- 1つ目の行 (セルをまとめる) -->
<tr>
<!-- 3個のセル -->
<td>リンゴ</td>
<td>赤</td>
<td>果物</td>
</tr>
<!-- 2つ目の行 (セルをまとめる) -->
<tr>
<!-- 3個のセル -->
<td>キャベツ</td>
<td>緑</td>
<td>野菜</td>
</tr>
</table>
ヘッダーセル
ヘッダーの役割を果たすセルだけは、td要素ではなく、th要素を使います。ヘッダーセルは先頭の行だけでなく、もちろん、各行の先頭にも配置できます。
HTML
<table>
<!-- 1つ目の行 -->
<tr>
<th>名前</th>
<th>色</th>
<th>種類</th>
</tr>
<!-- 2つ目の行 -->
<tr>
<td>リンゴ</td>
<td>赤</td>
<td>果物</td>
</tr>
<!-- 3つ目の行 -->
<tr>
<td>キャベツ</td>
<td>緑</td>
<td>野菜</td>
</tr>
</table>
キャプション
caption要素を利用することで、テーブルの上部(枠外)に見出しや説明を表示することができます。利用するときは、先頭に配置しなければいけません。下記の例では見出しと説明文を含めていますが、単純に見出しのテキストだけを含めても大丈夫です。
HTML
<table>
<!-- キャプション -->
<caption>
<strong>テーブルの見出し</strong>
<p>このテーブルを説明する文章です。</p>
</caption>
<!-- 1つ目の行 -->
<tr>
<th>名前</th>
<th>色</th>
<th>種類</th>
</tr>
<!-- 2つ目の行 -->
<tr>
<td>リンゴ</td>
<td>赤</td>
<td>果物</td>
</tr>
<!-- 3つ目の行 -->
<tr>
<td>キャベツ</td>
<td>緑</td>
<td>野菜</td>
</tr>
</table>
列のグループ化
colgroup要素やcol要素を利用すると、列(縦方向)に串刺してスタイルを適用することができます。span属性に何列分の縦グループかを指定して下さい。caption要素の直後、ない場合は先頭に配置して下さい。適用できるスタイルは下記の4種類のみです。
- background
- border (
border-collapse: collapse;
の場合のみ) - width
- visibility
HTML
<table>
<!-- 縦方向に串刺し -->
<colgroup span="2" class="aaa"></colgroup><!-- 2列分 (1列目と2列目) -->
<colgroup span="1" class="bbb"></colgroup><!-- 1列分 (3列目) -->
<!-- 1つ目の行 -->
<tr>
<th>名前</th>
<th>色</th>
<th>種類</th>
</tr>
<!-- 2つ目の行 -->
<tr>
<td>リンゴ</td>
<td>赤</td>
<td>果物</td>
</tr>
<!-- 3つ目の行 -->
<tr>
<td>キャベツ</td>
<td>緑</td>
<td>野菜</td>
</tr>
</table>
CSS
.aaa {
background-color: red ;
}
.bbb {
background-color: blue ;
}
列またぎ
td要素やth要素にcolspan属性を指定すると、後続の列にまたがるセルにすることができます。またぐ数だけ、後続のセルを省略しなければいけません。
HTML
<table>
<!-- 1つ目の行 -->
<tr>
<!-- 3個分のセル -->
<td>AAA</td>
<td>BBB</td>
<td>CCC</td>
</tr>
<!-- 2つ目の行 -->
<tr>
<!-- 3個分のセル -->
<td colspan="2">DDD</td>
<td>FFF</td>
</tr>
<!-- 3つ目の行 -->
<tr>
<!-- 3個分のセル -->
<td>GGG</td>
<td colspan="2">HHH</td>
</tr>
</table>
行またぎ
td要素やth要素にrowspan属性を指定すると、後続の行にまたがるセルにすることができます。またぐ数だけ、後続のセルを省略しなければいけません。
HTML
<table>
<!-- 1つ目の行 -->
<tr>
<!-- 3個分のセル -->
<td>AAA</td>
<td rowspan="3">BBB</td>
<td>CCC</td>
</tr>
<!-- 2つ目の行 -->
<tr>
<!-- 3個分のセル -->
<td>DDD</td>
<td>FFF</td>
</tr>
<!-- 3つ目の行 -->
<tr>
<!-- 3個分のセル -->
<td>GGG</td>
<td>III</td>
</tr>
</table>
アウトライン
人間ではなく、ユーザーエージェントがテーブルの内容をより解釈できるよう、アウトラインを示しましょう。ドキュメントにヘッダー、ボディ、フッターがあるように、テーブルにもヘッダー、ボディ、フッターを定義することができます。方法は簡単で、該当する行を囲むだけです。これらは該当する行がなければ省略してかまいません。
HTML
<p>ヘッダーを赤文字、ボディを青文字、フッターを緑文字で表示しています。</p>
<table>
<!-- caption要素 -->
<caption>見出し</caption>
<!-- colgroup要素 -->
<!-- ヘッダー -->
<thead>
<tr>
<th>名前</th>
<th>日付</th>
<th>点数</th>
</tr>
</thead>
<!-- ボディ -->
<tbody>
<tr>
<td>鈴木</td>
<td>2015/12/31</td>
<td>99</td>
</tr>
<tr>
<td>佐藤</td>
<td>2016/03/12</td>
<td>63</td>
</tr>
<tr>
<td>田中</td>
<td>2013/09/21</td>
<td>77</td>
<tr>
</tbody>
<!-- フッター -->
<tfoot>
<tr>
<th colspan="2">平均点</th>
<td>79.6</td>
</tr>
<tr>
<th colspan="2">合計点</th>
<td>239</td>
</tr>
</tfoot>
</table>
注意点があって、tbody要素とtr要素を同じtable要素の子要素にしてはいけません。
HTML
<!-- tbody要素とtr要素は兄弟になってはいけない -->
<table>
<tbody> ... </tbody>
<tr> ... </tr>
</table>
サンプルコード
HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>【デモ】<table要素> - テーブル</title>
<link rel="canonical" href="https://syncer.jp/Web/HTML/Reference/Element/table/">
<style>
body {
background-color: #fff ;
}
.has-border {
border-collapse: collapse ;
width: 80% ;
}
.has-border, .has-border th, .has-border td {
border: 1px solid #000 ;
}
</style>
</head>
<body>
<p>table要素は、複数の項目を表形式で表示するための要素です。</p>
<h2>デフォルト</h2>
<p>スタイルシートを適用していないデフォルトの表示です。</p>
<table>
<caption>
<strong>成績表</strong>
<p>〜月〜日に行われた架空のテストの成績を表にしています。</p>
</caption>
<thead>
<tr>
<th>名前</th>
<th>点数</th>
<th>ランク</th>
</tr>
</thead>
<tbody>
<tr>
<td>鈴木</td>
<td>86</td>
<td>B</td>
</tr>
<tr>
<td>田中</td>
<td>97</td>
<td>A</td>
</tr>
<tr>
<td>佐藤</td>
<td>77</td>
<td>C</td>
</tr>
<tr>
<td>山田</td>
<td>57</td>
<td>D</td>
</tr>
</tbody>
<tfoot>
<tr>
<td>あいうえお順</td>
<td>100点満点中</td>
<td>Aを最高とした5段階評価</td>
</tr>
</tfoot>
</table>
<h2>枠線あり</h2>
<p>スタイルシートで枠線を付けた場合です。</p>
<table class="has-border">
<caption>
<strong>成績表</strong>
<p>〜月〜日に行われた架空のテストの成績を表にしています。</p>
</caption>
<thead>
<tr>
<th>名前</th>
<th>点数</th>
<th>ランク</th>
</tr>
</thead>
<tbody>
<tr>
<td>鈴木</td>
<td>86</td>
<td>B</td>
</tr>
<tr>
<td>田中</td>
<td>97</td>
<td>A</td>
</tr>
<tr>
<td>佐藤</td>
<td>77</td>
<td>C</td>
</tr>
<tr>
<td>山田</td>
<td>57</td>
<td>D</td>
</tr>
</tbody>
<tfoot>
<tr>
<td>あいうえお順</td>
<td>100点満点中</td>
<td>Aを最高とした5段階評価</td>
</tr>
</tfoot>
</table>
</body>
</html>