box-sizing: border-boxの使い方

f:id:endoakak:20200725103845j:plain

box-sizingとは

box-sizingは、CSSのプロパティのひとつです。要素の高さや幅を指定したときに、paddingとborderを含めるか否かを指定します。それだけではイメージがしづらいと思うので、具体的に説明していきます。

content-boxとborder-box

  • content-box
    デフォルト。要素の大きさにpaddingとborderを含めない。
  • border-box
    要素の大きさにpaddingとborderを含める。

次のような感じです。

.content-box {
  background-color: lightgray;
  height: 200px;
  width: 300px;
  padding: 0 20px;
  border: 10px solid black;
  box-sizing: content-box;
}

.border-box {
  background-color: lightgray;
  height: 200px;
  width: 300px;
  padding: 0 20px;
  border: 10px solid black;
  box-sizing: border-box;
}

f:id:endoakak:20200723185322p:plain

box-sizingプロパティ以外は全く同じですが、border-boxの方が小さくなりました。

図にするとこんな感じになってます。

f:id:endoakak:20200723185510p:plain

どちらもwidth: 300pxと指定していますが、content-boxでは要素の中身が300pxなのに対し、border-boxではpaddingとborderまで含めて300pxになっています。

ちなみに、図では横幅だけに注目していますが、もちろん縦も同様です。

何の意味があるのか

どっちでも良いように感じますが、大きさを%で表したいときにborder-boxの方が便利です。

例えば下のようにすると、borderの10pxの分だけ親要素からはみ出してしまいます。

.box {
width: 60%;
height: 60%;
padding: 10%;
margin: 10%;
border: 5px solid black;
}

borderの10pxの分が親要素の何%に当たるか計算して…なんて絶対嫌ですよね。
その上、paddingはpxで指定したい、となるとなおさら親要素のサイズに合わせるのが難しくなります。

そういうときにborder-boxにしておくと、widthとmarginで100%にすれば良いので、paddingやborderを気にする必要がなくなって便利です。

まとめ

  • box-sizingプロパティは、要素の大きさにpaddingとborderを含めるかを指定する
  • content-boxではpaddingとborderを含めない
  • border-boxではpaddingとborderを含める
  • サイズを%で指定したいときに役立つ