表(table)の書き方 — 3つのタグの入れ子を覚えるだけ
表はタグが多くて難しそうに見えますが、覚えるのは「表・行・マス」の3つだけです。入れ子の順番さえ間違えなければ、必ず組めます。
料金表や比較表など、表を作る場面は意外と多くあります。tableのタグは種類が多く見えますが、基本の構造はとても単純です。
3つの入れ子で考える
- table … 表そのもの。いちばん外側の箱
- tr … 横1行(table row)
- td … 1つのマス(table data)。見出しのマスは th を使う
「表の中に行があり、行の中にマスがある」。この順番だけ守れば表になります。マスを直接 table の中に書くことはできません。
<table>
<tr>
<th>項目</th>
<th>値段</th>
</tr>
<tr>
<td>コーヒー</td>
<td>400円</td>
</tr>
</table>実際に組んでみる
そのままだと罫線も無く見づらいので、CSSを少しだけ当てます。表のCSSでほぼ必ず書くのが border-collapse です。これを書かないと、隣り合うマスの線が二重になります。
border-collapse: collapse を消すと、線が二重になります。行を1つ増やしてみるのもおすすめです。
th と td を使い分ける
見出しのマスは td ではなく th にします。見た目が太字中央寄せになるだけでなく、読み上げ環境が「この列は値段の列です」と伝えられるようになります。太字にしたいだけなら th を使わずCSSで十分です。
マスを結合する
「この行は2列ぶんまとめたい」というときは colspan、縦にまとめたいときは rowspan を使います。数字は「何マスぶんか」です。
colspan の数字を 1 にすると、マスが1つぶんに戻って表が崩れます。結合したぶん、そのマスは書かないのがポイントです。
レイアウトに table を使わない
昔は、ページ全体のレイアウトを table で組む方法が使われていました。いまはやりません。表は「表形式のデータ」のためのものです。横並びにしたいだけなら Flexbox を使ってください。
スマホではみ出す問題
列が多い表は、スマホの画面に収まりません。対策は単純で、表を div で囲んで横スクロールできるようにします。
/* HTML側で <div class="table-wrap"><table>...</table></div> と囲む */
.table-wrap {
overflow-x: auto;
}こうすると、表だけが横に動くようになり、ページ全体が横スクロールする事故を防げます。