CSSで任意サイズの枠線を%指定のボックスぴったりに収める

背景

指定等で枠線をつけると、枠線は対象の外側に引かれるためサイズがぴったりにならない
これの防止をする。

主として健忘症である未来の自分へのメモ

実装

※Chromeでのみ動作確認済み

main
1
2
3
4
5
6
.class{  
--b:5px; /* 枠線のサイズ指定 */
Width:calc(100vw - calc(var(--b)*2)); /* 枠線は左右に2本入るため枠線のサイズかける2をした数を引く */
Height:calc(50vh - calc(var(--b)*2)); /* 枠線は上下に2本入るため枠線のサイズかける2をした数を引く */
border: var(--b) solid #fff; /* 枠線指定 */
}

See the Pen border perfect by hashito (@hashito) on CodePen.

追記

背景

@takamoso 様からコメントを頂き、「そこまでしなくても、box-sizing を使えばできますよ。」とのこと…

調査

box-sizingがわからなかったので調べてみると
「ボックスサイズの算出方法の指定、border-boxに指定すればpaddingborderの幅を含める」
ということで探していたのはまさにこれです

例/デモ

例としてコードも頂きましたので、下記に転記させていただきます。

main
1
2
3
4
5
6
7
div{  
box-sizing: border-box;
width: 100%;
height: 100%;
border: 5px solid #f00;
background: #000;
}

デモ

See the Pen border perfect2 by hashito (@hashito) on CodePen.

@takamoso 様コメントありがとうございました。