CSS
ボックスモデル
CSSの基本的な概念のひとつである「ボックスモデル」(box model)について見ていきます。
CSSでは、それぞれの要素について生成される四角形の領域の事を「ボックス」と表現する。ボックスは、以下の4つの領域から構成される。
- 要素に含まれる「内容」(content)
- 内容とボーダーとの余白である「パディング」(padding)
- 枠線を表す「ボーダー」(border)
- ボーダーと他の要素との余白である「マージン」(margin)
各領域の境界線は「辺」(edge)と表現される。
これらの領域はそれぞれ、上(top)、下(bottom)、左(left)、右(right)の4辺に分解する事が出来る。CSSでは4辺ごとに個別のスタイルを設定する事が可能である。
上図からもわかるとおり、ボックスの幅と高さは、以下のように計算されることになる。
ボックスの幅=左右のマージン+左右のボーダー+左右のパディング+内容領域の幅
ボックスの高さ=上下のマージン+上下のボーダー+上下のパディング+内容領域の高さ
ボックスモデルと背景
ボックスモデルと背景の関係について説明しよう。要素に背景を設定した場合、パディングとボーダーの領域まで適用されるが、マージンの領域には適用されない。
このように、マージンの領域では背景は常に透過(transparent)され、親要素(親ボックス)で設定されている背景に依存する事になる。ボーダーの領域では、ボーダー関連プロパティで指定したスタイルが、背景の上に重ねて描写される。
Verify
サイトによっては、heightプロパティと widthプロパティが paddingを含むとの記載があったので、検証してみました。
一般的なボックスモデルのイメージは下図のようになると思います。
そして、SVGを使って、width:10px, height:100px の四角形を表示して、paddingプロパティの余白の付き方を確認してみました。
content
HTML
<p>
<svg width="10px" height="100px">
<rect width="10px" height="100px" fill="#5d5d5d" />
</svg>
content
</p>
CSS
p {
padding: 10px;
background-color: #999999;
height: 100px;
border: solid 10px #006600;
}
これの数値を変更したりして検証してみた結果、heightプロパティには「paddingは含まない」ことが確認できました。よって、widthプロパティにも paddingは含まないと推測できます。