ホームページに表(テーブル)を作るとき、
「枠線をつけたいのに出てこない…」
「きれいな罫線(けいせん)で表を見やすくしたい!」
と悩んだことはありませんか?
実はHTMLのテーブルは、書いただけでは枠線が表示されません。この記事では、HTMLで表に枠線をつける基本的な方法から、CSSを使ってもっときれいに枠線を調整するやり方までやさしく解説します。
これを読めば、見やすいテーブルを自分で自由に作れるようになりますよ。
HTMLテーブルの基本構造

基本的なHTMLテーブル
まず、枠線なしの基本的なテーブルを確認しましょう:
<table>
<tr>
<th>商品名</th>
<th>価格</th>
<th>在庫</th>
</tr>
<tr>
<td>りんご</td>
<td>100円</td>
<td>50個</td>
</tr>
<tr>
<td>みかん</td>
<td>80円</td>
<td>30個</td>
</tr>
</table>
テーブルタグの役割
タグ | 役割 | 必須 |
---|---|---|
<table> | 表全体を囲む | ○ |
<tr> | 行(Table Row) | ○ |
<th> | 見出しセル(Table Header) | – |
<td> | データセル(Table Data) | ○ |
<thead> | ヘッダー部分 | – |
<tbody> | ボディ部分 | – |
<tfoot> | フッター部分 | – |
HTMLだけで表に枠線をつける(border属性)
border属性の基本的な使い方
もっともシンプルなのは、HTMLの<table>
タグにborder
属性をつける方法です:
<table border="1">
<tr>
<th>商品名</th>
<th>価格</th>
</tr>
<tr>
<td>りんご</td>
<td>100円</td>
</tr>
</table>
border属性の値と効果
値 | 効果 |
---|---|
border="0" | 枠線なし(デフォルト) |
border="1" | 1ピクセルの枠線 |
border="2" | 2ピクセルの枠線 |
border="3" | 3ピクセルの枠線 |
注意点
このborder
属性はHTML4までの古い書き方で、HTML5では推奨されていません。現在は**CSS(シーエスエス)**で枠線をつけるのが標準的な方法です。
HTML5での推奨事項
<!-- ❌ 非推奨(HTML5) -->
<table border="1">
<!-- テーブル内容 -->
</table>
<!-- ✅ 推奨(HTML5) -->
<table style="border: 1px solid black;">
<!-- テーブル内容 -->
</table>
CSSで表に枠線をつける基本方法
基本的なCSSでの枠線設定
HTMLではtable
、th
、td
に対してborder
を指定します:
<style>
table, th, td {
border: 1px solid black;
}
</style>
<table>
<tr>
<th>商品名</th>
<th>価格</th>
</tr>
<tr>
<td>みかん</td>
<td>80円</td>
</tr>
</table>
borderプロパティの構造
border
プロパティは3つの値を組み合わせて指定します:
border: [線の太さ] [線の種類] [線の色];
要素 | 説明 | 例 |
---|---|---|
線の太さ | ピクセル単位で指定 | 1px , 2px , 3px |
線の種類 | 実線、破線、点線など | solid , dashed , dotted |
線の色 | 色名、16進数、RGBなど | black , #333 , rgb(255,0,0) |
線の種類のバリエーション
/* 実線 */
.solid-border { border: 2px solid #333; }
/* 破線 */
.dashed-border { border: 2px dashed #666; }
/* 点線 */
.dotted-border { border: 2px dotted #999; }
/* 二重線 */
.double-border { border: 3px double #000; }
/* 立体的な線 */
.ridge-border { border: 3px ridge #ccc; }
.groove-border { border: 3px groove #ccc; }
枠線が二重に見える問題の解決
border-collapseプロパティ
CSSでは、デフォルトだとセルごとに枠がつくので、線が二重に見えることがあります:
/* 問題のあるパターン */
table, th, td {
border: 1px solid black;
}
この問題を解消するにはborder-collapse
を使います:
/* 解決方法 */
table {
border-collapse: collapse; /* 枠線を統合 */
}
th, td {
border: 1px solid black;
}
border-collapseの値
値 | 効果 |
---|---|
separate | セルごとに独立した枠線(デフォルト) |
collapse | 隣接する枠線を統合 |
比較例
<style>
/* 二重線になるテーブル */
.separate-table {
border-collapse: separate;
border: 1px solid black;
}
.separate-table th,
.separate-table td {
border: 1px solid black;
}
/* きれいに統合されたテーブル */
.collapse-table {
border-collapse: collapse;
}
.collapse-table th,
.collapse-table td {
border: 1px solid black;
}
</style>
<!-- 比較用のテーブル -->
<table class="separate-table">
<tr><th>A</th><th>B</th></tr>
<tr><td>1</td><td>2</td></tr>
</table>
<table class="collapse-table">
<tr><th>A</th><th>B</th></tr>
<tr><td>1</td><td>2</td></tr>
</table>
表の枠線をおしゃれにするテクニック

色とデザインのカスタマイズ
/* エレガントなテーブル */
.elegant-table {
border-collapse: collapse;
width: 100%;
font-family: Arial, sans-serif;
}
.elegant-table th {
background-color: #4CAF50;
color: white;
border: 2px solid #45a049;
padding: 12px;
text-align: left;
}
.elegant-table td {
border: 1px solid #ddd;
padding: 10px;
}
.elegant-table tr:nth-child(even) {
background-color: #f2f2f2;
}
グラデーション枠線
.gradient-table {
border-collapse: collapse;
border: 3px solid;
border-image: linear-gradient(45deg, #ff6b6b, #4ecdc4) 1;
}
.gradient-table th,
.gradient-table td {
border: 1px solid #ddd;
padding: 10px;
}
影付きテーブル
.shadow-table {
border-collapse: collapse;
box-shadow: 0 4px 8px rgba(0,0,0,0.1);
border-radius: 8px;
overflow: hidden;
}
.shadow-table th,
.shadow-table td {
border: 1px solid #e0e0e0;
padding: 12px;
}
部分的な枠線の制御
特定の方向だけに枠線
/* 上下のみ枠線 */
.horizontal-only th,
.horizontal-only td {
border-top: 1px solid #333;
border-bottom: 1px solid #333;
border-left: none;
border-right: none;
}
/* 左右のみ枠線 */
.vertical-only th,
.vertical-only td {
border-left: 1px solid #333;
border-right: 1px solid #333;
border-top: none;
border-bottom: none;
}
/* 下線のみ */
.underline-only th,
.underline-only td {
border-bottom: 1px solid #333;
border-top: none;
border-left: none;
border-right: none;
}
個別セルの枠線制御
<style>
.custom-borders th,
.custom-borders td {
border: none;
padding: 8px;
}
.custom-borders .thick-border {
border: 3px solid #ff5722;
}
.custom-borders .dotted-border {
border: 2px dotted #2196f3;
}
.custom-borders .no-border {
border: none;
}
</style>
<table class="custom-borders">
<tr>
<th class="thick-border">見出し1</th>
<th class="dotted-border">見出し2</th>
<th class="no-border">見出し3</th>
</tr>
<tr>
<td class="thick-border">データ1</td>
<td class="dotted-border">データ2</td>
<td class="no-border">データ3</td>
</tr>
</table>
実用的なテーブルデザインパターン
シンプルでモダンなテーブル
.modern-table {
border-collapse: collapse;
width: 100%;
margin: 20px 0;
font-size: 16px;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
.modern-table thead tr {
background-color: #2c3e50;
color: #ffffff;
text-align: left;
}
.modern-table th,
.modern-table td {
padding: 12px 15px;
border-bottom: 1px solid #dddddd;
}
.modern-table tbody tr {
border-bottom: 1px solid #dddddd;
}
.modern-table tbody tr:nth-of-type(even) {
background-color: #f3f3f3;
}
.modern-table tbody tr:hover {
background-color: #f1c40f;
cursor: pointer;
}
ビジネス用の価格表
.pricing-table {
border-collapse: collapse;
width: 100%;
max-width: 800px;
margin: 0 auto;
box-shadow: 0 0 20px rgba(0,0,0,0.1);
}
.pricing-table th {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
font-weight: bold;
padding: 15px;
text-align: center;
border: none;
}
.pricing-table td {
padding: 15px;
text-align: center;
border-bottom: 1px solid #e0e0e0;
border-right: 1px solid #e0e0e0;
}
.pricing-table tr:last-child td {
border-bottom: none;
}
.pricing-table td:last-child {
border-right: none;
}
.pricing-table .price {
font-weight: bold;
font-size: 1.2em;
color: #e74c3c;
}
カード風テーブル
.card-table {
border-collapse: separate;
border-spacing: 0;
width: 100%;
background: white;
border-radius: 10px;
overflow: hidden;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.card-table th {
background: #f8f9fa;
padding: 15px;
font-weight: 600;
color: #495057;
border-bottom: 2px solid #dee2e6;
}
.card-table td {
padding: 15px;
border-bottom: 1px solid #dee2e6;
}
.card-table tr:last-child td {
border-bottom: none;
}
レスポンシブテーブルの枠線

モバイル対応のテーブル
.responsive-table {
border-collapse: collapse;
width: 100%;
}
.responsive-table th,
.responsive-table td {
border: 1px solid #ddd;
padding: 8px;
text-align: left;
}
/* タブレット以下 */
@media screen and (max-width: 768px) {
.responsive-table {
border: none;
}
.responsive-table thead {
display: none;
}
.responsive-table tr {
border: 1px solid #ccc;
display: block;
margin-bottom: 10px;
padding: 10px;
border-radius: 5px;
}
.responsive-table td {
border: none;
display: block;
text-align: right;
padding-left: 50%;
position: relative;
}
.responsive-table td::before {
content: attr(data-label) ": ";
position: absolute;
left: 6px;
width: 45%;
text-align: left;
font-weight: bold;
}
}
スクロール対応テーブル
.scroll-table-container {
overflow-x: auto;
border: 1px solid #ddd;
border-radius: 5px;
}
.scroll-table {
border-collapse: collapse;
width: 100%;
min-width: 600px; /* 最小幅を設定 */
}
.scroll-table th,
.scroll-table td {
border: 1px solid #ddd;
padding: 10px;
white-space: nowrap; /* テキストの改行を防ぐ */
}
高度な枠線テクニック
CSSグリッドを使ったテーブル風レイアウト
.grid-table {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1px;
background-color: #ddd;
border: 1px solid #ddd;
}
.grid-table > div {
background-color: white;
padding: 10px;
}
.grid-table .header {
background-color: #f5f5f5;
font-weight: bold;
}
<div class="grid-table">
<div class="header">名前</div>
<div class="header">年齢</div>
<div class="header">職業</div>
<div>田中太郎</div>
<div>30</div>
<div>エンジニア</div>
<div>佐藤花子</div>
<div>25</div>
<div>デザイナー</div>
</div>
アニメーション効果付きテーブル
.animated-table {
border-collapse: collapse;
width: 100%;
}
.animated-table th,
.animated-table td {
border: 1px solid #ddd;
padding: 10px;
transition: all 0.3s ease;
}
.animated-table tr:hover {
background-color: #f0f8ff;
transform: scale(1.02);
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
.animated-table th {
background: linear-gradient(45deg, #667eea, #764ba2);
color: white;
position: relative;
overflow: hidden;
}
.animated-table th::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent);
transition: left 0.5s;
}
.animated-table th:hover::before {
left: 100%;
}
よくある問題と解決法
枠線が表示されない場合
問題1:border-collapseの設定忘れ
/* ❌ 枠線が二重に見える */
table, th, td {
border: 1px solid black;
}
/* ✅ 正しい設定 */
table {
border-collapse: collapse;
}
th, td {
border: 1px solid black;
}
問題2:CSSの優先順位
/* 他のCSSに上書きされる場合 */
table th, table td {
border: 1px solid black !important;
}
問題3:HTMLの構造が不正
<!-- ❌ 不正な構造 -->
<table>
<td>データ</td> <!-- trタグがない -->
</table>
<!-- ✅ 正しい構造 -->
<table>
<tr>
<td>データ</td>
</tr>
</table>
ブラウザ間の表示差異
/* ブラウザ間の差異を統一 */
table {
border-collapse: collapse;
border-spacing: 0;
table-layout: fixed; /* レイアウトを固定 */
width: 100%;
}
th, td {
border: 1px solid #ddd;
padding: 8px;
vertical-align: top; /* 縦位置を統一 */
}
印刷時の対応
/* 印刷用スタイル */
@media print {
.print-table {
border-collapse: collapse;
border: 2px solid black;
}
.print-table th,
.print-table td {
border: 1px solid black;
padding: 5px;
font-size: 12px;
}
.print-table th {
background-color: #f0f0f0 !important;
-webkit-print-color-adjust: exact;
}
}
アクセシビリティを考慮したテーブル

スクリーンリーダー対応
<table class="accessible-table">
<caption>2024年度売上実績</caption>
<thead>
<tr>
<th scope="col">月</th>
<th scope="col">売上金額</th>
<th scope="col">前年比</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1月</th>
<td>1,200万円</td>
<td>+15%</td>
</tr>
</tbody>
</table>
色覚に配慮したデザイン
.accessible-colors {
border-collapse: collapse;
}
.accessible-colors th {
background-color: #2c3e50; /* 高コントラスト */
color: #ffffff;
border: 2px solid #34495e;
}
.accessible-colors td {
border: 1px solid #7f8c8d;
padding: 10px;
}
/* 成功・警告・エラーの色分け */
.success { border-left: 4px solid #27ae60; }
.warning { border-left: 4px solid #f39c12; }
.error { border-left: 4px solid #e74c3c; }
まとめ
HTMLテーブルの枠線設定について、様々な手法とテクニックを紹介しました。
基本的な手法
- HTML属性:
border="1"
(非推奨) - CSS基本:
border: 1px solid black
- 統合設定:
border-collapse: collapse
重要なポイント
- 現代の標準:CSSを使用してスタイリング
- 統合枠線:
border-collapse: collapse
で二重線を回避 - レスポンシブ対応:モバイル環境での表示を考慮
- アクセシビリティ:すべてのユーザーが利用しやすい設計
カスタマイズの要素
要素 | プロパティ | 効果 |
---|---|---|
枠線の太さ | border-width | 視覚的なインパクト |
枠線の種類 | border-style | デザインの印象 |
枠線の色 | border-color | ブランディング |
内側の余白 | padding | 読みやすさ |
背景色 | background-color | 視認性 |
コメント