--- title: box-sizing slug: Web/CSS/box-sizing tags: - Boxes - CSS - CSS Box Model - CSS Property - CSS プロパティ - CSS ボックスモデル - Reference - border-box - box model - box-sizing - content-box - height - size - width translation_of: Web/CSS/box-sizing ---

{{CSSRef}}

CSSbox-sizing プロパティは、要素の全体の幅と高さをどのように計算するのかを設定します。

{{EmbedInteractiveExample("pages/css/box-sizing.html")}}

CSS ボックスモデルの既定では、要素に割り当てられた width および height は、要素のコンテンツ領域のみに適用されます。要素に境界線やパディングがある場合、画面にレンダリングされる矩形の大きさは width および height にこれらを加えたものになります。つまり、 width および height を設定する際には、境界線やパディングが加えられるように値を調整しなければなりません。例えば、 width: 25%; で左や右のパディングまたは左や右の境界がある 4 つのボックスを並べた場合、既定では親コンテナーの制約の中で 1 行には並びません。

box-sizing プロパティは上記の振る舞いを調整するために使用できます。

注: 要素をレイアウトする際には、 box-sizingborder-box に設定しておくと便利です。これにより、要素の寸法の扱いが非常に簡単になり、一般的にコンテンツをレイアウトする際につまずく可能性のあるいくつかの落とし穴を排除することができます。 一方、 position: relative または position: absolute を使用する場合、 box-sizing: content-box を使用することで、コンテンツに対する相対的な位置の値を設定することができ、境界やパディングの幅の変更に依存しなくなり、これが望ましい場合もあります。

構文

box-sizing プロパティは、以下のいずれか1つのキーワードを選択して定義します。

content-box
これは、 CSS 標準仕様で規定されている初期値および既定値です。 {{Cssxref("width")}} および {{Cssxref("height")}} プロパティの寸法は、コンテンツ領域のみを含むものとなり、パディング、境界線、マージン領域を含みません。例えば .box {width: 350px; border: 10px solid black;} は 370px の幅のボックスを描画します。
この場合、それぞれの要素の寸法は、 幅 = コンテンツの幅高さ = コンテンツの高さ として計算されます(境界線やパディングの値を除く)。
border-box
{{Cssxref("width")}} および {{Cssxref("height")}} プロパティには、コンテンツ、パディング、境界線の領域が含まれますが、マージンは含まれません。なお、パディングと境界線はボックスの内側に置かれることに注意してください。例えば .box {width: 350px; border: 10px solid black;} は、ブラウザーでボックスの幅が 350px、コンテンツ領域の幅 330px として描画されます。コンテンツボックスは負の値にできず 0 に丸められますので、要素を非表示にするために border-box を使用することはできません。
この場合、それぞれの要素の寸法は、 幅 = 境界線 + パディング + コンテンツの幅高さ = 境界線 + パディング + コンテンツの高さ として計算されます。

公式定義

{{cssinfo}}

形式文法

{{csssyntax}}

content-box と border-box のボックスサイズ

この例では、2つの box-sizing の値が、それ以外の条件が同じ要素のレンダリングの大きさをどのように変えるかを示します。

HTML

<div class="content-box">Content box</div>
<br>
<div class="border-box">Border box</div>

CSS

div {
  width: 160px;
  height: 80px;
  padding: 20px;
  border: 8px solid red;
  background: yellow;
}

.content-box {
  box-sizing: content-box;
  /* 全体の幅: 160px + (2 * 20px) + (2 * 8px) = 216px
     全体の高さ: 80px + (2 * 20px) + (2 * 8px) = 136px
     コンテンツ領域の幅: 160px
     コンテンツ領域の高さ: 80px */
}

.border-box {
  box-sizing: border-box;
  /* 全体の幅: 160px
     全体の高さ: 80px
     コンテンツ領域の幅: 160px - (2 * 20px) - (2 * 8px) = 104px
     コンテンツ領域の高さ: 80px - (2 * 20px) - (2 * 8px) = 24px */
}

結果

{{EmbedLiveSample('Box_sizes_with_content-box_and_border-box', 'auto', 300)}}

仕様書

仕様書 状態 備考
{{SpecName('CSS3 Basic UI', '#box-sizing', 'box-sizing')}} {{Spec2('CSS3 Basic UI')}} 初回定義

ブラウザーの互換性

{{Compat("css.properties.box-sizing")}}

関連情報