icon
Let's create! WordPressサイト制作とメンテ/エラー対応から、PHP/CSS/javascriptプログラミング、動画・音・イラスト等制作まで扱うコラム

【CSS】padding,border分はみ出し対策にbox-sizing: border-box(ただしマージンまで計算しない)

更新: 2024/05/12 2190文字

以前『レスポンシブで、スマホからアクセスしたときに横にずれる・ディスプレイ領域の外にはみ出る現象を直したい』といった記事を書いたんですけど、今回はそれの対策になりそうなCSSプロパティを紹介します。内容はpadding,border分をボックスサイズと合わせて計算してくれるというもの。さっそく内容を確認していきましょう。

box-sizing:border-box; とは?

box-sizingは要素の全体の幅と高さに関わるプロパティで、現在使われている値は主に2つ(border-box,content-box)です。

content-boxは『要素に境界やパディングがある場合、画面に表示される矩形の大きさは width および height にこれらを加えたもの』、border-box『幅 = コンテンツの幅、高さ = コンテンツの高さとして計算し、境界やパディングは計算に含まれない』という扱いになります。

このほか、グローバル値として『inherit(親要素の値を継承)、initial(初期値、通常content-box)』などがあります。

コード/表示例 box-sizing: content-box

mainの領域が、width:1024px;となっています。ここに該当のボックスを表示させてみました。なんかはみ出てますけど、該当のボックスCSS値は、以下のようになっています。

.box1024 {
 width: 1024px;
 height: 100px;
 border: 2px solid #ffaacc;
 box-sizing: initial;
 padding: 16px;
}

幅を計測してみたところ、左右borderが2×2で4,左右paddingが16×2で32。1024+4+32で実際のwidthが1060pxになっています。そりゃ1024pxの領域に入れたらはみ出ます。overflow: hidden;を使っても良いんですけど、borderが不自然に途切れるとカッコ悪いかもしれません(狙って片方が切れたデザインにしている場合は可)。

box-sizing: border-boxで、padding&border分を領域に含める

次は上記のpadding,boder,要素widthは同じで、box-sizing: border-boxを指定してみます。CSS書き方は以下の通り。

.box1024bb{
 width:1024px;
 height:100px;
 border:2px solid #ffaacc;
 box-sizing:border-box;
 padding:16px;
}

こんな感じで、borderとpadding分が含まれて計算されたので、要素が1024px内に収まりました。SPサイトとかで『padding分はみ出て、その分横に不自然にスライドしてしまう』みたいな対策にも使えそうです。

box-sizing: border-boxを指定してもはみ出る例(marginを足した分が領域をオーバー)

なんかgoogleのキーワード予測みたいなので『box-sizing: border-boxはみ出る』というのが出てきたので、ついでに検証してみます。いろいろやってみたけど、おそらく原因はmargin。以下のように、大き目のマージンを足してみます。

.box1024bbma{
 width:1024px;
 height:100px;
 border:2px solid #ffaacc;
 box-sizing:border-box;
 padding:16px;
 margin-left:48px;
}

boxサイズは変わらないんですけど、margin足した分右側にはみ出してしまいました。margin分は事前に計算しておくか、flexboxとか自動的に調整してくれるやつを使ってもよさそうです。

あとがき・まとめ

  • box-sizing: content-boxは、領域にpadding/borderの分は含まれない
  • box-sizing: border-boxは、padding/borderの分が含まれる
  • box-sizing: border-box指定していても、marginを足した分が親要素領域をオーバーした場合ははみ出る

まとめると、こんなところでしょうか。どっちにしろ、『padding/borderの分は~』とか『実際に表示されているボックスのサイズは~』みたいなのを意識しておくとよさそうな気がしました。


【カテゴリ】- CSS
【タグ】-

関連記事