CSSのボックスモデル

ボックスには、枠線(境界線)やその内側の余白(間隔)、外側の余白などがあります。

本ページでは、CSSのボックスモデルについて説明します。

ボックスモデルとは?

ボックスには、枠線やその内側の余白、外側の余白などがありますが、これはボックスモデルに基づいています。

例えば、ある要素を作って余白や枠線を付けたとします。この場合、以下の右で示すような領域が確保されます。

ボックスモデルの領域

以下は、それぞれの領域の説明です。

コンテンツ領域
テキストなどのコンテンツが表示される所です。
パディング領域
コンテンツ領域とボーダー領域の間にある余白です。
ボーダー領域
枠線部分です。
マージン領域
他の要素と間隔を空ける部分です。

それぞれの領域を組み合わせて、以下のようなボックスが形成されます。

【領域を組み合わせて形成されるボックス】
種類 説明
コンテンツボックス コンテンツ領域が該当します。
パディングボックス コンテンツ領域 + パディング領域
ボーダーボックス コンテンツ領域 + パディング領域 + ボーダー領域
マージンボックス コンテンツ領域 + パディング領域 + ボーダー領域 + マージン領域

パディング

パディングは、コンテンツが枠線に近すぎると見にくいため、間隔を空ける時に使います。

パディング領域の大きさは、プロパティのpaddingで定義できます。以下は、CSSでのpadding利用例です

【CSSでのpadding利用例】
padding: 4px 3px 2px 1px;

上記により、コンテンツボックスの上に4px、右に3px、下に2px、左に1pxの余白が設けられます。上から時計回りと覚えてください。

paddnig利用例

以下のように、短縮形で記述することもできます。

【短縮形で指定するパディング】
宣言 説明
padding: 4px 3px 2px; 上に4px、左右に3px、下に2pxの余白を設けます。
padding: 4px 2px; 上下4px、左右2pxの余白を設けます。
padding: 4px; 上下左右に4pxの余白を設けます。

 また、上下左右を別々に定義することもできます。

【上下左右を別々に定義するパディング】
プロパティ 説明
padding-top 上に余白を設けます。
padding-bottom 下に余白を設けます。
padding-left 左に余白を設けます。
padding-right 右に余白を設けます。

pxだけでなく、%やemでも定義できます。padding-left:10%;と定義すると、親要素のコンテンツボックス幅の10%にあたる余白が左に設けられます。emは文字の大きさです。2emでは、2文字分の余白が設けられます。

なお、余白が0の場合は単位を省略して記述できます。例えば、padding:0;などです。

ボーダー

ボーダーは、ボックスに枠線を付ける時に使います。

ボーダー領域の大きさは、プロパティのborder-widthで定義できます。以下は、CSSでのborder-width利用例です

【CSSでのborder-width利用例】
border-width: 4px 3px 2px 1px;
border-style: solid;

上記により、パディングボックスを囲む枠として、上に4px、右に3px、下に2px、左に1pxの実線が表示されます。

paddingと同様に、border-width:4px;などの短縮形で指定もできます。

また、以下を使って上下左右別々に指定もできます。

  • border-top-width
  • border-bottom-width
  • border-left-width
  • border-right-width

単位はemでも指定できますし、その他には以下の指定もできます。

【border-widthで指定できる値】
説明 太さの例
thin 細線 1px
medium 普通 3px
thick 太線 5px

例えば、border-width:thin;と宣言した場合は、周囲に1pxの枠線が表示されますが、太さはブラウザによって異なる可能性があります。

マージン

マージンは、他の要素と間隔を空ける時に使います。

マージン領域の大きさは、プロパティのmarginで定義できます。以下は、CSSでのmargin利用例です

【CSSでのmargin利用例】
margin: 4px 3px 2px 1px;

上記により、ボーダーボックスの上に4px、右に3px、下に2px、左に1pxの余白が設けられます。margin:4px;など短縮形で指定もできます。

以下を使って、上下左右別々に指定もできます。

  • margin-top
  • margin-bottom
  • margin-left
  • margin-right

emや%でも指定できますし、その他にはautoも使えます。

【marginでautoを利用する例】
width: 200px;
margin: 0 auto;

上記は、横幅200pxになって親要素の中央にボックスが表示(センタリング)されます。

マージンの相殺

1つのボックスでmargin:4px;、隣接するボックスでmargin:2px;が宣言されていたとします。この場合のマージンは、合計した6pxではなく4pxになります。

marginの相殺例

マージンは、大きい方の値が採用されます。これを、マージンの相殺と言います。

また、マージンだけは-(マイナス)の値が使えます。片方をmargin:4px;、他方をmargin:-2px;と宣言した場合、マージンは2px(= 4 - 2)になります。

ボーダーボックスを元に横幅や高さを指定する

widthで指定する横幅、heightで指定する高さは、コンテンツボックスの横幅や高さです。このため、paddingやborder-widthを使うと横幅や高さが広がって、枠線が表示されます。

横幅や高さが広がる例

上記は、width:80px、height:40px;を宣言していますが、枠線も含めた横幅は92px、高さは52pxになっています。

この場合、親要素で横幅が指定されている時に、その横幅に収めるためにはパディング領域やボーダー領域をマイナスして、widthを指定する必要があります。高さも同様です。

また、一般的な感覚で言えば、枠線部分が横幅や高さを示す方がわかりやすいかもしれません。これは、box-sizingプロパティで実現できます。box-sizingを使うと、ボーダーボックスに対してwidthやheightの指定ができるようになります。

以下は、CSSでの利用例です。

【CSSでのbox-sizing利用例】
box-sizing: border-box;

上記により、widthやheigthがボーダーボックスの横幅や高さの指定に変わります。ボーダー領域やパディング領域は、ボーダーボックスの内側に作られるため、paddingやborder-widthを指定しても広がりません。コンテンツボックスが狭くなります。

ボーダーボックス利用例

つまり、親要素で横幅が指定されていても、その幅に収めるためにパディングやボーダーの横幅をマイナスしてwidthを計算する必要がなくなります。

box-sizingのデフォルトはcontent-boxで、コンテンツボックスの横幅や高さを指定します。