テーブル

次に紹介するのはテーブルです。テーブルとは、のことです。つまり、次のようなものですね。

メニュー値段
醤油ラーメン¥700
味噌ラーメン¥750
塩ラーメン¥700

このような表を作るには、table要素を使います。table要素があることで、「そこに表がある」ということを表します。表の中身はtable要素の中に記述します。

次に表はいくつかの「行」からなっています。さっきの例の場合、4つの行がありますね。この行1つをtr要素で表します。つまり、table要素の中にはいくつかのtr要素が並ぶことになります。

さらに、各行はいくつかの「セル」からなっています。このセルが、テーブルの1つ1つのマスです。このセルを表す要素がtd要素です。

セルは行に所属するため、当然td要素はtr要素の子として現れます。つまり、ここまでをまとめると、次のようになります。


<table>
<tr><td>メニュー</td><td>値段</td></tr>
<tr><td>醤油ラーメン</td><td>¥700</td></tr>
<tr><td>味噌ラーメン</td><td>¥750</td></tr>
<tr><td>塩ラーメン</td><td>¥700</td></tr>
</table>

table要素の中に4つのtr要素があり、各tr要素の中に2つずつのtd要素があります。

ちなみに、この表を実際に表示してみても、枠線が出ないと思います。実は、枠線を出すにはCSSを使用しないといけません。それはまたあとで解説します。

th要素

さて、最初に例として紹介した表では、一番上の「メニュー」「値段」のセルが太字になるなどして強調されていたかと思います。これは、そこから下に書いてあることがそれぞれ「メニュー」「値段」である、ということを表しているのです。これを、「テーブルの見出し」などと言います。

このテーブルの見出しを表現するには、td要素の代わりにth要素を使います。これはtd要素と同様の使い方をすることができる要素です。つまり、次のようになります。


<table>
<tr><th>メニュー</th><th>値段</th></tr>
<tr><td>醤油ラーメン</td><td>¥700</td></tr>
<tr><td>味噌ラーメン</td><td>¥750</td></tr>
<tr><td>塩ラーメン</td><td>¥700</td></tr>
</table>

ここまでのtr要素・td要素・th要素を使った構造がテーブルの基本です。

table要素

要素の種類

フロー・コンテンツ

テーブルモデル

caption要素・colgroup要素・thead要素・tfoot要素・tbody要素・tr要素。

意味

テーブル。

tr要素

要素の種類

テーブルモデル

td要素・th要素。

意味

テーブルの行。

td要素・th要素

要素の種類

テーブルモデル

セクショニング・ルート(tdのみ)。

フレージング・コンテンツ

属性

rowspan
縦方向の連結。
colspan
横方向の連結。
headers
このセルに対応するth要素のid(スペース区切りで複数指定可)。
scope
(thのみ)セルとの結びつき方。

意味

テーブルのセル。

thead要素

次に紹介するのはthead要素です。これはtable要素の子として置けるもので、tr要素を囲みます。つまり、例えば次のようになります。


<table>
<thead>
  <tr><th>メニュー</th><th>値段</th></tr>
</thead>
<tr><td>醤油ラーメン</td><td>¥700</td></tr>
<tr><td>味噌ラーメン</td><td>¥750</td></tr>
<tr><td>塩ラーメン</td><td>¥700</td></tr>
</table>

thead要素の位置は、このように他のtr要素よりも前の位置と決まっています。

このthead要素は何を現すかというと、テーブルのヘッダーです。th要素のところで出てきたテーブルの見出しですね。

thead要素で囲まれたtr要素の行は、そのテーブルのヘッダーを表しているということになります。そのため、thead要素の子であるtr要素の行のセルには、td要素は使えません。th要素のみです。

1つのtable要素の中にthead要素は1つしかあってはいけません。

thead要素

要素の種類

テーブルモデル

tr要素。

意味

テーブルのヘッダー。

tbody要素

次に紹介するのがtbody要素です。tbody要素は、テーブルの本体部分(ヘッダーなどではない部分)を表します。

これも、thead要素と同じようにtr要素を子に持ちます。つまり、さっきの例は次のようにすることができます。


<table>
<thead>
  <tr><th>メニュー</th><th>値段</th></tr>
</thead>
<tbody>
  <tr><td>醤油ラーメン</td><td>¥700</td></tr>
  <tr><td>味噌ラーメン</td><td>¥750</td></tr>
  <tr><td>塩ラーメン</td><td>¥700</td></tr>
</tbody>
</table>

このようにして、全体がtheadとtbodyの2つの部分に分かれました。

ちなみに、このようにtbodyを使う場合と、tbodyを使わずにtable要素の子として直接trを書く場合がありましたが、これらは両立できません

つまり、tbody要素を使うなら外に出るtr要素がないようにし、tr要素を直接table直下に書くならtbody要素は使ってはいけないということです。

また、tbody要素は1つのtableの中に複数書くことができます。これを利用して、行のグループ化をすることが可能です。次の例を見て下さい。


<table>
<thead>
  <tr><th>メニュー</th><th>値段</th></tr>
</thead>
<tbody>
  <tr><td>醤油ラーメン</td><td>¥700</td></tr>
  <tr><td>味噌ラーメン</td><td>¥750</td></tr>
  <tr><td>塩ラーメン</td><td>¥700</td></tr>
</tbody>
<tbody>
  <tr><td>ライス(小)</td><td>¥200</td></tr>
  <tr><td>ライス(大)</td><td>¥400</td></tr>
  <tr><td>チャーハン</td><td>¥600</td></tr>
</tbody>
</table>

メニューにご飯物が加わりました。このとき、tbody要素が2つになりメニューがラーメンとご飯物に分かれています。このように、tbody要素はテーブルをいくつかのグループに分けることができます。

tbody要素

要素の種類

テーブルモデル

tr要素。

意味

行のブロック。

tfoot要素

さて、今まで「テーブル全体はthead(ヘッダー)とtbody(本体)の2つで構成される」かのように解説してきましたが、実はそうではありません。もう1つあります。それがtfoot要素です。

この要素はテーブルのフッターです。ヘッダーがあるならフッターもあるということですが、つまりテーブルの一番下に表示させておきたい行をこの中に入れておきます。

tfoot要素の位置は特殊です。


<table>
<thead>
  <tr><th>メニュー</th><th>値段</th></tr>
</thead>
<tfoot>
  <tr><th>合計</th><td>¥3350</td></tr>
</tfoot>
<tbody>
  <tr><td>醤油ラーメン</td><td>¥700</td></tr>
  <tr><td>味噌ラーメン</td><td>¥750</td></tr>
  <tr><td>塩ラーメン</td><td>¥700</td></tr>
</tbody>
<tbody>
  <tr><td>ライス(小)</td><td>¥200</td></tr>
  <tr><td>ライス(大)</td><td>¥400</td></tr>
  <tr><td>チャーハン</td><td>¥600</td></tr>
</tbody>
</table>

このように、位置は、tbodyなど(本体部分)の前で、theadの後ろということになります。

ちなみに今回「合計」をフッターとして追加しましたが、全く意味はありませんね。ただ、合計などは結構使う場面があると思います。

さて、実際にこのテーブルを表示させてみるとわかりますが、見た目では「メニュー」「値段」の次の行に「合計」の行が来そうですが、それに反して「合計」の行は一番下になります。フッターは、書く位置はあそこなのに表示される位置は一番下になるのです。

ただ、昔(HTML4時代)はこうだったのですが、HTML5になるともっと直感的な方法が登場しました。


<table>
<thead>
  <tr><th>メニュー</th><th>値段</th></tr>
</thead>
<tbody>
  <tr><td>醤油ラーメン</td><td>¥700</td></tr>
  <tr><td>味噌ラーメン</td><td>¥750</td></tr>
  <tr><td>塩ラーメン</td><td>¥700</td></tr>
</tbody>
<tbody>
  <tr><td>ライス(小)</td><td>¥200</td></tr>
  <tr><td>ライス(大)</td><td>¥400</td></tr>
  <tr><td>チャーハン</td><td>¥600</td></tr>
</tbody>
<tfoot>
  <tr><th>合計</th><td>¥3350</td></tr>
</tfoot>
</table>

このように、テーブルの一番最後に書く方法です。この場合、書いた順番通りに表示されるので直感的です。

この2種類以外の場所に置くことはできません。まとめると、「theadと、tbody(または直接書く場合はtr)の間」または「一番最後」となります。

ちなみにここまで登場してきませんでしたが、thead,tfootの中には複数tr要素を入れることが可能です。つまり、ヘッダーやフッターは複数行であってもいいということです。

tfoot要素

要素の種類

テーブルモデル

tr要素。

意味

テーブルのフッター。

次回はテーブルの応用編です。