メインコンテンツへスキップ

要素の内部表示種別


1.要素の内部表示種別

置換要素を除いた
ボックスが生成する
フォーマットコンテキストの
種類を
CSSのdisplayプロパティは、
示します。

CSSの displayプロパティは、置換要素(replaced elements)を除いたボックス(箱)が生成するフォーマットコンテキストの種類を定義し、子孫ボックスの配置方法を示します。
置換要素は、内容(コンテンツ)が CSSフォーマットモデルの範囲外の要素です。

ブラウザの互換性が不十分ですが、CSSの Level 3 仕様書では displayプロパティに2つの値を指定する方法を提示していて、2つ目の値がこの内部表示種別を示すとしています。

〇〇コンテナボックス 確立するフォーマットモデル
インラインボックス なし
ブロックコンテナボックス ブロックフォーマットコンテキスト
インラインフォーマットコンテキスト
テーブルラッパーボックス ブロックフォーマットコンテキスト
テーブルグリッドボックス テーブルフォーマットコンテキスト
ルビコンテナボックス ルビフォーマットコンテキスト
フレックスコンテナボックス フレックスフォーマットコンテキスト

2.インラインボックス

インラインボックスは、
内部表示種別がフローである、
置き換えられていない
インラインレベルボックスの
事です。

CSSの displayプロパティの値が inline であり非置換の内容は、インラインボックスを生成します。
HTMLのカテゴリで書くと、メタデータコンテンツではないフレージングコンテンツであるruby要素以外の要素の displayプロパティの既定値が inlineであり、エンベデッドコンテンツが置換要素なので、それでない要素だとインラインボックスを生成します。 一部の要素で、属性の値によっては inline-block となる場合もあるので、個別に確認が必要ですが、概ねこうです。

インラインボックス (Inline boxes.)とは、内部表示種別がフローである、置き換えられていないインラインレベルボックスの事です。インラインボックスの内容(コンテンツ)は、インラインボックス自体と同じインラインフォーマットコンテキストに参加します。

注意点というかポイントというか、インラインコンテナという様な改まったコンテナを生成する訳ではなく、その内容は祖先と同じフォーマットコンテキストに参加するという事です。そこで、子孫のボックスまで、どのフォーマットコンテキストに参加するボックスであるかが関わってくるという訳です。詳細は、外部表示種別で扱いたいと思います。基本的な考えとしては、インラインボックスの内容には、インラインレベルボックスしか配置できず、要素の配置の規則もその様になっています。ブロックレベルのインラインコンテナという様なボックスはありません。インラインフォーマットインラインレベルボックスがある事でそれを含むコンテナが確立します。

1つだけ 1つめ 2つめ 参加
inline inline flow インライン
コンテナボックスインラインフォーマット
コンテキスト
inline
インラインボックス
ブロックコンテナボックスインラインフォーマット
コンテキスト
ルート
インラインボックス
インライン
レベルボックス

インラインレベルボックスのみを含むブロックコンテナボックス。

ブロックコンテナボックス
ブロック
レベルボックス
匿名の
ブロックボックス
インライン
レベルボックス

インラインレベルボックスとブロックレベルボックスの混在のブロックコンテナボックス。ブロックボックスとは、ブロックレベルのブロックコンテナであるボックスです。


3.ブロックコンテナボックス

ブロックコンテナボックスは、
ブロックフォーマットコンテキストを
確立, 継承し、必要に応じて
インラインフォーマットコンテキストを
確立します。

CSSの displayプロパティの値が block, list-item, inline-block, table-cell は、ブロックコンテナボックスを生成します。
HTMLのカテゴリで書くと、フレージングコンテンツではないフローコンテンツであるtable要素以外の要素の displayプロパティの既定値が block であり、th要素, td要素table-cell であり、li要素, summary要素list-item であり、フレージングコンテンツである要素で属性が特定の値の時だけ inline-block であります。

ブロックコンテナボックスを大雑把に言うと、ブロックフォーマットコンテキストを確立するコンテナです。
特にブロックレベルブロックコンテナであるボックスを、ブロックボックスと言います。

ブロックコンテナボックスは、インラインレベルボックスのみが含まれるか、ブロックレベルボックスのみが含まれます。この制約を確実にする為に、匿名ブロックボックスを生成する事があります。

インラインレベルのコンテンツのみを含むブロックコンテナボックスは、新しいインラインフォーマットコンテキストを確立します。次に、要素は、すべてのインラインコンテンツをラップするルートインラインボックスも生成します。

親フォーマットコンテキストがブロックフォーマットコンテキストでない場合、ブロックコンテナボックスは新しいインラインフォーマットコンテキストを確立します。それ以外の場合は、ブロックフォーマットコンテキスト自体に参加するときに、そのコンテンツの新しいブロックフォーマットコンテキストを確立するか、他のプロパティの制約によって決定されるように、参加するコンテキストを継続します。

1つだけ 1つめ 2つめ 参加
block block flow ブロック
list-item list-item - ブロック
inline-block inline flow-root インライン
table-cell table-cell - テーブル
コンテナボックスブロックフォーマット
コンテキスト
block
ブロックコンテナボックス
コンテナボックスブロックフォーマット
コンテキスト
list-item
ブロックコンテナボックス
ブロックコンテナボックス
コンテナボックスインラインフォーマット
コンテキスト
inline-block
ブロックコンテナボックス
コンテナボックステーブルフォーマット
コンテキスト
table-cell
ブロックコンテナボックス
ブロックコンテナボックスインライン
フォーマットコンテキスト
ルート
インラインボックス
インライン
レベルボックス

インラインレベルボックスのみを含むブロックコンテナボックス

コンテナボックスインライン
フォーマットコンテキスト
ブロックコンテナボックスブロック
フォーマットコンテキスト

親フォーマットコンテキストがブロックフォーマットコンテキストでない場合、ブロックコンテナは新しいブロックフォーマットコンテキストを確立します。

コンテナボックスブロック
フォーマットコンテキスト
ブロックコンテナボックスブロック
フォーマットコンテキスト
継続

親フォーマットコンテキストがブロックフォーマットコンテキストである場合、ブロックコンテナは他のプロパティの制約によって決定されるように、参加するコンテキストを継続します。

ブロックコンテナボックス
ブロック
レベルボックス
匿名の
ブロックボックス
インライン
レベルボックス

インラインレベルボックスとブロックレベルボックスの混在のブロックコンテナボックス。ブロックボックスとは、ブロックレベルのブロックコンテナであるボックスです。

  1. <!DOCTYPE html>
  2. <html lang="ja">
  3. <head>
  4. <meta charset="utf-8">
  5. <title>サンプル</title>
  6. </head>
  7. <body>
  8. コンテンツ
  9. </body>
  10. </html>

html要素は、ブロックレベルブロックコンテナであるボックスを生成します。html要素はルート要素であり、それを含むブロックフォーマットコンテキストがない為、新しいブロックフォーマットコンテキストを確立します。html要素は、フォーマットコンテキストに参加しないhead要素と、ブロックレベルのbody要素だけを配置します。なのでここでは、インラインフォーマットコンテキストは確立されません。body要素は、包含ブロックがhtml要素のブロックボックスでありhtml要素が新しいブロックフォーマットコンテキストを確立している為、そのまま継続します。

html ブロック
フォーマット
コンテキスト
head 表示しない
body ブロック
ボックス
  1. <button>
  2. ボタン
  3. </button>

button要素は、インラインレベルブロックコンテナであるボックスを生成します。インラインレベルという事は、インラインフォーマットコンテキストに参加するという事で、包含ブロックがインラインフォーマットコンテキストを確立しています。(匿名のボックスを間接的に作る場合もあります。) なので、新しいブロックフォーマットコンテキストを確立します。ただしbutton要素の許可されている内容はフレージングコンテンツなので、ブロックレベルの要素が配置できる訳ではありません。CSSの displayプロパティで、ブロックレベルの指定をする事は出来ます。

インライン
フォーマット
コンテキスト
button ブロック
フォーマット
コンテキスト

4.テーブルラッパーボックス

テーブルラッパーボックスは、
テーブルグリッドボックスの
周囲に生成された
ブロックコンテナボックスです。

CSSの displayプロパティの値で table, inline-table は、テーブルグリッドボックスを含むテーブルラッパーボックスを生成します。

テーブルラッパーボックスは、テーブルグリッドボックスの周囲に生成されたブロックコンテナボックスです。所有する各テーブルキャプションが占めるスペースを考慮します。
テーブルグリッドボックスは、キャプションを除く、テーブル内部ボックスを含むブロックレベルのボックスです。テーブルフォーマットコンテキストを確立します。
レイアウト固有の表示タイプのボックスは、それぞれの仕様で定義されているように、互換性のない親に配置されると、その周りに匿名のラッパーボックスを生成します。

CSSの displayプロパティの値で table-caption (caption element) は、レイアウト固有の内部ボックスであるテーブルキャプションボックスを生成します。
CSSの displayプロパティの値で table-row-group (tbody element), table-header-group (thead element), table-footer-group (tfoot element), table-column-group (colgroup element) は、レイアウト固有の内部ボックスであるテーブルトラックグループボックスを生成します。
CSSの displayプロパティの値で table-row (tr element), table-column (col element) は、レイアウト固有の内部ボックスであるテーブルトラックボックスを生成します。
CSSの displayプロパティの値で table-cell (th element, td element) は、レイアウト固有の内部ボックスであるブロックコンテナボックスを生成します。

テーブルラッパーボックス
要素 1つだけ 1つめ 2つめ 参加
table table block table ブロック
- inline-table inline table インライン
テーブル内部ボックス
要素 1つだけ 1つめ 2つめ ボックス
caption table-caption - - テーブルキャプション
tbody table-row-group - - テーブルトラックグループ
thead table-header-group - - テーブルトラックグループ
tfoot table-footer-group - - テーブルトラックグループ
tr table-row - - テーブルトラック
td table-cell - - ブロックコンテナ
コンテナボックスブロックフォーマット
コンテキスト
table
テーブルラッパーボックス
コンテナボックスインラインフォーマット
コンテキスト
inline-table
テーブルラッパーボックス
テーブルラッパーボックスブロックフォーマット
コンテキスト
table-caption
テーブル
キャプション
ボックス
テーブルラッパーボックスブロックフォーマット
コンテキスト
テーブルグリッドボックステーブルフォーマット
コンテキスト
table-row-group
テーブルトラック
グループボックス
テーブルトラック
グループボックス
table-row
テーブルトラックボックス
テーブルトラック
ボックス
table-cell
ブロックコンテナボックス
匿名のテーブルボックス
匿名のテーブルトラック
グループボックス
匿名のテーブル
トラックボックス
テーブル
セルボックス
  1. <div style="display: block;">
  2. <div style="display: table-cell;">
  3. </div>
  4. </div>

レイアウト固有の表示タイプのボックスは、それぞれの仕様で定義されているように、互換性のない親に配置されると、その周りに匿名のラッパーボックスを生成します。


5.ルビコンテナボックス

ルビコンテナボックスは、
ルビフォーマットコンテキストを
確立します。

CSSの displayプロパティの値が ruby は、ルビコンテナボックスを生成します。ruby要素displayプロパティの既定値が ruby です。

CSSの displayプロパティの値が ruby-text は、ルビ注釈ボックスを生成します。rt要素displayプロパティの既定値が ruby-text です。rp要素displayプロパティの既定値は none です。

尚、ユーザーエージェントがこれらの要素に対応していなけけば、displayプロパティ自体の既定値の inline が採用されます。rp要素のレンダリングの提案は、ユーザーエージェントがこれらの要素に対応している場合と対応していない場合のレンダリングを想定して記述する為のものです。

要素 1つだけ 1つめ 2つめ ボックス
ruby ruby inline ruby ルビコンテナ
rt ruby-text - - ルビ注釈
rp none - - なし

6.フレックスコンテナボックス

フレックスコンテナボックスは、
フレックスフォーマットコンテキストを
確立します。

CSSの displayプロパティの値が flex は、フレックスコンテナボックスを生成します。HTMLの要素の displayプロパティの既定値が flex である要素はありません。