13
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

border-collapseを理解して、テーブルセルにdivをぴったり重ねる

Last updated at Posted at 2020-04-29

テーブルのセルにdivを重ねたい!

こういう事って、よくありますよね。うむうむ。
でもちょっとこんがらがっちゃう。
そこでこの記事ではパターン別に計算方法を整理してみました。

まずは復習から

border-collapsebox-sizingについて確認していきます。

border-collapseとは

テーブルセルの配置の仕方を指定するものです。
collapseの場合、borderの中心をwhidthheightに合うようにずらすことで重なりを表現します。

type 配置の仕方 見え方
collapse 隣り合うセル同士を重ねる 格子状になる
separate 隣り合うセル同士を重ねない 四角を寄せ集めた状態になる

See the Pen table size - border-collaps

box-sizingとは

widthとheightの計算の仕方を指定するものです。

type サイズの取り方 borderの位置
content-box paddingとborderを含めない widthやheightの外側
border-box paddingとborderを含める widthやheightの内側

See the Pen table size - box-sizing by ぷーたんは社会人リハビリ中 (@putan) on CodePen.

実践

では border-collapsboz-sizing の掛け合わせで1つずつ見ていきます。

separate + border-box

こちらは素直ですね。
image.png

計算
重ねるdivの相対位置(left) tdのwidth * (列数 - 1)
重ねるdivの相対位置(top) tdのheight * (行数 - 1)
重ねるdivの幅 tdのwidth * 列数
重ねるdivの高さ tdのheight * 行数

See the Pen table size - separate+ border-box by ぷーたんは社会人リハビリ中 (@putan) on CodePen.

separate + content-box

こちらもわかりやすいですね。
image.png

計算
重ねるdivの相対位置(left) (tdのwidth + (border-width * 2)) * (列数 - 1)
重ねるdivの相対位置(top) (tdのheight + (border-width * 2)) * (行数 - 1)
重ねるdivの幅 (tdのwidth + (border-width * 2)) * 列数
重ねるdivの高さ (tdのheight + (border-width * 2)) * 行数

See the Pen table size - separate + content-box by ぷーたんは社会人リハビリ中 (@putan) on CodePen.

collapse + border-box

ここからが難所です。
border-boxの場合、borderはboxの内側に入り込んでいますが、
collapseがboxにborderの中心を合わせようと、borderの位置を0.5border分外側にずらします
image.png
image.png

指定するサイズ 計算
重ねるdivの相対位置(left) tdのwidth * (列数 - 1)
重ねるdivの相対位置(top) tdのheight * (行数 - 1)
重ねるdivの幅 tdのwidth * 列数 + border-width
重ねるdivの高さ tdのheight * 行数 + border-width

See the Pen table size - collapse + border-box by ぷーたんは社会人リハビリ中 (@putan) on CodePen.

collapse + content-box

content-boxの場合、元々はborderはboxサイズの外側にありますが、
collapseがboxにborderの中心を合わせようと、boxサイズを0.5border分外側にずらします
image.png
image.png

計算
重ねるdivの相対位置(left) (tdのwidth + border-width) * (列数 - 1)
重ねるdivの相対位置(top) (tdのheight + border-width) * (行数 - 1)
重ねるdivの幅 (tdのwidth + border-width) * 列数 + border-width
重ねるdivの高さ (tdのheight + border-width) * 行数 + border-width

See the Pen table size - collapse + content-box by ぷーたんは社会人リハビリ中 (@putan) on CodePen.

まとめ

はい、ということでborder-collapsebox-sizingの組み合わせ4パターンで無事テーブルにdivを重ねることができました。
今回はpaddingborder-spacingを0としましたが、ぜひその辺りも調整してdivを重ねてみてください。

参照

MDN border-collapse
MDN box-sizing
スタックオーバーフロー table、tr、tdタグの box-sizing: border-box について

13
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?