CSSボックスモデルは,文書ツリーの要素に対して生成される長方形のボックスを記述し,視覚フォーマットモデルに従って拡張する。ページボックスは,特殊なボックスであって,ページ付けしたメディアの箇所で詳細を記述する。
各ボックスは,テキスト,画像などの内容領域をもち,オプションで,その周囲にパディング,境界及びマージンの領域をもつ。各領域のサイズは,以降で定義される特性によって指定される。次の図は,これらの領域がどのように関係しているか,並びにマージン,境界及びパディングの断片を参照するために使用する用語を示す。
マージン,境界及びパディングは,左部,右部,上部及び下部に分けることができる。例えば,図では,左マージンは"LM",右パディングは"RP",上境界は"TB"などとなっている。
四つの領域(内容,パディング,境界及びマージン)の各周辺を"辺"と呼ぶ。そこで,各ボックスには四つの辺をもつ。
各辺は,左辺,右辺,上辺及び下辺に分かれる。
ボックスの内容領域の寸法,すなわち内容の幅及び内容の高さは,複数の要因に依存する。ここで複数の要因とは,ボックスを生成する要素が'width'特性集合又は'height'特性集合をもつかどうか,ボックスがテキスト又はその他のボックスを含んでいるかどうか,ボックスが表であるかどうかなどとする。ボックスの幅及び高さは,視覚フォーマットモデルの詳細で示す。
ボックス幅は,左マージン及び右マージン,境界,パディング並びに内容幅の合計によって与えられる。高さは,上マージン及び下マージン,境界,パディング並びに内容の高さの合計によって与えられる。
ボックスの様々な領域の背景スタイルは,次のとおりに決定される。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
  <HEAD>
    <TITLE>Examples of margins, padding, and borders</TITLE>
    <STYLE type="text/css">
      UL { 
        background: green; 
        margin: 12px 12px 12px 12px;
        padding: 3px 3px 3px 3px;
                                     /* No borders set */
      }
      LI { 
        color: black;                /* text color is black */ 
        background: gray;            /* Content, padding will be gray */
        margin: 12px 12px 12px 12px;
        padding: 12px 0px 12px 12px; /* Note 0px padding right */
        list-style: none             /* no glyphs before a list item */
                                     /* No borders set */
      }
      LI.withborder {
        border-style: dashed;
        border-width: medium;        /* sets border width on all sides */
        border-color: black;
      }
    </STYLE>
  </HEAD>
  <BODY>
    <UL>
      <LI>First element of list
      <LI class="withborder">Second element of list is longer
           to illustrate wrapping.
    </UL>
  </BODY>
</HTML>
このHTML文書例は,(他の関係の間で,)二つのLIを子供とするUL要素をもった文書ツリーを生じる。
次の最初の図は,この例が何を生成するかを示している。2番目の図は,UL要素のマージン,パディング及び境界と,その子供であるLI要素のマージン,パディング及び境界との関係を示している。
次に注意することを示す。
マージン特性は,ボックスのマージン領域の幅を指定する。'margin'簡略記述特性は,上下左右のマージンをすべて設定するが,その他のマージン特性は,上下左右のマージンを個々に設定する。
ここで定義される特性は,<margin-width>値型を参照し, 次の値のうちいずれか一つをとってもよい。
マージン特性に対して,負の値は許されるが,実装固有の制限が存在してもよい。
| 値: | <margin-width> | inherit | 
| 初期値: | 0 | 
| 適用対象: | すべての要素 | 
| 継承: | しない | 
| パーセント値: | 包含ブロックの幅を参照する | 
| メディア: | 視覚メディア | 
これらの特性は,ボックスの上マージン,右マージン,下マージン及び左マージンを設定する。
H1 { margin-top: 2em }
| 値: | <margin-width>{1,4} | inherit | 
| 初期値: | 簡略記述特性には定義されない | 
| 適用対象: | すべての要素 | 
| 継承: | しない | 
| パーセント値: | 包含ブロックの幅を参照する | 
| メディア: | 視覚メディア | 
'margin'特性は,'margin-top','margin-right','margin-bottom'及び 'margin-left'をスタイルシートの同じ位置で設定するための簡略記述特性とする。
値がただ一つだけ存在する場合は,上下左右のすべてのマージンにそれを適用する。値が二つ存在する場合は,上下マージンに最初の値を設定し,左右マージンに2番目の値を設定する。値が三つ存在する場合は,上マージンに最初の値を設定し,左右マージンに2番目の値を設定し,下マージンに3番目の値を設定する。値が四つ存在する場合は,上マージン,右マージン,下マージン及び左マージンにそれぞれを適用する。
BODY { margin: 2em }         /* all margins set to 2em */
BODY { margin: 1em 2em }     /* top & bottom = 1em, right & left = 2em */
BODY { margin: 1em 2em 3em } /* top=1em, right=2em, bottom=3em, left=2em */
この例の最後の規則は,次の例と同等とする。
BODY {
  margin-top: 1em;
  margin-right: 2em;
  margin-bottom: 3em;
  margin-left: 2em;        /* copied from opposite side (right) */
}
この標準情報(TR)では, マージンのつぶしという表現は,二つ以上のボックスの(パディング領域又は境界領域によって分離されていない)隣接マージンが,結合して単一のマージンを形成するという意味とする。ただし,この場合の二つ以上のボックスは,互いに隣接するか,又は入れ子になっていてもよい。
CSS2では, 左右マージンはつぶされない。
上下マージンは,次の一定のボックス間でつぶされてもよい。
つぶされたマージンの図については,マージン,パディング及び境界の例を参照すること。
パディング特性は,ボックスのパディング領域の幅を指定する。'padding'簡略記述特性は,上下左右のパディングをすべて設定するが,その他のパディング特性は,パディングを各サイドだけに設定する。
ここで定義される特性は,<padding-width>値型を参照し, 次の値の一つをとってよい。
マージン特性とは異なり, パディング値は,負とすることはできない。マージン特性と同様に,パディング特性のパーセント値は,生成されるボックスの包含ブロックの幅を参照する。
| 値: | <padding-width> | inherit | 
| 初期値: | 0 | 
| 適用対象: | すべての要素 | 
| 継承: | しない | 
| パーセント値: | 包含ブロックの幅を参照する | 
| メディア: | 視覚メディア | 
これらの特性は,ボックスの上パディング,右パディング,下パディング及び左パディングを設定する。
BLOCKQUOTE { padding-top: 0.3em }
| 値: | <padding-width>{1,4} | inherit | 
| 初期値: | 簡略記述特性には定義されない | 
| 適用対象: | すべての要素 | 
| 継承: | しない | 
| パーセント値: | 包含ブロックの幅を参照する | 
| メディア: | 視覚メディア | 
'padding'特性は,'padding-top','padding-right','padding-bottom'及び'padding-left'をスタイルシートの同じ位置で設定するための簡略記述特性とする。
値が一つだけ存在する場合は, 上下左右パディングのすべてにそれを適用する。値が二つ存在する場合は,上下パディングに最初の値を設定し,左右パディングに2番目の値を設定する。値が三つ存在する場合は,上パディングに最初の値を,左右パディングに2番目の値を,下パディングに3番目の値をそれぞれ設定する。値が四つ存在する場合は,右パディング,右パディング,下パディング及び左パディングにそれぞれを適用する。
パディング領域における面の色又は画像は,'background'特性を介して指定される。
H1 { 
  background: white; 
  padding: 1em 2em;
} 
この例では,上下パディング('padding-top'及び'padding-bottom')は'1em'に指定され,左右パディング('padding-right'及び'padding-left')は'2em'に指定されている。'em'単位は,要素のフォントサイズに相対的とする。'1em'は使用されるフォントのサイズに等しい。
境界特性は,ボックスの境界領域の幅,色及びスタイルを指定する。これらの特性は,すべての要素に適用される。
備考 特にHTMLの場合は,利用者エージェントは,"通常の"要素とは異なるボタン,メニューなどの一定の要素に対して境界をレンダリングしてもよい。
境界幅特性は境界領域の幅を指定する。ここで定義される特性は,<border-width>値型を参照し, 次の値の一つをとってよい。
最初の三つの値の解釈は,利用者エージェントに依存する。しかし,次の関係は維持されなければならない。
'thin' <='medium' <= 'thick'.
さらに, これらの幅は文書を通して一定でなければならない。
| 値: | <border-width> | inherit | 
| 初期値: | 中間の太さ | 
| 適用対象: | すべての要素 | 
| 継承: | しない | 
| パーセント値: | N/A | 
| メディア: | 視覚メディア | 
これらの特性は,ボックスの上境界,右境界,下境界及び左境界を設定する。
| 値: | <border-width>{1,4} | inherit | 
| 初期値: | 個々の特性を参照 | 
| 適用対象: | すべての要素 | 
| 継承: | しない | 
| パーセント値: | N/A | 
| メディア: | 視覚メディア | 
この特性は,'border-top-width','border-right-width','border-bottom-width'及び'border-left-width'をスタイルシートの同じ位置に設定するための簡略記述特性とする。
値が一つだけ存在する場合は,上下左右の境界すべてにそれを適用する。値が二つ存在する場合は,上下境界に最初の値を設定し,左右境界に2番目の値を設定する。値が三つ存在する場合は,上境界に最初の値を,左右境界に2番目の値を,下境界に3番目の値をそれぞれ設定する。値が四つ存在する場合は,上境界,右境界,下境界及び左境界にそれぞれを適用する。
次の例では,コメントが,上境界,右境界,下境界及び左境界の結果として生じる幅を示す。
H1 { border-width: thin }                   /* thin thin thin thin */
H1 { border-width: thin thick }             /* thin thick thin thick */
H1 { border-width: thin thick medium }      /* thin thick medium thick */
境界色特性は,ボックスの境界の色を指定する。
| 値: | <color> | inherit | 
| 初期値: | 'color' 特性の値 | 
| 適用対象: | すべての要素 | 
| 継承: | しない | 
| パーセント値: | N/A | 
| メディア: | 視覚メディア | 
| 値: | <color>{1,4} | transparent | inherit | 
| 初期値: | 個々の特性を参照 | 
| 適用対象: | すべての要素 | 
| 継承: | しない | 
| パーセント値: | N/A | 
| メディア: | 視覚メディア | 
'border-color'特性は,上下左右の境界の色を設定する。値は次の意味をもつ。
'border-color'特性は一つから四つまでの値をもつことができ,値は'border-width'の場合と同様に上下左右に設定される。
要素の境界色が境界特性を用いて指定されない場合は,利用者エージェントは,要素の'color'特性の値を境界色の計算値として使用しなければならない。
次の例では, 境界は黒い実線となる。
P { 
  color: black; 
  background: white; 
  border: solid;
}
境界スタイル特性は,実線,二重線,破線などのボックスの境界の線種を指定する。ここで定義される特性は,<border-style>値型を参照し,次の一つをとってよい。
すべての境界は,ボックスの背景の上に描写される。'groove','ridge','inset'及び'outset'という値に対して描かれる境界の色は,要素の'color'特性に依存する。
適合するHTML利用者エージェントは,'dotted','dashed','double','groove','ridge','inset'及び'outset'を'solid'と解釈してもよい。
| 値: | <border-style> | inherit | 
| 初期値: | none | 
| 適用対象: | すべての要素 | 
| 継承: | しない | 
| パーセント値: | N/A | 
| メディア: | 視覚メディア | 
| 値: | <border-style>{1,4} | inherit | 
| 初期値: | 個々の特性を参照 | 
| 適用対象: | すべての要素 | 
| 継承: | しない | 
| パーセント値: | N/A | 
| メディア: | 視覚メディア | 
'border-style'特性は,上下左右の境界のスタイルを設定する。この特性は一つから四つの値をもつことができ,8.5.1の'border-width'と同様に,値は上下左右に設定される。
#xy34 { border-style: solid dotted }
この例では, 左右境界は'solid'となっており,上下境界は'dotted'となる。
境界スタイルの初期値は'none'なので,境界スタイルが設定されていない場合は,境界は見えない。
| 値: | [ <'border-top-width'> || <'border-style'> || <color> ] | inherit | 
| 初期値: | 個々の特性を参照 | 
| 適用対象: | すべての要素 | 
| 継承: | しない | 
| パーセント値: | N/A | 
| メディア: | 視覚メディア | 
これは,ボックスの上境界,右境界,下境界及び左境界の,幅,スタイル及び色の設定を目的とする簡略記述特性とする。
H1 { border-bottom: thick solid red }
この規則は,H1要素以下の境界の幅,スタイル及び色を設定する。省略した値はその初期値に設定される。次の規則は境界の色を指定しないので,境界は,'color'特性が指定する色をもつ。
H1 { border-bottom: thick solid }
| 値: | [ <'border-width'> || <'border-style'> || <color> ] | inherit | 
| 初期値: | 個々の特性を参照 | 
| 適用対象: | すべての要素 | 
| 継承: | しない | 
| パーセント値: | N/A | 
| メディア: | 視覚メディア | 
'border'特性は,ボックスの上下左右すべての境界に,同じ幅,色及びスタイルを設定するための簡略記述特性とする。簡略記述'margin'特性及び簡略記述'padding'特性とは異なり,'border'特性は,上下左右の境界に異なる値を設定することができない。上下左右の境界に異なる値を設定するには,他の境界特性を一つ以上使用しなければならない。
例えば, 次の最初の規則はその後の四つの規則の集合と等しい。
P { border: solid red }
P {
  border-top: solid red;
  border-right: solid red;
  border-bottom: solid red;
  border-left: solid red
}
特性には,ある程度重複する部分があるので,規則が指定される順序は重要とする。
次の例を検討する。
BLOCKQUOTE {
  border-color: red;
  border-left: double;
  color: black
}
この例では, 左境界の色は黒となり,その他の境界の色は赤となる。これは,'border-left'が,幅,スタイル及び色を設定していることによる。'border-left'特性は色値を提供しないので,'color'特性から色値をとることになる。'color'特性が'border-left'特性の後に設定されていることは,重要ではない。