tableタグの書き方|HTMLテーブル(表)の作り方を基礎から解説

tableタグの書き方を基礎から解説。thead・tbody・tr・th・tdの役割、colspan/rowspanによるセル結合、caption・scope属性、見やすく整えるCSS(罫線・ゼブラ・ホバー)とスマホ横スクロール、使う場面の判断軸まで整理します。

この記事でわかること

  • <table>基本構造と、theadtbodytrthtd の役割の違い
  • セルの結合colspan=横方向/rowspan=縦方向)の書き方
  • caption でタイトルを付ける方法と、scope 属性によるアクセシビリティ対応
  • 表を見やすく整えるCSS(罫線・ゼブラ・ホバー)とスマホ向けの横スクロール
  • テーブルを使うべき場面と使ってはいけない場面の判断軸

参考: MDN Web Docs「table 要素」(参照)/W3C HTML Living Standard

結論を先に書きます

HTMLのテーブルは、<table> を親に、行を <tr>、見出しセルを <th>、データセルを <td> で組み立てます。

迷ったら、まず table > thead/tbody > tr > th/td の入れ子 を覚えてください。この骨組みさえ崩さなければ、結合やスタイリングは後から足すだけです。

ひとつだけ注意点があります。テーブルは「行と列で意味を持つデータ」を並べるためのタグです。ページのレイアウト目的で使うのは避け、見た目の配置はCSSのFlexboxやGridに任せましょう。

この記事の要点
  • 基本の入れ子は table → tr → th/td。大きな表は theadtbody で行をグループ化
  • colspan=横の結合、rowspan=縦の結合。数値で結合するセル数を指定
  • thscope="col"/"row" を付けると読み上げ環境で関係が正しく伝わる
  • レイアウト目的のテーブルは非推奨。配置はFlexboxやGridで行う

目次

HTMLのテーブルとは

<table> タグを使うと、データを表(テーブル)形式で表示できます。価格の比較、スペックの一覧、スケジュール、集計データの整理など、行と列で意味がつながる情報に向いています。

テーブルは「ただ枠線を引く道具」ではありません。行と列の見出し(<th>)と中身(<td>)を区別することで、ブラウザや読み上げソフトが「どのデータが何の項目か」を理解できる構造になります。

HTMLそのものの位置づけを先に押さえたい方は、HTMLとは?初心者向けにわかりやすく解説もあわせてご覧ください。

テーブルの基本構造

テーブルは入れ子で組み立てます。一番外側が <table>、その中に行 <tr>、行の中にセル(<th> または <td>)が入る形です。

<table>   <thead>     <tr>       <th>名前</th>       <th>年齢</th>       <th>職業</th>     </tr>   </thead>   <tbody>     <tr>       <td>田中太郎</td>       <td>28</td>       <td>Webデザイナー</td>     </tr>     <tr>       <td>鈴木花子</td>       <td>32</td>       <td>ディレクター</td>     </tr>   </tbody> </table> 

<thead><tbody> は省略しても表は表示されます。ただし行数の多い表では、見出し行とデータ行を明示的に分けることで構造が読み取りやすくなります。

各タグの役割は次のとおりです。

タグ役割
テーブル全体を囲む
ヘッダー行グループ(列見出しの行)
ボディ行グループ(データ行)
フッター行グループ(合計行など)
テーブルの行(Table Row)
ヘッダーセル。標準で太字・中央揃え
データセル(Table Data)
テーブルのタイトル(表の上に表示)

ほかのタグも体系的に確認したい場合は、HTMLタグ一覧が便利です。

captionタグでテーブルにタイトルを付ける

表が何のデータなのかを示すのが <caption> です。<table> の直後に置くと、表の上にタイトルとして表示されます。

<table>   <caption>2026年 Webツール料金比較</caption>   <thead>     <tr>       <th>ツール名</th>       <th>無料プラン</th>       <th>有料プラン</th>     </tr>   </thead>   <tbody>     <tr>       <td>Canva</td>       <td>あり</td>       <td>月額1,500円〜</td>     </tr>     <tr>       <td>Figma</td>       <td>あり</td>       <td>月額$15〜</td>     </tr>   </tbody> </table> 

<caption> は見た目の装飾だけでなく、読み上げ環境でも「この表のタイトル」として認識されます。表が複数並ぶページほど、付けておく価値が大きい要素です。

colspan・rowspanでセルを結合する

複数のセルをまとめたいときに使うのが colspanrowspan です。属性に「いくつ分を結合するか」を数値で指定します。

colspan(横方向に結合)

colspan="2" なら、横に2列分のセルを1つにまとめます。

<table>   <tr>     <!-- 2列分を結合 -->     <th colspan="2">氏名</th>     <th>スコア</th>   </tr>   <tr>     <td>田中</td>     <td>太郎</td>     <td>92</td>   </tr> </table> 

rowspan(縦方向に結合)

rowspan="2" なら、縦に2行分のセルを1つにまとめます。

<table>   <tr>     <!-- 2行分を結合 -->     <td rowspan="2">午前</td>     <td>HTML講座</td>   </tr>   <tr>     <td>CSS講座</td>   </tr> </table> 

結合のコツは、結合した分だけ次の行のセル数を減らすことです。rowspan="2" を使った行の下は、その列のセルを書かずに詰めます。ここを揃えないと表が崩れるため、最初は紙に列数を書いて確認すると安全です。

scope属性でアクセシビリティに対応する

<th>scope 属性を付けると、スクリーンリーダーがヘッダーとデータの関係を正しく読み上げます。見た目は変わりませんが、音声で読み上げる利用者にとっては理解度が大きく変わるポイントです。

<table>   <thead>     <tr>       <th scope="col">商品名</th>       <th scope="col">価格</th>       <th scope="col">在庫</th>     </tr>   </thead>   <tbody>     <tr>       <th scope="row">商品A</th>       <td>1,000円</td>       <td>50個</td>     </tr>   </tbody> </table> 

指定できる値は2つです。

scope値意味
col列のヘッダーであることを示す
row行のヘッダーであることを示す

データ表で迷ったら、列見出しの <th>scope="col"、各行の先頭見出しに scope="row" を付けておくと無難です。

テーブルのCSSスタイリング

標準のテーブルは罫線が二重に見えたり余白が窮屈だったりします。CSSで整えると、ぐっと読みやすくなります。

基本的なスタイル

table {   width: 100%;   border-collapse: collapse;   /* セルの境界線を重ねる */   font-size: 14px; }

th, td { padding: 12px 16px; text-align: left; border: 1px solid #e0e0e0; }

th { background-color: #f5f5f5; font-weight: bold; }

/* ゼブラストライプ(縞模様) */ tbody tr:nth-child(even) { background-color: #fafafa; }

/* ホバー時のハイライト */ tbody tr:hover { background-color: #f0f7ff; }

ゼブラストライプ(行ごとの背景色)とホバーのハイライトは、行数の多い表で視線が迷子になりにくくなる実用的なテクニックです。

CSSの基礎から確認したい方は、CSSとは?書き方の基本・HTMLとの違いをわかりやすく解説を先に読むと理解が早まります。

border-collapseの違い

罫線の見え方を決めるのが border-collapse です。

/* separate(デフォルト): セル間に隙間がある */ table { border-collapse: separate; }

/* collapse: 境界線が重なりすっきり見える */ table { border-collapse: collapse; }

データ表では collapse を指定するのが基本です。隙間が消え、罫線が1本にまとまって締まった見た目になります。

レスポンシブテーブル(スマホ対応)

テーブルはスマホで横幅が足りず、はみ出して崩れやすいのが弱点です。実用的な解決策は、表を囲むボックスに横スクロールを持たせる方法です。

<!-- テーブルをdivで囲む --> <div class="table-scroll">   <table>     ...   </table> </div> 

.table-scroll {   overflow-x: auto;   /* 横スクロールを有効化 */   -webkit-overflow-scrolling: touch; }

/* テーブルの最小幅を設定(スクロール発生の基準) */ table { min-width: 600px; }

overflow-x: auto を付けたボックスでテーブルを囲み、テーブル側に min-width を指定しておきます。画面が狭いときだけ横スクロールが現れ、レイアウト全体は崩れません。

テーブルを使うべき場面・使わない場面

テーブルは万能ではありません。「行と列で意味がつながるデータ」に絞って使うのがポイントです。

テーブルが向いている場面
  • 比較表:料金・スペック・機能の対照
  • データの一覧:売上・スコア・スケジュール
  • 構造化されたデータ:行と列の関係が明確なもの

テーブルを使わないほうがよい場面
  • ページ全体のレイアウト目的:HTML4時代の手法で、現在は非推奨
  • サイドバーと本文の段組み:FlexboxやGridで組む
  • 単なる装飾の枠組み:意味のないデータを表に押し込まない

レイアウト目的でテーブルを使った例が次です。これは避けてください。

<!-- レイアウト目的でtableを使うのは非推奨(HTML4時代の手法) --> <table>   <tr>     <td>左サイドバー</td>     <td>メインコンテンツ</td>   </tr> </table> 

レイアウトはFlexboxやGrid(CSS)で行うのが現代のHTML/CSSの原則です。テーブルは「データ表示専用」と割り切ると、迷いがなくなります。

よくある質問

テーブルの学習でつまずきやすいポイントを、Q&A形式で整理しました。

Q. theadやtbodyは必ず書く必要がありますか

省略しても表は表示されます。小さな表なら <tr><th><td> だけで十分です。

ただし行数の多い表では、<thead><tbody> で見出しとデータを分けると、構造が読み取りやすくなり保守もしやすくなります。

Q. thとtdの使い分けが分かりません

見出しセルが <th>、中身のデータが <td> です。<th> は標準で太字・中央揃えになり、読み上げ環境では「見出し」として扱われます。

「これは項目名か、データか」で判断すると迷いません。

Q. セルを結合したら表がずれてしまいます

colspanrowspan で結合した分、ほかの行や列のセル数を減らす必要があります。結合した数だけセルを「詰める」のが原則です。

最初は各行のセル数を紙に書き出して、合計が揃っているか確認すると崩れにくくなります。

Q. スマホで表がはみ出します

表を <div> で囲み、そのボックスに overflow-x: auto を指定してください。テーブル側に min-width を設定しておくと、狭い画面では横スクロールに切り替わります。

レイアウト全体を崩さずにスマホ対応できる、実用的な方法です。

Q. レイアウト目的でテーブルを使ってはいけないのですか

避けてください。レイアウト目的のテーブルはHTML4時代の手法で、現在はアクセシビリティ・保守性の両面で問題があります。

段組みや配置はCSSのFlexboxやGridで行うのが現代の原則です。テーブルはデータ表示専用と考えましょう。

まとめ

最後に、この記事の要点を整理します。

この記事のまとめ
  • 基本構造は table → tr → th/td。大きな表は theadtbodytfoot でグループ化
  • caption で表のタイトルを付けると、見た目と読み上げの両方で分かりやすくなる
  • colspan=横の結合、rowspan=縦の結合。結合した分はセル数を詰める
  • thscope 属性を付けるとアクセシビリティが向上する
  • スマホ対応は横スクロール用のボックスで囲むのが実用的
  • テーブルはデータ表示専用。レイアウト目的では使わない

テーブルはデータ表示に特化したタグです。レイアウト目的では使わず、比較表やデータ一覧に正しく活用しましょう。

次のステップとして、HTMLのリスト(ul・ol)の書き方や、文書全体の組み立てを学ぶHTMLの基本構造を徹底解説もあわせて確認しておくと、表を含むページ全体を自分で組めるようになります。


※本記事はHTML/CSSの仕様と公開情報をもとにした学習用の整理です。仕様やブラウザの挙動は変更される場合があるため、実装時は各公式ドキュメント(MDN Web Docs・W3C等)の最新情報をご確認のうえご判断ください。


よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

大学卒業後、Web制作会社に入社し、コーポレートサイトやECサイト、キャンペーンサイトなど幅広い案件を担当。企画・設計からデザインディレクション、進行管理、納品後の運用改善までトータルで携わる。クライアントの課題整理から戦略立案まで踏み込む提案力と、円滑なチームマネジメントに定評がある。

・Webサイト構築の企画・情報設計
・UI/UX改善提案
・制作進行管理・品質管理
・マーケティング視点での運用改善

Webサイトは“つくって終わり”ではなく、運用しながら成果を伸ばしていくものだと考えています。お客様のビジネスとユーザーの両方にとって価値のあるWebサイトを、戦略から実装まで全力でサポートいたします。

目次