Gap decorations

Baseline 未達(対応: Chrome)Grid や Flexbox の要素の間の隙間に、区切り線を引くMDN ↗

STEP 1

border で区切ると端にも線が出る

Grid の要素どうしを線で区切るために、各要素の右と下に border を付けました。外側の端にも線が出てしまいます。右下の角をドラッグして幅を変えると列の数が変わり、どの要素が端に来るかも変わるので、:nth-child() で消すのも難しくなります。

訪問者

12,480

新規登録

326

購入

89

売上

¥1.2M

解約

4

問い合わせ

17

STEP 2

隙間に線を引く

column-rule と row-rule を Grid に指定すると、要素の間の隙間だけに線が引かれます。幅を変えて列の数が変わっても、線は隙間についていきます。rule-visibility-items: around は、両側とも空きセルの所には線を引かないようにします。

訪問者

12,480

新規登録

326

購入

89

売上

¥1.2M

解約

4

問い合わせ

17

STEP 3

交わる所で線を切る

rule-break: intersection で縦と横の線が交わる所で線を区切り、rule-inset-junction で交点の前後を空けます。

訪問者

12,480

新規登録

326

購入

89

売上

¥1.2M

解約

4

問い合わせ

17

使っている機能

column-rule / row-rule
列の間と行の間の隙間に線を引く。これまで段組み(multi-column)だけで使えた column-rule が、Grid と Flexbox でも使えるようになった
rule-visibility-items
空きセルの横に線を引くかを決める。around は片側だけでも要素があれば引き、between は両側に要素がある所だけに引く
rule-break
線をどこで区切るかを決める。intersection は縦と横の線が交わる所ごとに区切る
rule-inset-junction
線の端を、交点からどれだけ離すかを決める。負の値にすると、交点の中へ伸びる

CSS

/* 隙間の中央に縦と横の線を引く */
.gap-rule {
	column-rule: 2px solid #c5cae9;
	row-rule: 2px solid #c5cae9;
	/* 両側とも空きセルの所には線を引かない */
	rule-visibility-items: around;
	/* 線の端を交点の中心まで伸ばし、途切れた線を交わる線につなげる */
	rule-inset-junction: -50%;
}

/* 交わる所で線を切り、交点の前後を 8px 空ける */
.gap-junction {
	rule-break: intersection;
	rule-inset-junction: 8px;
}

HTML

<div class="gap-grid gap-rule">
	<div class="gap-tile"><p class="gap-tile-label">訪問者</p><p class="gap-tile-value">12,480</p></div>
	<div class="gap-tile"><p class="gap-tile-label">新規登録</p><p class="gap-tile-value">326</p></div>
	<div class="gap-tile"><p class="gap-tile-label">購入</p><p class="gap-tile-value">89</p></div>
	<div class="gap-tile"><p class="gap-tile-label">売上</p><p class="gap-tile-value">¥1.2M</p></div>
	<div class="gap-tile"><p class="gap-tile-label">解約</p><p class="gap-tile-value">4</p></div>
	<div class="gap-tile"><p class="gap-tile-label">問い合わせ</p><p class="gap-tile-value">17</p></div>
</div>