10. 視覚整形モデル詳細

目次

  1. 「包含ブロック」の定義
  2. 内容領域の幅: 'width'
  3. 内容領域の幅と水平方向のマージンを計算する
    1. 非置換インライン要素の場合
    2. 置換インライン要素の場合
    3. 通常フローにある非置換ブロック要素の場合
    4. 通常フローにある置換ブロック要素の場合
    5. 非置換浮動要素の場合
    6. 置換浮動要素の場合
    7. 絶対配置される非置換要素の場合
    8. 絶対配置される置換要素の場合
  4. 幅の最大値と最小値: 'min-width'、max-width'
  5. 内容領域の高さ: 'height'
  6. 内容領域の高さと垂直方向のマージンを計算する
    1. 非置換インライン要素の場合
    2. 置換インライン要素、通常フローにある置換ブロック要素、置換浮動要素の場合
    3. 通常フローにある非置換ブロック要素、非置換浮動要素の場合
    4. 絶対配置される非置換要素の場合
    5. 絶対配置される置換要素の場合
  7. 高さの最大値と最小値: 'min-height'、'max-height'
  8. 行の高さを計算する: 'line-height'、'vertical-align'
    1. 行間と半行間

10.1 「包含ブロック」の定義(Definition of "containing block")

要素が生成するボックスの位置及び大きさは、その要素の包含ブロック(containing block)と呼ばれる矩形を参照して計算することがある。 包含ブロックを以下の様に定義する:

  1. ルート要素の包含ブロック(これを初期包含ブロックと呼ぶ)はUAが定める。
  2. ルートではなく且つ絶対配置でもない要素の場合、最も近い祖先ブロック要素の内容辺が包含ブロックになる。
  3. 固定配置(position: fixed)の要素の場合、閲覧領域が包含ブロックになる。
  4. 絶対配置(position: absolute)の要素の場合、'position'の値が'static'以外である最も近い祖先要素が包含ブロックを設定する。 該当する祖先要素の種類によって以下の様な場合がある:
    1. 該当する祖先要素がブロック要素である場合、そのパディング辺が包含ブロックになる。
    2. 該当する祖先要素がインライン要素である場合、その祖先要素の'direction'の値によって包含ブロックが異なってくる:
      1. 'direction'の値が'ltr'である場合、該当する祖先が最初に生成するボックスの内容上辺及び内容左辺が包含ブロックの上辺及び左辺になり、最後に生成するボックスの内容下辺及び内容右辺が包含ブロックの下辺及び右辺になる。
      2. 'direction'の値が'rtl'である場合、該当する祖先が最初に生成するボックスの内容上辺及び内容右辺が包含ブロックの上辺及び右辺になり、最後に生成するボックスの内容下辺及び内容左辺が包含ブロックの下辺及び左辺になる。
    'position'の値が'static'以外である最も近い祖先要素が存在しない場合、ルート要素の内容辺が包含ブロックになる。

配置体系の指定が無い状態で、以下の文書の包含ブロックは:

<HTML>
   <HEAD>
      <TITLE>Illustration of containing blocks</TITLE>
   </HEAD>
   <BODY id="body">
      <DIV id="div1">
      <P id="p1">This is text in the first paragraph...</P>
      <P id="p2">This is text <EM id="em1"> in the 
      <STRONG id="strong1">second</STRONG> paragraph.</EM></P>
      </DIV>
   </BODY>
</HTML>

次の様になる:

ボックスを生成する要素包含ブロックを設定する要素
bodyinitial C.B
div1body
p1div1
p2div1
em1p2
strong1p2

もしdiv1要素を次の様に配置したとすると:

   #div1 { position: absolute; left: 50px; top: 50px }

その包含ブロックはもはやbody要素が設定するものではなく、初期包含ブロックだということになる(何故なら祖先に位置指定されたボックスが存在しない)。

更にem1を次の様に配置したとすると:

   #div1 { position: absolute; left: 50px; top: 50px }
   #em1  { position: absolute; left: 100px; top: 100px }

前出の包含ブロックの表はこうなる:

ボックスを生成する要素包含ブロックを設定する要素
bodyinitial C.B.
div1initial C.B.
p1div1
p2div1
em1div1
strong1em1

em1要素を位置指定したので、その包含ブロックは位置指定された最も近い祖先ボックス(すなわちdiv1要素が生成するボックス)になっている。

10.2 内容領域の幅(Content width: the 'width' property)

'width'
Value:  <length> | <percentage> | auto | inherit
Initial:  auto
Applies to:  all elements but non-replaced inline elements, table rows, and row groups
Inherited:  no
Percentages:  refer to width of containing block
Media:  visual

このプロパティは、ブロック要素と置換要素内容領域の幅を指定する。

このプロパティは、非置換インライン要素には適用できない。 なぜなら、非置換インライン要素のボックス幅は、(子供要素が相対位置指定される前の)表示済み内容の幅と同じになるからである。 インラインボックスは行ボックスの中に流し込まれるということを思い出して欲しい。 行ボックスは原則として包含ブロックと同じ幅になるが、浮動体のせいで幅が短くなる場合もあるのだ。

置換要素のボックス幅はその要素に内在している。 しかし、置換要素の'width'プロパティが'auto'以外の値を取る時、UAはその幅を伸縮させてもよい。

各値は以下の様な意味を持つ:

<length>
幅を定数値で指定。
<percentage>
包含ブロックの幅に対する割合を指定。
auto
この値の効果は、関連プロパティの値により異なる。 以下の章を参照のこと。

負の値は不正である。

たとえば、次の規則は段落の内容幅を100pxに固定している:

P { width: 100px }

10.3 内容領域の幅と水平方向のマージンを計算する(Computing widths and margins)

'width''margin-left''margin-right''left''right'などの算出値は、その要素が生成するボックスの種類と、お互いの値に依存する。 基本的には、'auto'を適切な値に置き換えて算出値と指定値が同じになるようにするのだが、それだけではない。 要素の種類によって以下の様に分類する必要がある:

  1. 非置換インライン要素
  2. 置換インライン要素
  3. 通常フローにある非置換ブロック要素
  4. 通常フローにある置換ブロック要素
  5. 非置換浮動要素
  6. 置換浮動要素
  7. 絶対配置される非置換要素
  8. 絶対配置される置換要素

1から6は相対配置の場合も含む。

10.3.1 非置換インライン要素の場合(Inline, non-replaced elements)

'width'プロパティは効果を持たない。 'left''right''margin-left''margin-right'の指定値が'auto'ならば、その算出値は'0'になる。

10.3.2 置換インライン要素の場合(Inline, replaced elements)

'left''right''margin-left''margin-right'の指定値が'auto'ならば、その算出値は'0'になる。 'width'の指定値が'auto'ならば、その算出値は内在寸法と同じになる。

10.3.3 通常フローにある非置換ブロック要素の場合(Block-level, non-replaced elements in normal flow)

'left''right'の指定値が'auto'ならば、その算出値は'0'になる。 その他のプロパティについては、以下の等式が常に成立する必要がある:

'margin-left' + 'border-left-width' + 'padding-left' + 'width' + 'padding-right' + 'border-right-width' + 'margin-right' = 包含ブロックの幅 (ボーダーの種類が'none'である場合、ボーダーの幅は0になる)

上に挙げたすべてのプロパティが、指定値として'auto'以外の値を取る時、それらの指定値は「制限しすぎ」であると言う。 そして、それらのプロパティのうち1つは、指定値とは異なる算出値を取る必要が生じる。 'direction'の値が'ltr'なら、'margin-right'の指定値が無視され、上の等式を満たすような算出値が与えられる。 'direction'の値が'rtl'なら、'margin-left'が同様の処理を受ける。

上に挙げたプロパティの指定値のうち、1つだけが'auto'ならば、その算出値は上の等式から導かれる。

'width'の指定値が'auto'ならば、それ以外の'auto'は算出値が'0'になる。 そして、'width'の算出値は上の等式から導かれる。

'margin-left''margin-right'の指定値が両方とも'auto'ならば、両者の算出値は等しくなる。

10.3.4 通常フローにある置換ブロック要素の場合(Block-level, replaced elements in normal flow)

'left''right'の指定値が'auto'ならば、その算出値は'0'になる。 'width'の指定値が'auto'ならば、その算出値は内在寸法と同じになる。 どちらか片側でもマージンの指定値が'auto'ならば、その算出値は上の等式から導かれる。 更に、両側のマージンの指定値が'auto'ならば、両者の算出値は等しくなる。

10.3.5 非置換浮動要素の場合(Floating, non-replaced elements)

'left''right''width''margin-left''margin-right'の指定値が'auto'ならば、その算出値は'0'になる。

10.3.6 置換浮動要素の場合(Floating, replaced elements)

'left''right''margin-left''margin-right'の指定値が'auto'ならば、その算出値は'0'になる。 'width'の指定値が'auto'ならば、その算出値は内在寸法と同じになる。

10.3.7 絶対配置される非置換要素の場合(Absolutely positioned, non-replaced elements)

各プロパティの算出値は以下の等式に従う:

'left' + 'margin-left' + 'border-left-width' + 'padding-left' + 'width' + 'padding-right' + 'border-right-width' + 'margin-right' + 'right' = 包含ブロックの幅 (ボーダーの種類が'none'である場合、ボーダーの幅は0になる)

この等式が解けるように、以下の過程を順に実行する:

  1. 'left'の指定値が'auto'であり、かつ'direction'の値が'ltr'である場合。 まず、当該要素の'position'の値を'static'と仮定した時に、その要素が最初に生成するボックスを仮定ボックスと呼ぶことにする。 その仮定ボックスのマージン左辺から、包含ブロック左辺までの距離を'left'の算出値とする(ただこの場合、UAは実際に計算するより位置を推測する方が速いだろう)。 仮定ボックスが包含ブロックより左に位置する場合、その算出値は負の値になる。
  2. 'right'の指定値が'auto'であり、かつ'direction'の値が'rtl'である場合。 上と同じ仮定ボックスのマージン右辺から、包含ブロック右辺までの距離を'right'の算出値とする。 仮定ボックスが包含ブロックより左に位置する場合、その算出値は正の値になる。
  3. 'width'の指定値が'auto'であり、なおかつこの時点で'left'あるいは'right'の値が'auto'のまま残っていれば、その('left'あるいは'right'の)算出値を'0'とする。
  4. この時点でまだ'left''right''width'いずれかの値が'auto'のままであり、なおかつ'margin-left'あるいは'margin-right'の指定値が'auto'であれば、そのマージンの算出値を'0'とする。
  5. この時点でまだ'margin-left''margin-right'の値が両方とも'auto'のままなら、両側のマージンが等しくなるように上の等式を解く。
  6. この時点でまだ'auto'という値が1つだけ残っていれば、そのプロパティについて上の等式を解く。
  7. 値が「制限しすぎ」の状態(上の等式に挙げたプロパティがすべて'auto'以外の指定値を取る状態)ならば、'left''direction'の値が'rtl'である場合)あるいは'right''direction'の値が'ltr'である場合)どちらかの指定値を無視する。 そして、その無視したプロパティについて上の等式を解く。

10.3.8 絶対配置される置換要素の場合(Absolutely positioned, replaced elements)

これは1つ前の場合と似ている。 違っているのは対象の要素に内在寸法が存在する点である。 この相違点に基づいて、前の場合と同じ等式について以下の過程を実行する:

  1. 'width'の指定値が'auto'なら、その算出値は内在寸法と同じにする。
  2. 'left'の指定値が'auto'であり、かつ'direction'の値が'ltr'である場合。 仮定ボックスのマージン左辺から、包含ブロック左辺までの距離を'left'の算出値とする。 仮定ボックスが包含ブロックより左に位置する場合、その算出値は負の値になる。
  3. 'right'の指定値が'auto'であり、かつ'direction'の値が'rtl'である場合。 上と同じ仮定ボックスのマージン右辺から、包含ブロック右辺までの距離を'right'の算出値とする。 仮定ボックスが包含ブロックより左に位置する場合、その算出値は正の値になる。
  4. この時点でまだ'left'あるいは'right'の値が'auto'のままであり、なおかつ'margin-left'あるいは'margin-right'の指定値が'auto'であれば、そのマージンの算出値を'0'とする。
  5. この時点でまだ'margin-left''margin-right'の値が両方とも'auto'のままなら、両側のマージンが等しくなるように上の等式を解く。
  6. この時点でまだ'auto'という値が1つだけ残っていれば、そのプロパティについて上の等式を解く。
  7. 値が「制限しすぎ」の状態(上の等式に挙げたプロパティがすべて'auto'以外の指定値を取る状態)ならば、'left''direction'の値が'rtl'である場合)あるいは'right''direction'の値が'ltr'である場合)どちらかの指定値を無視する。 そして、その無視したプロパティについて上の等式を解く。

10.4 幅の最大値と最小値(Minimum and maximum widths: 'min-width' and 'max-width')

'min-width'
Value:  <length> | <percentage> | inherit
Initial:  UA dependent
Applies to:  all elements except non-replaced inline elements and table elements
Inherited:  no
Percentages:  refer to width of containing block
Media:  visual
'max-width'
Value:  <length> | <percentage> | none | inherit
Initial:  none
Applies to:  all elements except non-replaced inline elements and table elements
Inherited:  no
Percentages:  refer to width of containing block
Media:  visual

これらのプロパティを用いると、ボックスの幅を特定の範囲内に制限できる。 各値は以下の様な意味を持つ:

<length>
幅の算出値の最大値及び最小値を、定数で指定する。
<percentage>
包含ブロックの幅に対する割合を指定する。
none
ボックスの幅を制限しない。 ('max-width'にのみ使用可能)

以下のアルゴリズムは、これら2つのプロパティが'width'算出値に与える影響を示している:

  1. 10.3. 内容領域の幅と水平方向のマージンを計算するの規則に従って'width'の値を求める('min-width''max-width'の値は用いない)。
  2. 'min-width'の算出値が'max-width'の算出値よりも大きい場合、'max-width'の値を'min-width'と同じ値に設定しなおす。
  3. 'width'の算出値が'max-width'の算出値より大きい場合、上の計算を再度実行する。 ただし今回は、'width'の指定値として'max-width'の値を用いる。
  4. 'width'の算出値が'min-width'の算出値より小さい場合、上の計算を再度実行する。 ただし今回は、'width'の指定値として'min-width'の値を用いる。

UAは、'min-width'プロパティが取り得る負でない最小値をあらかじめ定めておいてもよい。 また、その最小値は要素によって、あるいは他のプロパティの値によって変化してもよい。 'min-width'の指定値がその最小値を下回る場合、UAはその最小値を算出値として用いることができる。

【訳注: ここでいう「最小値」は、'width'が取れる最小値のことではなく、'min-width'自体が取れる最小値のことです。】

10.5 内容領域の高さ(Content height: the 'height' property)

'height'
Value:  <length> | <percentage> | auto | inherit
Initial:  auto
Applies to:  all elements but non-replaced inline elements, table columns, and column groups
Inherited:  no
Percentages:  see prose
Media:  visual

このプロパティは、ブロック要素と置換要素が生成するボックスの内容領域の高さを指定する。

このプロパティは、非置換インライン要素には効果を持たない。 非置換インライン要素の高さは'line-height'プロパティによって決まる。

各値は以下の様な意味を持つ:

<length>
高さを定数で指定する。
<percentage>
包含ブロックの高さに対する割合を指定する。 包含ブロックの高さが明示されておらず、内容領域の高さに依存していれば、'auto'として解釈する。
auto
この値の効果は、関連プロパティの値により異なる。 以下の章を参照のこと。

負の値は不正である。

たとえば、次の規則は段落の高さを100pxに固定している:

P { height: 100px }

100px以上の高さを持つ段落はボックスからはみ出し、その扱いは'overflow'プロパティに従うことになる。

10.6 内容領域の高さと垂直方向のマージンを計算する(Computing heights and margins)

'top''margin-top''height''margin-bottom''bottom'の値を計算するには、要素の種類によって分類する必要がある:

  1. 非置換インライン要素
  2. 置換インライン要素
  3. 通常フローにある非置換ブロック要素
  4. 通常フローにある置換ブロック要素
  5. 非置換浮動要素
  6. 置換浮動要素
  7. 絶対配置される非置換要素
  8. 絶対配置される置換要素

1から6は相対配置の場合も含む

10.6.1 非置換インライン要素の場合(Inline, non-replaced elements)

'top''bottom''margin-top''margin-bottom'の指定値が'auto'ならば、その算出値は'0'になる。 'height'プロパティは効果を持たないが、ボックスの高さは'line-height'プロパティによって決まる。

10.6.2 置換インライン要素、通常フローにある置換ブロック要素、置換浮動要素の場合(Inline, replaced elements block-level, replaced elements in normal flow, and floating, replaced elements)

'top''bottom''margin-top''margin-bottom'の指定値が'auto'ならば、その算出値は'0'になる。 'height'の指定値が'auto'ならば、その算出値は内在寸法によって与えられる。

10.6.3 通常フローにある非置換ブロック要素、非置換浮動要素の場合(Block-level, non-replaced elements in normal flow, and floating, non-replaced elements)

'top''bottom''margin-top''margin-bottom'の指定値が'auto'ならば、その算出値は'0'になる。 'height'の指定値が'auto'ならば、算出値はその要素が子供ブロック要素を持つかどうかによって異なる。 その要素がインラインの子供要素のみを持つ場合、最上段にある行ボックスの上辺から、最下段にある行ボックスの下辺までの距離が、'height'の算出値になる。 その要素がブロックの子供要素を持つ場合、最上段にあるブロックボックスのマージン上辺から、最下段にあるブロックボックスのマージン下辺までの距離が、'height'の算出値になる。 この場合分けでは、通常フローにある子供要素のみを考える(つまり、浮動ボックスや絶対配置のボックスは無視して、相対配置のボックスは位置指定されていない状態で考える)。 また、匿名ボックスも子供ボックスの1つとして考えるということに注意すること。

10.6.4 絶対配置される非置換要素の場合(Absolutely positioned, non-replaced elements)

各プロパティの算出値は以下の等式に従う:

'top' + 'margin-top' + 'border-top-width' + 'padding-top' + 'height' + 'padding-bottom' + 'border-bottom-width' + 'margin-bottom' + 'bottom' = 包含ブロックの高さ (ボーダーの種類が'none'である場合、ボーダーの幅は0になる)

この等式が解けるように、以下の過程を順に実行する:

  1. 'top'の指定値が'auto'なら、仮定ボックスのマージン上辺から、包含ブロック上辺までの距離を'top'の算出値とする(ただこの場合、UAは実際に計算するより位置を推測する方が速いだろう)。 仮定ボックスが包含ブロックより上にあれば、その算出値は負の値になる。
  2. 'height''bottom'の指定値が両方とも'auto'なら、'bottom'の算出値を'0'とする。
  3. この時点でまだ'bottom'あるいは'height'の値が'auto'のままであり、なおかつ'margin-top'あるいは'margin-bottom'の指定値が'auto'であれば、そのマージンの算出値を'0'とする。
  4. この時点でまだ'margin-top''margin-bottom'の値が両方とも'auto'のままなら、上下のマージンが等しくなるように上の等式を解く。
  5. この時点でまだ'auto'という値が1つだけ残っていれば、そのプロパティについて上の等式を解く。
  6. 値が「制限しすぎ」の状態(上の等式に挙げたプロパティがすべて'auto'以外の指定値を取る状態)であれば、'bottom'の指定値を無視する。 そして、その無視したプロパティについて上の等式を解く。

10.6.5 絶対配置される置換要素の場合(Absolutely positioned, replaced elements)

これは1つ前の場合と似ている。 違っているのは対象の要素に内在寸法が存在する点である。 この相違点に基づいて、前の場合と同じ等式について以下の過程を実行する:

  1. 'height'の指定値が'auto'なら、その算出値は内在寸法と同じになる。
  2. 'top'の指定値が'auto'なら、仮定ボックスのマージン上辺から、包含ブロック上辺までの距離を'top'の算出値とする。 仮定ボックスが包含ブロックより上にあれば、その算出値は負の値になる。
  3. 'bottom'の指定値が'auto'であり、なおかつ'margin-top'あるいは'margin-bottom'の指定値が'auto'であれば、そのマージンの算出値を'0'とする。
  4. この時点でまだ'margin-top''margin-bottom'の値が両方とも'auto'のままなら、上下のマージンが等しくなるように上の等式を解く。
  5. この時点でまだ'auto'という値が1つだけ残っていれば、そのプロパティについて上の等式を解く。
  6. 値が「制限しすぎ」の状態(上の等式に挙げたプロパティがすべて'auto'以外の指定値を取る状態)であれば、'bottom'の指定値を無視する。 そして、その無視したプロパティについて上の等式を解く。

10.7 高さの最大値と最小値(Minimum and maximum heights: 'min-height' and 'max-height')

要素の高さをある範囲内に制限できるというのは時として便利である。 次の2つのプロパティがその機能を提供する:

'min-height'
Value:  <length> | <percentage> | inherit
Initial:  0
Applies to:  all elements except non-replaced inline elements and table elements
Inherited:  no
Percentages:  refer to height of containing block
Media:  visual
'max-height'
Value: <length> | <percentage> | none | inherit
Initial: none
Applies to: all elements except non-replaced inline elements and table elements
Inherited: no
Percentages: refer to height of containing block
Media: visual

これらのプロパティを用いると、ボックスの高さをある範囲内に制限できる。 各値は以下の様な意味を持つ:

<length>
高さの算出値の最大値と最小値を、定数で指定する。
<percentage>
包含ブロックの高さに対する割合を指定する。 包含ブロックの高さが明示されていない(つまり内容量に依存している)場合は、'auto'として解釈する。
none
ボックスの高さを制限しない。 ('max-height'にのみ使用可能)

以下のアルゴリズムは、これら2つのプロパティが'height'算出値に与える影響を示している:

  1. 10.6. 内容領域の高さと垂直方向のマージンを計算するの規則に従って'height'の値を求める('min-height''max-height'の値は用いない)。
  2. 'min-height'の算出値が'max-height'の算出値より大きい場合、'max-height'の値を'min-height'と同じ値に設定しなおす。
  3. 'height'の算出値が'max-height'の算出値より大きい場合、上の計算を再度実行する。 ただし今回は、'height'の指定値として'max-height'の値を用いる。
  4. 'height'の算出値が'min-height'の算出値より小さい場合、上の計算を再度実行する。 ただし今回は、'height'の指定値として'min-height'の値を用いる。

10.8 行の高さを計算する(Line height calculations: the 'line-height' and 'vertical-align' properties)

[9.4.2 インラインの整形コンテキスト]に示した通り、UAは縦に積み重ねた行ボックスの中にインラインボックスを流し込む。 その行ボックスの高さは次の様にして決める:

  1. 行ボックス内にある各インラインボックスの高さを計算する。 ([10.6 内容領域の高さと垂直方向のマージンを計算する]及び'line-height'プロパティを参照のこと)
  2. インラインボックスの垂直方向の位置を、'vertical-align'プロパティに従って揃える。
  3. 最上部にあるボックスの上辺から、最下部にあるボックスの下辺までの距離が行ボックスの高さになる。

内容を持たないインライン要素でもインラインボックスを生成するし、これらのボックスもマージン、ボーダー、パディングや行の高さを有している。 したがって、空要素も通常の要素と同様に上の計算へ影響を与える。

行ボックス内にあるすべてのボックスが下辺揃えになっていれば、行ボックスの高さは最も高いインラインボックスの高さと同じになる。 しかし、ボックスがベースライン揃えになっている場合は、行ボックスの上辺と下辺が、最も高いインラインボックスの上辺と下辺に揃うとは限らない。

10.8.1 行間と半行間(Leading and half-leading)

インラインボックスの高さがフォントサイズと同じになるとは限らない(たとえば'line-height'の値が'1em'より大きい場合など)ので、表示されたグリフの上下にスペースを設ける必要が出てくる。 'line-height'の算出値とフォントサイズの差を行間(leading)と呼ぶ。 また、行間の半分を半行間(half-leading)と呼ぶ。

UAは、インラインボックス内のグリフを縦の中央揃えにし、上下に半行間分のスペースを挿入する。 たとえば、フォントサイズが'12pt'で'line-height'の値が'14pt'だとすると、2pt分のスペースが上下に1ptずつ挿入されることになる。 (空要素の場合も、無限に小さい文字があると考えて同様に処理する)

'line-height'の値が文字サイズより小さいと、最終的なインラインボックスの高さは文字サイズより小さくなり、グリフの表示はボックスの外側へはみ出すことになる。 更に、そのボックスが行ボックスの上辺か下辺に接していると、グリフの表示は隣の行ボックスへ侵入することになる。

非置換インラインボックスの高さを計算するのに、マージン、ボーダー、パディングなどの値は使わないが、それらの領域はやはりインラインボックスの周囲に表示される。 したがって、行ボックスの高さが、内部にあるインラインボックスの外辺よりも短い場合、パディングやボーダーの背景(色)は、隣接する行ボックスへはみ出してしまう。 しかしこの場合、UAは行ボックス外部のパディングやボーダーを切り落としても良い(つまり表示しなくても良い)。

'line-height'
Value:  normal | <number> | <length> | <percentage> | inherit
Initial:  normal
Applies to:  all elements
Inherited:  yes
Percentages:  refer to the font size of the element itself
Media:  visual

このプロパティをインライン要素から成るブロック要素に設定すると、各インラインボックスの高さの最小値を指定できる。

このプロパティをインライン要素に設定すると、その要素が生成するボックスの正確な高さを指定できる。 ただし置換インライン要素の場合は例外で、ボックスの高さは'height'プロパティで与える。

各値は以下の様な意味を持つ:

normal
要素のフォントサイズに基づいてUAが適切な算出値を設定する。 その算出値は<number>として扱う。 この指定値に対しては1.0から1.2の算出値を推奨する。
<length>
ボックスの高さを長さで設定する。 負の値は不正である。
<number>
この数値を要素のフォントサイズと掛け合わせて算出値とする。 負の値は不正である。 継承には算出値ではなく指定値を用いる。
<percentage>
この割合を要素のフォントサイズと掛け合わせて算出値とする。 負の値は不正である。

次例の3つの規則はいずれも同じ結果になる:

DIV { line-height: 1.2; font-size: 10pt }     /* number */
DIV { line-height: 1.2em; font-size: 10pt }   /* length */
DIV { line-height: 120%; font-size: 10pt }    /* percentage */

要素が複数のフォントサイズで表示される場合、UAは最も大きいフォントサイズに合わせて'line-height'の値を決めるべきである。

一般に1つの段落内では、すべてのインラインボックスを通じて'line-height'の値は1種類しか出現しない。 したがって、連続する行のベースライン間距離は、正確に'line-height'の値と等しくなることが保証されるだろう。 このことは、表などのように、列ごとで異なるフォントを用いたテキストを揃えなければならない場合には、重要になってくる。

置換要素にも'font-size''line-height'の値があるということに注意せよ。 その値が直接ボックスの高さに関わらないにしても、'font-size'の値は「em」や「ex」を定義するのに用いられるし、'line-height'の値は'vertical-align'のパーセント値を計算するのに用いられるのである。

'vertical-align'
Value:  baseline | sub | super | top | text-top | middle | bottom | text-bottom | <percentage> | <length> | inherit
Initial:  baseline
Applies to:  inline-level and 'table-cell' elements
Inherited:  no
Percentages:  refer to the 'line-height' of the element itself
Media:  visual

このプロパティは、行ボックス内における、インラインボックスの垂直方向の位置を指定する。 以下の値は、親インライン要素、あるいは匿名インラインボックスを生成する親ブロック要素を参照できる場合にのみ意味を持つ。 そのような親を持たない要素に対しては何の効果も無い。

注。 このプロパティの値は、表関連要素と一緒に用いる場合にはやや意味が違ってくる。 詳細は[17.5.3 表の高さを計算する]を参照のこと。

baseline
インラインボックスと親ボックスのベースラインを揃える。 ボックスにベースラインが存在しない場合は、そのボックスの下辺を親ボックスのベースラインに揃える。
middle
インラインボックスの中心線を、親ボックスのベースラインから、x-heightの半分だけ上の線に揃える。
sub
インラインボックスのベースラインを、親ボックスの下付き文字として適切な位置まで下げる。 (フォントサイズには影響を与えない)
super
インラインボックスのベースラインを、親ボックスの上付き文字として適切な位置まで上げる。 (フォントサイズには影響を与えない)
text-top
インラインボックスの上辺を、親要素のフォント上辺に揃える。
text-bottom
インラインボックスの下辺を、親要素のフォント下辺に揃える。
<percentage>
このパーセント値を'line-height'の値に掛け合わせた距離だけ、ボックスを上に上げる(正の値)あるいは下に下げる(負の値)。 '0%'は'baseline'と同じ意味になる。
<length>
指定した長さ分ボックスを上に上げる(正の値)あるいは下に下げる(負の値)。 '0cm'などは'baseline'と同じ意味になる。

以下の値は、そのボックスが含まれている行ボックスを参照する:

top
ボックスの上辺を、行ボックスの上辺に揃える。
bottom
ボックスの下辺を、行ボックスの下辺に揃える。


Last modified February 4, 1999.
Trnaslated by Kazuteru OKAHASHI.
mailto:okahashi@nets.ne.jp