【HTML】tableタグ(表)の基本構造と正しいマークアップ規則

HTML

HTMLでデータを整理して見やすく表示するための <table> タグ。 要素が縦横に連なるため構造が複雑になりやすく、正しい順番でタグを配置しないと構文エラーや型崩れの原因になる。後からコードをコピペして使い回せるようにするための個人メモ。

1. 基本構造と最小構成に必要な4つのタグ

HTMLの表は、「行(横の並び)」をベースにして、その中に「列(セルの塊)」を詰め込んでいく構造になっている。

  • <table> 表の全体を囲むコンテナ。
  • <tr>(Table Row): 表の「行(横一行)」を定義する。
  • <th>(Table Header): 表の「見出しセル」。文字が太字になり、中央揃えになる。
  • <td>(Table Data): 表の「データ(中身)セル」。

<table>は枠が無いが、<tableborder="1">とすると枠が表示され、数字を変えると線種が変わる。

📌 基本的な表のコード例

2行×3列(見出し1行 + データ1行)の最小構成。

HTML
<table border="1">
  <tr>
    <th>商品名</th>
    <th>価格</th>
    <th>在庫</th>
  </tr>
  <tr>
    <td>HTML参考書</td>
    <td>¥2,400</td>
    <td>あり</td>
  </tr>
  <tr>
    <td>PHP参考書</td>
    <td>¥2,600</td>
    <td>なし</td>
  </tr>
</table>

2. 実装時の重要規則(Tips / 注意点)

ルール1:レイアウト目的(枠組み)で <table> を使わない

昔のWeb制作では、画面の左右にメニューを配置するなどの「ページ全体のレイアウト」に <table> タグが使われていたが、現在は完全にNG(非推奨)

  • 表タグはあくまで「表形式のデータ」を表示するためだけのもの。
  • 画面のレイアウト(要素を横に並べるなど)を行いたい場合は、必ず CSS(FlexboxやGridレイアウト) を使用する。

ルール2:<tr> の直下には <th> か <td> しか置けない

<ul> の直下に <li> しか置けないルールと同様に、<tr>(行)のすぐ内側に直接テキストを書いたり、<div> などの別タグを挟むのはマークアップ違反となる。

  • ❌ 誤ったマークアップ:HTML<tr> <div><td>データ</td></div> </tr>
  • ⭕ 正しいマークアップ:HTML<tr> <td><div>データ</div></td> </tr>

ルール3:セルの横結合(colspan)と縦結合(rowspan)

複数のセルを1つに繋げたい場合は、<th><td> タグに属性を追加する。値には「何個分のセルを結合するか」の数値を指定。

  • 横に結合する:colspan="結合する列数"(Column Span)
  • 縦に結合する:rowspan="結合する行数"(Row Span)
HTML
<table border="1">
<tr>
    <th>商品名</th>
    <th>数量</th>
    <th>金額</th>
  </tr>
  <tr>
    <td>HTML参考書</td>
    <td>1</td>
    <td>¥2,400</td>
  </tr>
  <tr>
    <td>CSS参考書</td>
    <td>1</td>
    <td>¥2,000</td>
  </tr>
  <tr>
    <td colspan="2">合計</td>
    <td>¥4,400</td>
  </tr>
</table>

3. より丁寧な表にするための応用タグ(構造化)

大規模な表や、SEO・アクセシビリティを強化する場合は、表の中身をさらに <thead>(頭)、<tbody>(体)、<tfoot>(足)にグループ分けする。

HTML
<table border="1">
  <caption>【2026年度】売上表</caption> <thead>
    <tr>
      <th></th>
      <th>売上</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1月</td>
      <td>¥100,000</td>
    </tr>
  </tbody>
  <tfoot>
    <tr>
      <td>総計</td>
      <td>¥100,000</td>
    </tr>
  </tfoot>
</table>

まとめ(振り返り用チェックリスト)

  • 表のレイアウト(横並び)目的で <table> を使っていないか(CSSで対応しているか)
  • <tr> の直下に <th><td> 以外のタグが混入していないか
  • セルを結合(colspan / rowspan)した際、全体の列数・行数の計算がズレて崩れていないか
  • 必要に応じて表のタイトルを表す <caption> を設置しているか

コメント