テーブルに枠線を付ける方法
テーブルには初期状態で枠線がありません。CSS で付けましょう。すべてのセルに border を付けると格子が描かれ、テーブルに border-collapse: collapse を指定すると、隣り合う 2 本の枠線が 1 本の線にまとまります。
border の一括指定には幅、スタイル、色を順不同で書きます: 1px solid #6b7280。table だけでなく th, td にも指定しましょう。テーブルの枠線は外枠しか描きません。
border-collapse: separate と collapse の違い
border-collapse は、セル同士が枠線を共有するかどうかを決めます。
| 値 | 結果 |
|---|---|
separate (初期値) | 各セルが自分の枠線を持ち、セルの間に border-spacing で決まる隙間ができる |
collapse | 隣り合うセルが 1 本の枠線を共有する。border-spacing は無視される |
separate のテーブルでは 2 つの層が両方見えます。青いテーブルの外枠と、各セルを囲む別の琥珀色の枠で、その間に border-spacing の隙間があります。6px を 0 にするとセル同士がくっつきますが、線は二重のままです。線をまとめるのは collapse だけです。
collapse で 2 本の枠線が重なり、それぞれが違う場合は、太いほうが勝ちます。同じ太さならスタイルで決まり (double は solid に勝ち、solid は dashed や dotted に勝ちます)、それも同じならセルの枠線が行に、行の枠線がテーブルに勝ちます。collapse のテーブルの外周が青ではなく琥珀色なのはこのためです。そこではセルもテーブルも 2px solid の枠線を持っていて、セルが勝ちます。
横線だけ、または内側の線だけ
最近のテーブルの多くは、すべての線を描きません。よくあるパターンは 2 つです。
2 つ目のテーブルは、端のセルの外側の枠線を消しています。border-inline-start と border-inline-end は行の始まりと終わりを表すので、最初のセルが反対側に来る右から左に書く言語でも、同じ CSS が正しく動きます。
テーブルの角丸
border-collapse: collapse のテーブルでは border-radius は何もしません。角丸のテーブルは隙間なしの separate モデルを使い、セルに下と終わり側の枠線だけを付けることで、各線を 1 回だけ描きます。
背景のグレーが曲線に沿うよう、ヘッダーの角の 2 つのセルにも角丸を付けています。これがないと、セルの四角い角が丸い枠線からはみ出します。角丸は 9px で、テーブルの 10px から 1px の枠線を引いた値なので、2 つの曲線が揃います。
部分ごとの枠線の色と太さ
枠線はテーブルの部分ごとに変えられます。thead、tfoot、個々の行にセレクターを書いて、ヘッダーの下や合計の上に太い線を引きます。
3px の線は、交わる場所で 1px のグレーの線に勝ちます。上で説明した collapse のルールどおりです。テーブルのほかの構造 (thead、tfoot、th) については HTML テーブル を参照してください。
border 属性
古いチュートリアルでは <table> タグに属性を使っています。
<table border="1" cellspacing="0" cellpadding="6">
ブラウザは今でも border="1" に従い、テーブルとすべてのセルに separate モデルで枠線を描くので、二重線の見た目になります。この 3 つの属性はどれも HTML5 で廃止されています。CSS では、セルの border、テーブルの border-spacing (または border-collapse: collapse)、セルの padding がそれぞれに相当します。
よくある間違い
tableだけに枠線を付ける。 外枠だけで内側に線がない表になります。th, tdに枠線を付けましょう。border-collapse: collapseを忘れる。 線が二重に見えます。border-collapse: collapseとborder-radiusを組み合わせる。 角丸は無視されます。border-collapse: collapseとborder-spacingを組み合わせる。 隙間は separate モデルでしか効きません。- separate モデルで
<tr>に枠線を付ける。 テーブルが collapse でない限り、行は枠線を描きません。代わりにセルにスタイルを付けましょう。 - 新しいコードで
border="1"を使う。 今でも動きますが、色を指定できず、廃止されています。
よくある質問
HTML の表に枠線を付けるにはどうすればいいですか?
テーブルとセルに CSS を指定します: table { border-collapse: collapse; } th, td { border: 1px solid #999; }。セルの枠線で格子が描かれ、border-collapse: collapse で隣り合う枠線が 1 本の線にまとまります。
表の枠線が二重になるのはなぜですか?
初期状態では各セルがセルの間に隙間を空けて自分の枠線を描く (border-collapse: separate) ので、隣り合うセルの線が 2 本見えます。<table> に border-collapse: collapse を指定すると 1 本にまとまります。
table の border 属性はまだ使えますか?
<table border="1"> はどのブラウザでも枠線を描きますが、HTML5 では廃止されており、色やスタイルを指定できません。代わりに CSS の border プロパティを使いましょう。
テーブルを角丸にするには?
border-collapse: collapse のテーブルには border-radius が効きません。border-collapse: separate と border-spacing: 0 を使い、テーブルに角丸を指定し、角のセルにも合わせた角丸 (border-start-start-radius など) を付けて、セルの背景が角からはみ出さないようにします。
テーブルの枠線を消すには?
テーブルには、何かが追加しない限り枠線はありません。<table> タグから border 属性を消すか、枠線を付けるスタイルシートを上書きするために table, th, td に border: none を指定します。