HTMLで表を作りたいときに使うのは「tableタグ」です。
ですが、それを知っていてもなかなか使いこなすことができない!という方もいらっしゃるのではないでしょうか?
「tableタグ」を用いて表を作るためには、4つの要素を理解する必要があります。
基本の構造を理解した上でまずは、一番シンプルな表を作ってみましょう。
この記事を読んで、曖昧になりがちなHTMLのtableタグの使い方を一緒にバッチリにしましょう!
エンジニアメンター
目次
html tableは表を作るタグ
tableタグ(table要素)を使えば、表(テーブル)を作成することができます。
実際にこのような表をみたことがあるのではないでしょうか?
このような表は、tableタグを使って作られています。
では、このtableタグの構造と、中に含まれる3つの要素について説明していきたいと思います。
表の構成
tableタグを使って作られる表(テーブル)は、<table> <tr> <td> <th>の4つの要素で構成されています。
・<tr>:table rowの略で、表に行を1行作ります。
・<th>:table headerの略で、表の見出しとなるセルを作ります。
・<td>:table dateの略で、表の中身となるセルを作ります。
少し名前が紛らわしいですが、1つ1つが何を表しているのかを覚えてしまえばあとは見た目を整えていくだけです。
html tableの概要
次に、tableタグの概要を見ていきましょう。
コンテンツカテゴリ | フローコンテンツ |
対応ブラウザ | Internet Explorer 2~ / Google Chrome 1~ / Safari 1~ / Firefox 1~ / Opera 6~ |
タグの分類 | ブロックレベル要素 |
定義バージョン | Strict, Transitional, Frameset |
開始/終了タグの有無 | どちらも必須 |
では、基本のコードを見ていきましょう。
長いコードに関しては、縮小しているのでクリックして確認してみてください。
「HTML・CSS」をマスターして、ホームページやWEBアプリを作成できるよう になりたい方へ! \経済産業省認定の圧倒的カリキュラム!/
国内最大級のプログラミングスクール【DMM WEBCAMP】なら
✔受講生の97%が未経験者!
✔スキマ時間で効率よくスキルアップしたい方におすすめ!
✔基礎から確実に身に付く充実のカリキュラム!
受講内容の詳細はこちら
html tableの基本コードの書き方
早速、この表を作っていきたいと思います!
まず、対応しているHTMLとCSSのコードを確認したい方はこちらをご覧ください。
<!DOCTYPE html>
<html>
<head>
<title>メニューと値段</title>
<link rel="stylesheet" href="example.css">
</head>
<body>
<table border="1">
<caption>メニュー表</caption>
<thead>
<tr>
<th>メニュー</th>
<th>値段</th>
</tr>
</thead>
<tbody>
<tr>
<td>オムライス</td>
<td>700円</td>
</tr>
<tr>
<td>ハンバーグ</td>
<td>900円</td>
</tr>
<tr>
<td>ナポリタン</td>
<td>600円</td>
</tr>
</tbody>
</table>
</body>
</html>
table {
border-collapse: collapse;
}
table th, table td {
border: solid 1px black;
}
最初にHTMLについて説明してから、CSSの解説をしていきたいと思います。
まずはじめに、表にしたいと考えているところを<table></table>で囲みます。
<!DOCTYPE html>
<html>
<head>
<title>メニューと値段</title>
<link rel="stylesheet" href="example.css">
</head>
<body>
<table border="1">
<thead>
<tr>
<th>メニュー</th>
<th>値段</th>
</tr>
</thead>
<tbody>
<tr>
<td>オムライス</td>
<td>700円</td>
</tr>
<tr>
<td>ハンバーグ</td>
<td>900円</td>
</tr>
<tr>
<td>ナポリタン</td>
<td>600円</td>
</tr>
</tbody>
</table>
</body>
</html>
この時、tableタグの横にborderがありますが、これは枠線の太さを指定するものです。
これを書かなければ、下のように枠線のない表になってしまいます。
しかし、枠線に関する指定はHTMLで行うよりもCSSで行う方が最適なので、それについてはこの後説明していきたいと思います。
作りたいと思う行の数だけ、<tr></tr>を作ります。
<!DOCTYPE html>
<html>
<head>
<title>メニューと値段</title>
<link rel="stylesheet" href="example.css">
</head>
<body>
<table border="1">
<thead>
<tr>
<th>メニュー</th>
<th>値段</th>
</tr>
</thead>
<tbody>
<tr>
<td>オムライス</td>
<td>700円</td>
</tr>
<tr>
<td>ハンバーグ</td>
<td>900円</td>
</tr>
<tr>
<td>ナポリタン</td>
<td>600円</td>
</tr>
</tbody>
</table>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title>メニューと値段</title>
<link rel="stylesheet" href="example.css">
</head>
<body>
<table border="1">
<thead>
<tr>
<th>メニュー</th>
<th>値段</th>
</tr>
</thead>
<tbody>
<tr>
<td>オムライス</td>
<td>700円</td>
</tr>
<tr>
<td>ハンバーグ</td>
<td>900円</td>
</tr>
<tr>
<td>ナポリタン</td>
<td>600円</td>
</tr>
</tbody>
</table>
</body>
</html>
これが基本のコードになります。ここまでで完成する表がこちらです。
しかし、最初にお見せした表と線が異なっていると思います。
これを調整するためのCSSの指定がこちらです。
table {
border-collapse: collapse;
}
table th, table td {
border: solid 1px black;
}
thとtdに対して枠線の指定をすることで、1つ1つのセルに枠線をつけているイメージです。
この罫線のスタイルは以下のようにまとめて指定することができます。
今回の場合は、「solid→一本線、1px→太さが1px、black→黒い線」という指定になります。
これだけだと隙間ができてしまうので、border-collapse: collapse;を使って指定をします。
これは、隣り合うセルの罫線を間を空けずに表示するものです。
このときに先ほど話したtableタグのborder属性は0に指定しておきます。
CSSで罫線に対して指定ができているため、HTML側で線について指定する必要がないからです。
最後に、表の概要を示すcaptionタグを追加します。表の内容を表すタイトルなので、必要な場合は付けましょう。
<caption>メニュー表</caption>
こちらのコードは、必ずtableタグの直後に書きましょう。
ここまでコードを書くと、最初の表が完成します。
「HTML・CSS」をもっと詳しく学習したい方へ! \経済産業省認定の圧倒的カリキュラム!/
国内最大級のプログラミングスクール【DMM WEBCAMP】は
✔受講生の97%が未経験からのスタート!
✔手厚いサポート付きで質問し放題!
✔未経験者のために開発された独自のカリキュラムを用意!
受講内容の詳細はこちら
html tableはCSSでデザインしよう
HTMLで作った表の見た目を変えていくためには、CSSを使います。
先ほど罫線を引いた時のようにCSSに書き加えることによって、装飾の変更をすることができます。
HTMLと同じファイルにコードを書くことも可能ですが、別々のファイルに書く方法が一般的です。
HTMLと別のファイルに書いたCSSをHTMLに読み込むためには、HTML内で下記のコードを指定する必要があります。
<link rel="stylesheet" href="名前.css">
詳しく知りたい方はこちらの記事を読んでみてください。

ここからは主にCSSを変えていくので、HTMLと混ざってしまわないように注意してください!
CSSで行えるデザインの変更は、以下の通りです。
見出しを変えたい時
・【見出し無しにする】<thead></thead>・<th>タグを抜く
見出しをなくしたい時は<thead></thead>タグと<th>タグを抜くだけで、見出しのない表にすることができます。
ただ情報を並べたいだけの時は、<table><tbody><td><th>だけを使います。
左のコードで色が付いている部分の<thead>を抜いて、<th></th>を<td></td>に変えます。
変更前のコード
<!DOCTYPE html>
<html>
<head>
<title>メニューと値段</title>
<link rel="stylesheet" href="example.css">
</head>
<body>
<table border="0">
<thead>
<tr>
<th>メニュー</th>
<th>値段</th>
</tr>
</thead>
<tbody>
<tr>
<td>オムライス</td>
<td>700円</td>
</tr>
<td>ハンバーグ</td>
<td>900円</td>
</tr>
<tr>
<td>ナポリタン</td>
<td>600円</td>
</tr>
</tbody>
</table>
</body>
</html>
変更後のコード
<!DOCTYPE html>
<html>
<head>
<title>メニューと値段</title>
<link rel="stylesheet" href="example.css">
</head>
<body>
<table border="0">
<tr>
<td>メニュー</td>
<td>値段</td>
</tr>
<tbody>
<tr>
<td>オムライス</td>
<td>700円</td>
</tr>
<td>ハンバーグ</td>
<td>900円</td>
</tr>
<tr>
<td>ナポリタン</td>
<td>600円</td>
</tr>
</tbody>
</table>
</body>
</html>
そうすると下の画像のように、見出しをなくすことができます。
・【見出しを縦に並べる】<th><td>を1つの<tr>の中に
基本の通りコードを書くと、見出しは横に並んでいきます。
<tr>
<th>見出し</th>
<th>見出し</th>
<th>見出し</th>
</tr>
このように<tr>タグの中に見出しだけが並んでいたものを、
<tr>
<th>見出し</th>
<td>データ</td>
<td>データ</td>
</tr>
このように<tr>タグの中に横に並べたい見出しとデータを一緒に入れることによって、見出しを縦に並べることができます。
先程までのデータを書き換えたものがこちらです。
<!DOCTYPE html>
<html>
<head>
<title>メニューと値段</title>
<link rel="stylesheet" href="example.css">
</head>
<body>
<table border="0">
<tr>
<th>メニュー</th>
<td>オムライス</td>
<td>ハンバーグ</td>
<td>ナポリタン</td>
</tr>
<tr>
<th>値段</th>
<td>700円</td>
<td>900円</td>
<td>600円</td>
</tr>
</table>
</body>
</html>
実際にこのように横並びの表にすることができました。
罫線を変えたい時
罫線のスタイルはborder属性を使ってまとめて線の種類・太さ・色を指定することができます。
方法は先ほども触れた通り、以下のようになります。
線の種類・太さ・色の順番は、どのような順番になっても大丈夫です。
罫線は先ほども出てきましたが、それぞれのセルの周りに引かれているイメージです。
そのため、tableタグに対して指定するのではなく、thタグ・tdタグに指定を行ってください。
table th, table td{
border:solid 1px black;
}
ここでは border : 線の種類 太さ 色の順番で指定がされています。
よく使われる線の種類としては、solid(実線)・dotted(点線)・dashed(破線)・double(二重線)none(なし)があります。用途に合わせて使い分けてください。
表のデザインを変えたい時
・【背景の色を変える】background-color属性
表の背景色を変えたい時は、色を変えたい行や列に対してbackground-color属性で指定します。
table th, table td{
background-color: #174a5c;
}
・【一行だけ背景の色を変える】bgcolor属性
表全体ではなく、一行だけ色を変えてみましょう。ここでは、cssではなくhtmlを使用します。
一行だけなので、色を変えたいtr要素に色を指定する形となります。
<tr bgcolor="#174a5c
">
・【1つのセルだけ背景の色を変える】bgcolor属性
表の一部だけ目立たせたい場合は、一つのセルに色を付けます。こちらでも、htmlを使用して色を付けましょう。
<th bgcolor="#174a5c
"> <td bgcolor="#174a5c
">
始めに説明した通り、表の見出しの場合はth要素に色を付け、表の中身の場合はtd要素に色を付けます。また、行に色を付けるときと同様、色を付けたい部分にだけbgcolor属性で色を指定します。
・【余白を調節する】padding属性
余白を調節したい時は、padding属性で指定していきます。
table th, table td{
padding : 20px 10px;
}
paddingについて知りたい方はこの記事を読んでみてください。

・【幅を変える】width属性
幅を変える時は、width属性で指定していきます。
table {
width : 300px ;
}
この時、いつもと同じように px と %どちらで指定しても構いません。
ただし、スマホ対応のこと考えると%で指定する方が良いかもしれません。
・【高さを変える】height属性
高さを変える時は、height属性で指定していきます。
table{
height : 100px ;
}
このときに使うことができるのはpxのみです。
・【結合させる(横)】colspan属性
横向きに結合させたい時は、colspan属性で指定していきます。
注意して欲しいのは、結合させる時はcssではなく、htmlで指定していくということです。
わかりやすくするために、cssで文字を中央寄せにしておきます。
繋げたいセルのはじまりの<th>(または<td>)にcolspan = “繋げたい数”を書き足します。
<!DOCTYPE html>
<html>
<head>
<title>メニューと値段</title>
<link rel="stylesheet" href="example.css">
</head>
<body>
<table border="0">
<tr>
<th>メニュー</th>
<td>オムライス</td>
<td>ハンバーグ</td>
<td>ナポリタン</td>
</tr>
<tr>
<th>値段</th>
<td>700円</td>
<td colspan="2">900円</td>
</tr>
</table>
</body>
</html>
・【結合させる(縦)】rowspan属性
縦向きに結合させたい時は、rowspan属性で指定していきます。
ここでも、CSSではなくHTMLで指定していきます。
繋げたいセルの中で一番上にあるものの<th>(または<td>)にrowspan=”繋げたい数”を書き足します。
<!DOCTYPE html>
<html>
<head>
<title>メニューと値段</title>
<link rel="stylesheet" href="example.css">
</head>
<body>
<table border="0">
<tr>
<th>メニュー</th>
<th>値段</th>
</tr>
<tr>
<td>オムライス</td>
<td>700円</td>
</tr>
<td >ハンバーグ</td>
<td rowspan="2">900円</td>
</tr>
<tr>
<td>ナポリタン</td>
</tr>
</table>
</body>
</html>
html tableをhtmlのみでデザイン変更する場合
ここまでcssでのデザイン変更をお伝えしましたが、htmlでもある程度の変更は可能です。
ここからは、「文字の位置を変更したい」「罫線のデザインを変える方法が分からない」といったお悩みを抱えている方に、主なデザイン変更の方法をご紹介します。
文字のデザインを変えたいとき
セルの中における文字の位置を変更したい場合は、allign属性を使用します。align属性で文字の右寄せ、左寄せ、中央への移動が可能になります。
・【右に寄せる】align属性
セルの中の文字を右寄せにするときは、align属性にrightを指定します。
<tr align="right">
・【左に寄せる】align属性
セルの中の文字を左寄せにするときは、align属性にleftを指定します。td要素は左寄せが初期値になっています。
<tr align="left">
・【中央に移動する】align属性
セルの中の文字を右寄せにするときは、align属性にcenterを指定します。th要素は中央配置が初期値になっています。
<tr align="center">
それぞれのセルに指定したコードと、コードを反映した表は以下の通りです。
<!DOCTYPE html>
<html>
<head>
<title>メニューと値段</title>
<link rel="stylesheet" href="example.css">
</head>
<body>
<table border="0">
<tr>
<th>メニュー</th>
<td>オムライス</td>
<td>ハンバーグ</td>
<td>ナポリタン</td>
</tr>
<tr>
<th>値段</th>
<td align="right">700円</td>
<td align="left">900円</td>
<td align="center">600円</td>
</tr>
</table>
</body>
</html>
表のデザインを変えたいとき
・【表を横に並べる】style属性
複数の表を横に並べたいときは、style属性にfloatを指定します。
<!DOCTYPE html>
<html>
<head>
<title>メニューと値段</title>
<link rel="stylesheet" href="example.css">
</head>
<body>
<table border="0" style="float:left; margin-right:10px;">
<tr>
<th>メニュー</th>
<td>オムライス</td>
<td>ハンバーグ</td>
<td>ナポリタン</td>
</tr>
<tr>
<th>値段</th>
<td>700円</td>
<td>900円</td>
<td>600円</td>
</tr>
</table>
<table border="0">
<tr>
<th>ドリンク</th>
<td>お茶</td>
<td>コーヒー</td>
<td>ジュース</td>
</tr>
<tr>
<th>値段</th>
<td>150円</td>
<td>300円</td>
<td>200円</td>
</tr>
</table>
</body>
</html>
・【内罫線を表示しない】rules属性
セルを区切る線を表示させない場合は、rules属性にnoneを指定します。
<!DOCTYPE html>
<html>
<head>
<title>メニューと値段</title>
<link rel="stylesheet" href="example.css">
</head>
<body>
<table border="0" rules="none">
<tr>
<th>メニュー</th>
<td>オムライス</td>
<td>ハンバーグ</td>
<td>ナポリタン</td>
</tr>
<tr>
<th>値段</th>
<td>700円</td>
<td>900円</td>
<td>600円</td>
</tr>
</table>
</body>
</html>
・【グループ間の罫線のみ表示する】rules属性
行のセル間の区切りを無くしたいときは、同じくrules属性を使用し、groupsを指定します。
<!DOCTYPE html>
<html>
<head>
<title>メニューと値段</title>
<link rel="stylesheet" href="example.css">
</head>
<body>
<table border="0" rules="groups">
<tr>
<th>メニュー</th>
<td>オムライス</td>
<td>ハンバーグ</td>
<td>ナポリタン</td>
</tr>
<tr>
<th>値段</th>
<td>700円</td>
<td>900円</td>
<td>600円</td>
</tr>
</table>
</body>
</html>
コピペで使える!html tableのデザイン例
元となる表のHTMLのコードはこちらです。
このHTMLをベースに、CSSで装飾を足していきます。
<!DOCTYPE html>
<html>
<head>
<title>表の見本</title>
<link rel="stylesheet" href="example.css">
</head>
<body>
<table border="0">
<thead>
<tr>
<th>見出し</th>
<th>見出し</th>
<th>見出し</th>
</tr>
</thead>
<tbody>
<tr>
<td>データ</td>
<td>データ</td>
<td>データ</td>
</tr>
<tr>
<td>データ</td>
<td>データ</td>
<td>データ</td>
</tr>
</tbody>
</table>
</body>
</html>
シンプルな表
シンプルで使いやすい表のコードを紹介します。

table {
border-collapse: collapse;
width: 400px;
font-size: 12px;
margin: 20px;
text-align: left;
}
table th {
color: black;
padding: 10px;
border-bottom: 3px solid #174a5c;
}
table td {
padding: 10px;
color: gray;
border-bottom: 1px solid gray;
}
この表では、表自体の罫線は引かずにborder-bottom属性でアンダーラインを引きました。
「border-bottom :線の太さ 線の種類 線の色 」で指定できるので自分好みの色や太さに変更してみてください
ビジネス向けの表
企業のHPで使えるような、少し堅めの表のコードを紹介します。

table {
border-collapse: collapse;
width: 400px;
font-size: 12px;
margin: 20px;
text-align: center;
}
table th {
color: black;
background-color: lightgray;
padding: 10px;
}
table td {
color: black;
background-color: #F5F5F5;
padding: 10px;
border-bottom: 1px dotted lightgray;
}
先ほど使ったborder-bottom属性をここでも使っています。
前述の通り線の種類はsolid(実線)・dotted(点線)・dashed(破線)・double(二重線)none(なし)などがあるので使いたいものに合わせて使ってみてください。
色はもちろん覚える必要がなく、「CSS 色」などで検索してみるとたくさん出てくるので使ってみてください。
ポップな表
罫線を引かないことで、親しみやすい表に感じられます。
ここでは行ごとに色を変える方法をお伝えします。

table {
text-align: center;
width: 100%;
}
table th, table td {
padding : 20px 10px;
}
table tr *:nth-child(1){
background:#cc0066;
}
table tr *:nth-child(2){
background:#ff3399;
}
table tr *:nth-child(3){
background:#ffcccc;
}
table tr *:nth-child()とすることによって()の中にある数字の列について一気に指定することができます。
html tableの+α知識
上記の知識以外に知っておくと便利な知識をご紹介します。ここまで使いこなすことができるようになれば、htmlで表を作る際に困ることもほぼなくなります。
スマホの画面に対応させる
スマホに対応するやり方を解説します。
・横幅を100%にする
th・td共に横幅を100%に指定することによって、スマホの画面に収めていきます。
table {
border-collapse: collapse;
text-align: center;
}
table th, table td {
border: solid 1px black;
padding : 20px 10px;
width: 100%;
display: block;
}
縦に並べることでスクロールで見ることができるようになります
データ部分だけスクロールできるようにする
設定するにはテーブルヘッダ要素とテーブルボディ要素を定義し、各列にclassを振り分けて幅を設定する必要があります。
テーブルヘッダをdisplayプロパティで固定し、テーブルボディは縦軸スクロールで高さを固定します。
<!DOCTYPE html>
<html>
<head>
<title>メニューと値段</title>
<link rel="stylesheet" href="example.css">
</head>
<body>
<table border="0">
<thead class="table_head">
<tr>
<th>メニュー</th>
<th>値段</th>
</tr>
</thead>
<tbody class ="table_body">
<tr>
<td>オムライス</td>
<td>700円</td>
</tr>
<td>ハンバーグ</td>
<td>900円</td>
</tr>
<tr>
<td>ナポリタン</td>
<td>600円</td>
</tr>
</tbody>
</table>
</body>
</html>
table {
border-collapse: collapse;
text-align: center;
}
table th, table td {
border: solid 1px black;
padding : 20px 10px;
text-align: left;
width: 120px;
}
thead.table_head,tbody.table_body{
display: block;
}
tbody.table_body {
overflow-y: scroll;
height: 150px;
}
・overflow-y: scroll; がスクロールを可能にする属性です。
・height: 150px; の数字を変えると表のスクロール部分の高さを変更することができます。
画像などのタグを挿入する
画像を入れる場合など、セルの中にタグを挿入するときは、thもしくはtdの中にコードを書きます。
画像を入れる手順は基本と変わらず、コードは以下のようになります。
<!DOCTYPE html>
<html>
<head>
<title>メニューと値段</title>
<link rel="stylesheet" href="example.css">
</head>
<body>
<table border="0">
<tr>
<th>メニュー</th>
<td>オムライス</td>
<td>ハンバーグ</td>
<td>ナポリタン</td>
</tr>
<tr>
<th>値段</th>
<td>700円</td>
<td>900円</td>
<td>600円</td>
</tr>
<tr>
<th>画像</th>
<td><img src="omuretsu.jpg" alt="オムライス"></td>
<td><img src="hanba-gu.jpg" alt="ハンバーグ"></td>
<td><img src="naporitan.jpg" alt="ナポリタン"></td>
</tr>
</table>
</body>
</html>
列をグループ化する
1列目は青で背景を塗り、2列目以降は赤で背景を塗る、といったような、セルをグループ化してデザインしたい場合は、colgroupタグを使用します。
colgroupは表の縦列をグループ化するタグで、spanで列の番号を指定します。colgroupは、tableタグのすぐ下に書きましょう。
<!DOCTYPE html>
<html>
<head>
<title>メニューと値段</title>
<link rel="stylesheet" href="example.css">
</head>
<body>
<table border="0">
<colgroup span="1" style="background:#CED8F6;>
<colgroup span="2" style="background:#F6CED8;>
<tr>
<th>メニュー</th>
<td>オムライス</td>
<td>ハンバーグ</td>
<td>ナポリタン</td>
</tr>
<tr>
<th>値段</th>
<td>700円</td>
<td>900円</td>
<td>600円</td>
</tr>
</table>
</body>
</html>
上記の例では、span=1で左から1列目、span=2で2列目以降を指定しています。また、style属性で背景色を指定し、グループ別でデザインを作成しています。
colgroupでは、適用できるデザインが限られています。適用可能なデザインは以下の通りです。
・backgroud(背景)
・width(横幅)
・border(線)
・visibility(表示・非表示)
他のCSSを指定する場合は、classを使用すると良いでしょう。
classについては、こちらの記事で紹介しています。
まとめ:html tableとCSSで好きな表を作ろう!
いかがでしたでしょうか?
まず基本として、tableタグを構成する4つの要素は覚えていますか?
そして、見た目を整えたいときはCSSでコードを書くことも覚えておいてください。
これさえ分かっていれば、作りたい表のイメージに合わせてCSSを書いていくだけです。
たくさん調べて、何度も繰り返し書くことで実際に使えるスキルになります。
わからなくなったら、いつでもこの記事に戻ってきてください。