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

要素の外部表示種別


1.要素の外部表示種別

主要なボックス(箱)が
流れの設計に
どのように関与するかを
CSSのdisplayプロパティは、
示します。

CSSの displayプロパティは、主要なボックス(箱)が流れの設計にどのように関与するかを示します。「〇〇レベルボックス」

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

CSSの floatプロパティの値が none 以外の場合に、displayプロパティの計算値がdisplayプロパティに2つの値を指定する方法での、1つ目の値に block を指定するに当たる状態に変更されます。

〇〇レベルボックス 参加するフォーマットモデル
インラインレベルボックス インラインフォーマットコンテキスト
ブロックレベルボックス ブロックフォーマットコンテキスト
内部テーブルボックス 表(テーブル)モデル
(テーブルフォーマットコンテキスト)
ルビレベルボックス ルビモデル
(ルビフォーマットコンテキスト)
フレックスコンテナボックスの子ボックス フレックスフォーマットのコンテキスト
display: none ボックスやテキストの実行を生成しない

2.インラインレベルボックス

インラインレベルボックスは、
インラインフォーマット
コンテキストに
参加するボックスです。

CSSの displayプロパティの値で inline, inline-block, inline-table, inline-flex, inline-grid, rubyは、インラインフォーマットコンテキストに参加するボックスを生成します。このボックスをインラインレベルボックスと言います。その中で、非置換の内容であり内部表示種別flow である、つまりdisplayプロパティの値が inline であり内容が非置換のボックスをインラインボックスと言います。

この「参加する」は、包含ブロックボックスが匿名のボックスを生成するのにも関わります。(匿名を含む)ブロックコンテナに(匿名を含む)インラインレベルボックスだけが存在すると、そのブロックコンテナインラインフォーマットコンテキストを新たに確立します。

displayプロパティの初期値は inline です。displayプロパティに継承はないです。なので、要素で指定していない場合は、inline という事です。displayプロパティに2つの値を指定する方法での、1つ目の値に inline 2つ目の値に flow を指定するに当たります。

単一 外部表示 内部表示 マーカー コンテナ
inline inline flow - (インラインボックス)
inline-block inline flow-root - ブロック
inline-table inline table - テーブル
inline-flex inline flex - フレックス
inline-grid inline grid - グリッド
ruby inline ruby - ルビ
inline list-item inline flow list-item (インラインボックス)
コンテナボックスインラインフォーマットコンテキスト
ラインボックス
inline
inline-block
inline-table
inline-flex
inline-grid
ruby
コンテナボックスインラインフォーマットコンテキスト
ラインボックス
インライン
レベルボックス
inline
匿名のインライン
レベルボックス
テキスト

インラインレベルボックスと混在するテキストは、書式の定義を簡単にする為に匿名のインラインレベルボックスを生成します。ブロックコンテナにテキストのみ存在する場合も、匿名のインラインレベルボックスが生成されます。

コンテナボックスブロックフォーマットコンテキスト
ブロック
レベルボックス
匿名のブロックレベルボックスインラインフォーマットコンテキスト
ルート
インラインボックス
ラインボックス
インライン
レベルボックス
インライン
レベルボックス

ブロックレベルボックスと混在するインラインレベルボックスは、書式の定義を簡単にする為に連続するインラインレベルボックスをまとめて匿名のブロックレベルボックスを生成します。この匿名のブロックレベルボックスは、インラインレベルのコンテンツのみを含むコンテナなので、新しいインラインフォーマットコンテキストを確立します。次に、要素は、すべてのインラインコンテンツをラップするルートインラインボックスも生成します。

インラインレベルのコンテンツのみを含むブロックコンテナボックスは、新しいインラインフォーマットコンテキストを確立します。次に、要素は、すべてのインラインコンテンツをラップするルートインラインボックスも生成します。
尚、この処理を簡素にする為に、インラインレベルとブロックレベルが混在する場合は、そのインラインレベルのボックスを連続する纏まりで匿名のブロックボックスで囲みます。これにより、この匿名のブロックボックスの外はブロックレベルのみとなり、内はインラインレベルのみとなります。
他にも、インラインレベルのボックスがないブロックコンテナにテキストがある場合に、このテキストを覆う匿名のインラインボックスが生成されます。これにより、このテキストもなんらかの形でインラインフォーマットコンテキストに参加する事になります。

  1. <body>
  2. <span>さんぷる</span>さんぷる
  3. </body>

body要素は、ブロックコンテナであるボックスを生成します。span要素は、インラインレベルボックスを生成します。テキストは、匿名のインラインレベルボックスを生成します。この例では、ブロックコンテナボックスのコンテンツがインラインレベルのボックスのみなので、新しいインラインフォーマットコンテキストを確立します。

ブロックフォーマット
コンテキスト
body インラインフォーマット
コンテキスト
インライン
レベル
ボックス
匿名の
インライン
レベル
ボックス

3.ブロックレベルボックス

ブロックレベルボックスは、
ブロックフォーマット
コンテキストに
参加するボックスです。

CSSの displayプロパティの値で block, list-item, table, flex, gridは、ブロックフォーマットコンテキストに参加するボックスを生成します。このボックスをブロックレベルボックスと言います。ブロックレベルブロックコンテナであるボックスを、ブロックボックスと言います。

displayプロパティに2つの値を指定する方法での、1つ目の値に block を指定するに当たります。

単一 外部表示 内部表示 マーカー コンテナ
block block flow - ブロック
table block table - テーブル
flex block flex - フレックス
grid block grid - グリッド
block ruby block ruby - 匿名のブロック, ルビ
list-item block flow list-item ブロック (マーカー)
コンテナボックスブロックフォーマット
コンテキスト
block
table
flex
grid
list-item
コンテナボックスブロックフォーマットコンテキスト
ブロック
レベルボックス
匿名のブロックレベルボックスインラインフォーマットコンテキスト
インライン
レベルボックス
インライン
レベルボックス

ブロックレベルボックスと混在するインラインレベルボックスは、書式の定義を簡単にする為に連続するインラインレベルボックスをまとめて匿名のブロックレベルボックスを生成します。

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

  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-row-group, table-header-group, table-footer-group, table-row, table-cell, table-column-group, table-columnは、テーブルを構成する要素を表します。テーブルモデルでのレイアウトされる構成要素として参加するボックスを生成する」と言い換えると、「〇〇レベルボックス」の表現と比べ易いかと思います。

要素 display ボックス
table table ブロックレベルの
テーブルラッパー
caption table-caption テーブル
キャプション
tbody table-row-group 行グループ
(内部テーブル)
thead table-header-group 行グループ
(内部テーブル)
tfoot table-footer-group 行グループ
(内部テーブル)
tr table-row
(内部テーブル)
th/td table-cell ブロックコンテナ
(内部テーブル)
colgroup table-column-group
col table-column
コンテナボックステーブルフォーマットコンテキスト
table-row-group
table-header-group
table-footer-group
table-row
table-cell
table-column-group
table-column

※この図では参加を表しているだけで、配置は表現していません。


5.ルビレベルボックス

ルビレベル相当のボックスは、
ルビフォーマットコンテキストに
参加するボックスです。

CSSの displayプロパティの値で ruby-base, ruby-text, ruby-base-container, ruby-text-containerは、ルビフォーマットコンテキストに参加するボックスを生成します。

要素 display ボックス
ruby ruby ルビコンテナボックス
(インラインレベルボックス)
rb ruby-base ルビレベルボックス
(内部ルビ)
rt ruby-text ルビレベルボックス
(内部ルビ)
rbc ruby-base-container ルビレベルボックス
(内部ルビ)
rtc ruby-text-container ルビレベルボックス
(内部ルビ)
コンテナボックスルビフォーマットコンテキスト
ruby-base
ruby-text
ruby-base-container
ruby-text-container

※この図では参加を表しているだけで、配置は表現していません。


6.display: none

CSSの displayプロパティの値で none の時は、要素とその子孫は、ボックステキストの実行を生成しません。