Menu

HTML テーブルの枠線: border-collapse、罫線、角丸

CSS で HTML の表に枠線を付ける方法を解説します。border-collapse で線を 1 本にする方法、border-spacing、横線だけの表、内側の線だけの表、角丸の表、border 属性が廃止された理由です。

このページのコードはエディタで実行できます - 編集してすぐに結果を確認できます。

テーブルに枠線を付ける方法

テーブルには初期状態で枠線がありません。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 を指定します。

Coddy programming languages illustration

Coddyでコードを学ぼう

始める