TOP

投稿一覧

HTMLのtableタグの基本的な使い方

HTMLのtableタグの基本的な使い方

HTML/CSS

2025.11.28

1. はじめに

Webサイトで情報を整理して見やすく表示したいときに便利なのがtableタグです。商品一覧、料金表、スケジュール表など、日常的に目にする「表」を作ることができます。この記事では、HTML初心者の方向けに、tableタグの基本構造からCSSを使った最低限の装飾を、料金表のサンプルで解説します。まずは基本をしっかり押さえて、tableタグの扱いに慣れていきましょう。

2. 完成見本

tableタグを用いて表のサンプルを用意しました。今回はこれを基に解説していきます。

サービス料金表
アイコン プラン名 料金
アイコン スタンダード 1,000円
アイコン プレミアムA 2,500円
プレミアムB 3,000円
HTML
<table class="sample-table">
  <tr>
    <th colspan="3" class="title-cell">サービス料金表</th>
  </tr>
  <tr>
    <th>アイコン</th>
    <th>プラン名</th>
    <th>料金</th>
  </tr>
  <tr>
    <td><img src="image/icon_a.png" alt="アイコン"></td>
    <td>スタンダード</td>
    <td>1,000円</td>
  </tr>
  <tr>
    <td rowspan="2"><img src="image/icon_b.png" alt="アイコン"></td>
    <td>プレミアムA</td>
    <td>2,500円</td>
  </tr>
  <tr>
    <td>プレミアムB</td>
    <td>3,000円</td>
  </tr>
</table>
CSS
.sample-table {
    margin: 30px 0;
    width: 100%;
    border-collapse: collapse;
    background-color: #fafafa;
}

.sample-table th,
.sample-table td {
    width: 40%;
    border: 1px solid #ccc;
    padding: 10px;
    text-align: center;
    vertical-align: middle;
    background-color: #dbffdb;
}

.sample-table th:nth-of-type(1),
.sample-table td:nth-of-type(1){
    width: 20%;
}

.sample-table .title-cell {
    background-color: #4caf50;
    color: #fff;
    font-size: 1.2em;
}

.sample-table img{
    height: 40px;
}

3. table各行の解説

前の章で紹介した見本がどのように組み立てられているのか、構造に沿って解説していきます。実際の手順とセットで理解すると、どんな表でも応用ができるようになります。tableタグは、table → tr(行) → th(見出しセル) / td(データセル) という基本構造で成り立っています。それを踏まえてtableタグ内を一行ずつみていきます。また、視認性のためCSSが予め設定されています。

3.1. 1行目 タイトル行

<table class="sample-table">
  <tr>
    <th colspan="3" class="title-cell">サービス料金表</th>
  </tr>
</table>
サービス料金表

この行は表全体のタイトル(見出し帯)になるので見出しとなるthを使います。さらに、thにcolspan=”3″を付けて横3列分を1つのセルに結合しています。また、ここで「3列分」と宣言しているため、この後に続く行は各行が3列分のセル構成である前提になります。

3.2. 2行目 見出し行

<table class="sample-table">
  <tr>
    <th colspan="3" class="title-cell">サービス料金表</th>
  </tr>

  <tr>
    <th>アイコン</th>
    <th>プラン名</th>
    <th>料金</th>
  </tr>
</table>
サービス料金表
アイコン プラン名 料金

次に各列の見出しをthで並べていきます。ここで列の「意味」を決めるので、今回は1列目=アイコン、2列目=プラン名、3列目=料金の順に合わせて値を入れます。こうすることで、1行目3列分の結合セルとの整合性がとれます。

3.3. 3行目 データ行その1

<table class="sample-table">
  <tr>
    <th colspan="3" class="title-cell">サービス料金表</th>
  </tr>

  <tr>
    <th>アイコン</th>
    <th>プラン名</th>
    <th>料金</th>
  </tr>

  <tr>
    <td><img src="image/icon_a.png" alt="アイコン"></td>
    <td>スタンダード</td>
    <td>1,000円</td>
  </tr>
</table>
サービス料金表
アイコン プラン名 料金
アイコン スタンダード 1,000円

通常のデータ行です。tdを3つ並べて、上の見出し行と列の対応を保っています。今回はセル内に画像が使われているのでセル内にimgタグが入っています。このように、セルには画像やリンクなどテキスト以外の要素も入れることができます。

3.4. 4行目 データ行その2

<table class="sample-table">
  <tr>
    <th colspan="3" class="title-cell">サービス料金表</th>
  </tr>

  <tr>
    <th>アイコン</th>
    <th>プラン名</th>
    <th>料金</th>
  </tr>

  <tr>
    <td><img src="image/icon_a.png" alt="アイコン"></td>
    <td>スタンダード</td>
    <td>1,000円</td>
  </tr>

  <tr>
    <td rowspan="2"><img src="image/icon_b.png" alt="アイコン"></td>
    <td>プレミアムA</td>
    <td>2,500円</td>
  </tr>
</table>
サービス料金表
アイコン プラン名 料金
アイコン スタンダード 1,000円
アイコン プレミアムA 2,500円

ここでrowspan=”2″を使い、1列目のtdタグをこの行と次行(2行分)を結合させる設定をしておきます。今回は一列目に画像があるので、「同じアイコンが4行目と5行目の両行にまたがる」ようなレイアウトになります。また、rowspanを使うと次の(下の)行ではその列分のtdタグを書かないことに注意してください。具体的には、次行で1列目のtdタグを省略します。

3.5. 5行目 データ行その3

<table class="sample-table">
  <tr>
    <th colspan="3" class="title-cell">サービス料金表</th>
  </tr>

  <tr>
    <th>アイコン</th>
    <th>プラン名</th>
    <th>料金</th>
  </tr>

  <tr>
    <td><img src="image/icon_a.png" alt="アイコン"></td>
    <td>スタンダード</td>
    <td>1,000円</td>
  </tr>

  <tr>
    <td rowspan="2"><img src="image/icon_b.png" alt="アイコン"></td>
    <td>プレミアムA</td>
    <td>2,500円</td>
  </tr>

  <tr>
    <td>プレミアムB</td>
    <td>3,000円</td>
  </tr>
</table>
サービス料金表
アイコン プラン名 料金
アイコン スタンダード 1,000円
アイコン プレミアムA 2,500円
プレミアムB 3,000円

前行のrowspan=”2″により、1列目はすでに上の行と結合されているため、ここには 2列目・3列目のみを書きます。行内のセル数が見かけ上「2つ」でも、表全体の列数は変わらず3列分として扱われるます。このようにcolspan/rowspanを混ぜると列数や行数の数え方が複雑になります。常に列数の総合性を意識してください。

4. CSSの説明

完成見本では次のようなCSSを使用しました。

.sample-table {
    margin: 30px 0;
    width: 100%;
    border-collapse: collapse;
    background-color: #fafafa;
}

.sample-table th,
.sample-table td {
    width: 40%;
    border: 1px solid #ccc;
    padding: 10px;
    text-align: center;
    vertical-align: middle;
    background-color: #dbffdb;
}

.sample-table th:nth-of-type(1),
.sample-table td:nth-of-type(1){
    width: 20%;
}

.sample-table .title-cell {
    background-color: #4caf50;
    color: #fff;
    font-size: 1.2em;
}

.sample-table img{
    height: 40px;
}

この中でもsample-tableクラスのborder-collapseはtableでは必須の専用のプロパティで、セル間の罫線を設定します。今回はborder-collapseで設定できる代表的な値を2つ紹介します。

4.1. border-collapse: collapse(線をまとめる)

collapseは隣り合うセルの罫線を一本にまとめる設定です。今回の見本でcollapseが使われているように、線を均一にした表を作る際にオススメです。

サービス料金表
アイコン プラン名 料金
アイコン スタンダード 1,000円
アイコン プレミアムA 2,500円
プレミアムB 3,000円

4.2. border-collapse: separate(線を分けて描画する)

separateは、各セルが独立した箱として扱われる設定です。セル同士の枠線が独立するため、線が重なる部分があると太く見えることがあります。また、プロパティ値がseparateの場合、枠線が独立するためセル間に余白(セル間距離)を作ることができます。その際に利用できるプロパティにborder-spacingというものがあり表内で余白を持たせたいときや二重線を表したいときに便利です。

.sample-table {
    margin: 30px 0;
    width: 100%;
    border-collapse: separate;
    border-spacing: 10px;
    background-color: #fafafa;
}
サービス料金表
アイコン プラン名 料金
アイコン スタンダード 1,000円
アイコン プレミアムA 2,500円
プレミアムB 3,000円

5. まとめ

tableタグは表組みだけでなく、レスポンシブに対応しても要素が崩れにくく、縦横のレイアウトを簡単に整えられる点でも便利な要素です。勝手にレイアウトが変わらないためカレンダーや電卓など横幅を変えても位置が崩れないものを表示したいときなどに有効です。こうしたメリットを活かすことで、表以外でも扱うことができるタグです。

投稿一覧に戻る

プロフィール画像

BugAliKey

IT勉強中、趣味アニメ鑑賞、好きな食べ物カレー