Quantcast
Channel: CSSタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8925

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

$
0
0

テーブルのセルに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-boxpaddingとborderを含めないwidthやheightの外側
border-boxpaddingと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 について


Viewing all articles
Browse latest Browse all 8925

Trending Articles