読み込み中...

HTMLテーブルを極める!使い方・カスタマイズの3ステップ解説

HTMLテーブルの基本構造とカスタマイズ方法を解説するイメージ HTML
この記事は約18分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

この記事では、HTMLのtableタグを使ったテーブルの作成方法について、初心者からプロフェッショナルまでが理解できるように詳しく解説します。

ウェブページ内で情報を整理して表示する基本的な手段として、tableタグは非常に重要です。

ここではその構造からスタイリングの方法まで、幅広くカバーします。

●HTMLのtableタグとは

HTMLでテーブルを作成する際には、タグが使用されます。

このタグは行や列に整理されたデータを表示するためのもので、多くのウェブサイトで情報を整理するために利用されています。

○tableタグの基本

<table>タグを使用することで、HTMLページ上に表形式のデータを作成できます。

このタグは<tr>(テーブル行)、<td>(テーブルデータセル)、<th>(テーブルヘッダーセル)といった子要素と組み合わせて使用されることが一般的です。

基本的なテーブルは、これらの要素を適切に配置することで構成されます。

□tableタグの定義と基本的な構造

<table>タグは、テーブルの開始と終了を示すために用いられます。

このタグ内には<tr>タグが入り、それぞれの<tr>タグの中には<th>や<td>が入ることで、テーブルの行と列が形成されます。

例えば、簡単な3列2行のテーブルは下記のようにコードを記述します。

<table>
  <tr>
    <th>ヘッダー1</th>
    <th>ヘッダー2</th>
    <th>ヘッダー3</th>
  </tr>
  <tr>
    <td>データ1</td>
    <td>データ2</td>
    <td>データ3</td>
  </tr>
</table>

このコードは、表のヘッダーとして「ヘッダー1」「ヘッダー2」「ヘッダー3」を持ち、2行目にデータを表示しています。

□要素の解説:table, tr, td, th

<table>タグはテーブル全体を定義します。

一方で<tr>は「table row」の略で、テーブルの行を定義します。

各<tr>タグの中には、<th>または<td>タグが含まれ、これらはそれぞれテーブルのヘッダーセルとデータセルを表します。

<th>タグは列の見出しを表すために用いられ、<td>タグは実際のデータが入力されるセルです。

これらのタグを組み合わせることで、情報が整理された読みやすいテーブルを作成することができます。

●tableタグの使い方

HTMLでテーブルを効果的に使用するには、その基本的な使い方を理解することが重要です。

ここでは、シンプルなテーブルの作成から始め、徐々に複雑な機能を追加していく方法を解説します。

○サンプルコード1:基本的なテーブル作成

最も基本的なテーブルは、<table>、<tr>、<td>タグを使って作成します。

下記のサンプルコードでは、3行3列のシンプルなテーブルを作成しています。

<table>
  <tr>
    <td>行1, 列1</td>
    <td>行1, 列2</td>
    <td>行1, 列3</td>
  </tr>
  <tr>
    <td>行2, 列1</td>
    <td>行2, 列2</td>
    <td>行2, 列3</td>
  </tr>
  <tr>
    <td>行3, 列1</td>
    <td>行3, 列2</td>
    <td>行3, 列3</td>
  </tr>
</table>

このコードは、各セルに「行番号, 列番号」という内容を表示する単純なテーブルを生成します。

○サンプルコード2:テーブルにヘッダーを追加する

テーブルには見出しをつけることができ、これには<th>タグを使用します。

下記のコードでは、先ほどのテーブルにヘッダー行を追加しています。

<table>
  <tr>
    <th>ヘッダー1</th>
    <th>ヘッダー2</th>
    <th>ヘッダー3</th>
  </tr>
  <tr>
    <td>行1, 列1</td>
    <td>行1, 列2</td>
    <td>行1, 列3</td>
  </tr>
  <tr>
    <td>行2, 列1</td>
    <td>行2, 列2</td>
    <td>行2, 列3</td>
  </tr>
</table>

この変更により、テーブルの最初の行が見出しとして強調表示され、情報の整理が容易になります。

○サンプルコード3:テーブルのセルを結合する

テーブルのセルを結合するには、<td>や<th>タグのcolspan属性やrowspan属性を使用します。

下記の例では、最初の行の最初のセルを横に3つ分結合しています。

<table>
  <tr>
    <th colspan="3">結合されたヘッダー</th>
  </tr>
  <tr>
    <td>行2, 列1</td>
    <td>行2, 列2</td>
    <td>行2, 列3</td>
  </tr>
</table>

このコードは、最上行に一つの大きなヘッダーを持つテーブルを生成し、視覚的にも情報のまとまりが明確になります。

○サンプルコード4:テーブルのスタイリング(CSS)

テーブルの見た目をカスタマイズするにはCSSを使用します。

下記のコードでは、テーブルのセルに枠線を追加し、ヘッダーに色を付けています。

<style>
  table, th, td {
    border: 1px solid black;
    border-collapse: collapse;
  }
  th {
    background-color: #f2f2f2;
  }
</style>
<table>
  <tr>
    <th>ヘッダー1</th>
    <th>ヘッダー2</th>
    <th>ヘッダー3</th>
  </tr>
  <tr>
    <td>行1, 列1</td>
    <td>行1, 列2</td>
    <td>行1, 列3</td>
  </tr>
  <tr>
    <td>行2, 列1</td>
    <td>行2, 列2</td>
    <td>行2, 列3</td>
  </tr>
</table>

このスタイル設定により、テーブルはよりプロフェッショナルで読みやすい形に整えられ、ウェブページの全体的なデザインと調和するように見せることができます。

●よくあるエラーと対処法

HTMLテーブルを使用する際には、いくつかの一般的なエラーが発生する可能性があります。

これらのエラーを理解し、適切に対処する方法を学ぶことは、効率的なウェブ開発に不可欠です。

○セルが正しく表示されない場合の対処法

テーブルのセルが予期せず表示されない、または期待したレイアウトにならない場合、最初に確認すべきはHTMLコードの構造です。

セルが正しくタグ内に配置されているか、また各タグのタグの数が一致しているかを確認します。

<table>
  <tr>
    <td>セル1</td>
    <td>セル2</td>
    <td>セル3</td>
  </tr>
  <tr>
    <td>セル4</td>
    <td>セル5</td>
    <td>セル6</td>
  </tr>
</table>

この構造では、各行に3つのセルがあり、すべての行が均等に配置されています。

セルの数が不均等な場合、テーブルの表示が乱れる原因となります。

また、CSSのスタイリングが原因で表示が崩れる場合もありますので、CSSの設定も見直してください。

○レスポンシブデザインでのテーブル表示問題の解決

ウェブページが異なるデバイスで閲覧される場合、テーブルのレスポンシブデザインが重要です。

テーブルがスクリーンサイズに応じて適切に表示されるようにするため、CSSの@mediaクエリを利用する方法があります。

下記のコードでは、デバイスの幅に応じてテーブルのフォントサイズを変更し、スクロール可能にするスタイルを適用しています。

<style>
  table {
    width: 100%;
    border-collapse: collapse;
  }
  th, td {
    border: 1px solid black;
    padding: 8px;
    text-align: left;
  }
  @media (max-width: 600px) {
    table {
      display: block;
      overflow-x: auto;
    }
    th, td {
      font-size: 12px;
    }
  }
</style>
<table>
  <tr>
    <th>見出し1</th>
    <th>見出し2</th>
    <th>見出し3</th>
  </tr>
  <tr>
    <td>データ1</td>
    <td>データ2</td>
    <td>データ3</td>
  </tr>
</table>

このスタイル設定により、小さなデバイスでもテーブルの全内容がスクロールして閲覧可能になります。

このようにレスポンシブなデザインを取り入れることで、どのデバイスからでもユーザーが情報を簡単にアクセスできるようになります。

●tableタグの応用例

HTMLのtableタグは、データ表示の基本から、より複雑なインタラクティブな機能まで、幅広く応用することが可能です。

ここでは、特に実用的ないくつかの応用例を紹介し、それぞれに対する詳細なサンプルコードを提供します。

○サンプルコード5:インタラクティブなテーブルの作成

インタラクティブなテーブルは、ユーザーの操作に応じて内容が変化するテーブルです。

例えば、列の並び替えやデータのフィルタリング機能を持たせることができます。

下記のサンプルでは、JavaScriptを使用して、テーブルの各列をクリックすることで並び替える機能を実装しています。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>インタラクティブなテーブル</title>
<style>
  th {
    cursor: pointer;
  }
</style>
</head>
<body>
<table id="sortable-table">
  <tr>
    <th onclick="sortTable(0)">名前</th>
    <th onclick="sortTable(1)">年齢</th>
  </tr>
  <tr>
    <td>山田太郎</td>
    <td>30</td>
  </tr>
  <tr>
    <td>佐藤花子</td>
    <td>25</td>
  </tr>
</table>

<script>
function sortTable(column) {
  var table, rows, switching, i, x, y, shouldSwitch;
  table = document.getElementById("sortable-table");
  switching = true;
  while (switching) {
    switching = false;
    rows = table.rows;
    for (i = 1; i < (rows.length - 1); i++) {
      shouldSwitch = false;
      x = rows[i].getElementsByTagName("TD")[column];
      y = rows[i + 1].getElementsByTagName("TD")[column];
      if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
        shouldSwitch = true;
        break;
      }
    }
    if (shouldSwitch) {
      rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
      switching = true;
    }
  }
}
</script>
</body>
</html>

このコードは、テーブルのヘッダーをクリックすることで、指定した列のデータに基づいて行を並び替える機能を実現します。

○サンプルコード6:データを動的に表示するテーブル

Webアプリケーションにおいて、サーバーから送信されたデータを動的にテーブルに表示することは一般的な要件の一つです。

下記のサンプルコードは、APIから取得したデータをテーブルに表示する方法を表しています。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>動的データテーブル</title>
</head>
<body>
<table id="data-table">
  <tr>
    <th>名前</th>
    <th>年齢</th>
  </tr>
</table>

<script>
fetch('https://api.example.com/data')
  .then(response => response.json())
  .then(data => {
    data.forEach(person => {
      let row = document.createElement('tr');
      let nameCell = document.createElement('td');
      nameCell.textContent = person.name;
      let ageCell = document.createElement('td');
      ageCell.textContent = person.age;
      row.appendChild(nameCell);
      row.appendChild(ageCell);
      document.getElementById('data-table').appendChild(row);
    });
  });
</script>
</body>
</html>

このコードは、APIからJSON形式のデータを取得し、そのデータをテーブルに追加していく処理を行います。

○サンプルコード7:複雑なデータ構造の管理

複雑なデータ構造を持つ情報をテーブル形式で管理する場合、JavaScriptを用いてデータ操作やビジュアル表現を改善する方法が有効です。

下記のサンプルは、ネストされたデータを展開・折りたたみ可能なテーブルとして表示する方法を表しています。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ネストデータテーブル</title>
</head>
<body>
<table id="complex-table">
  <!-- ここにJavaScriptを用いて動的に行を追加 -->
</table>

<script>
// 仮想のネストされたデータ例
var data = [
  {
    name: "山田太郎",
    details: {
      age: 30,
      location: "東京"
    }
  },
  {
    name: "佐藤花子",
    details: {
      age: 25,
      location: "大阪"
    }
  }
];

data.forEach(item => {
  let row = document.createElement('tr');
  let nameCell = document.createElement('td');
  nameCell.textContent = item.name;
  let detailsCell = document.createElement('td');
  detailsCell.textContent = `年齢: ${item.details.age}, 場所: ${item.details.location}`;
  row.appendChild(nameCell);
  row.appendChild(detailsCell);
  document.getElementById('complex-table').appendChild(row);
});
</script>
</body>
</html>

このコードは、各行に対して詳細情報を展開する形でデータを表示し、ユーザーが一目で理解できるような構造を提供します。

●エンジニアなら知っておくべき豆知識

テーブルを設計する際には、ただ機能的であるだけでなく、アクセシビリティや最新のHTML5機能を活用することが重要です。

ここでは、テーブル作成時に役立ついくつかの豆知識を紹介します。

○豆知識1:テーブルのアクセシビリティ向上のためのtips

ウェブアクセシビリティを考慮したテーブル作成は、すべてのユーザーが情報を平等にアクセスできるようにするために重要です。

  1. テーブルには常にタグを使用して、テーブルの内容を説明するキャプションを提供する
  2. タグで列や行の見出しを明確にし、scope属性を使用して、それが行見出し(row)なのか列見出し(col)なのかを指定する
  3. 複雑なテーブルでは、headers属性をタグに追加して、関連する要素を指定することで、スクリーンリーダーのユーザーがデータを理解しやすくする

下記のコードは、アクセシビリティを考慮したテーブルの例を表しています。

<table>
  <caption>商品価格表</caption>
  <tr>
    <th scope="col">商品名</th>
    <th scope="col">価格</th>
  </tr>
  <tr>
    <td headers="商品名">ペン</td>
    <td headers="価格">100円</td>
  </tr>
</table>

この構造は、すべてのユーザーがテーブルの内容を容易に把握できるよう支援します。

○豆知識2:最新のHTML5機能を使ったテーブルの改善

HTML5は、フォーム要素のバリデーションやグラフィックスの表示など、テーブルに関連するさまざまな機能を提供しています。

たとえば、下記のようなHTML5のinputタイプをテーブル内で使用することで、ユーザー入力の取り扱いを改善できます。

  • type="number" -> 数値の入力を要求するフィールドに使用します。
  • type="date" -> 日付選択器を提供するフィールドに使用します。

下記の例では、テーブル内でこれらの入力タイプを使用しています。

<table>
  <tr>
    <th>商品名</th>
    <th>数量</th>
    <th>注文日</th>
  </tr>
  <tr>
    <td>ペン</td>
    <td><input type="number" name="quantity" min="1" max="100"></td>
    <td><input type="date" name="order-date"></td>
  </tr>
</table>

このコードは、数量と注文日をユーザーが直接テーブル内で入力できるように設計されており、データ入力の正確性と利便性を向上させます。

まとめ

この記事では、HTMLのtableタグの基本的な使い方から応用技術までを幅広く解説しました。

HTMLテーブルの使い方をマスターすることで、ウェブ開発の幅が広がり、より効果的なデータ表示が可能になります。

これらの知識を活用して、さまざまなウェブプロジェクトに挑戦してみてください。