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

ビジュアルフォーマットモデル


1.ビジュアルフォーマットモデル

ビジュアルフォーマットモデルは、
ユーザーエージェントが
ビジュアルメディアの
ドキュメントツリーを
処理する方法です。

ビジュアルフォーマットモデル (Visual formatting model.) とは、ユーザーエージェント(UA : User agent.) が視覚的媒体(visual media.: ビジュアルメディア) のドキュメントツリーを処理する方法です。視覚的媒体用整形書式と、とりあえず言い換えてみました。
HTMLの仕様と共に提示されている「処理する方法」についての記述(提案)方法は、主に CSSを用いて行われています。

ビジュアルフォーマットモデルでは、ドキュメントツリーの各要素は、ボックスモデル(箱の雛型)に従って0個以上のボックス(箱)を生成します。これらのボックスのレイアウトは、次の要素によって決まります。

  • ボックスの寸法(ボックスモデル)とタイプ(レンダリングの提案)。
  • 位置決めスキーム。(通常フロー, フロート, 絶対位置決め)
    通常フロー
    通常フローには、ブロックレベルボックスのブロックフォーマット, インラインレベルボックスのインラインフォーマット, およびブロックレベルボックスとインラインレベルボックスの相対位置決めが含まれます。

    通常フローボックスは、テーブル書式設定コンテキスト, ブロック書式設定コンテキスト, またはインライン書式設定コンテキストに属します。他の種類の書式設定コンテキストで、ルビ書式設定コンテキスト, フレックス書式設定コンテキストもあります。

    フロート
    フロートモデルでは、ボックスは最初に通常フローに従ってレイアウトされ、次にフローから取り出されて、可能な限り左または右に移動します。コンテンツはフロートの側面に沿って流れる場合があります。
    絶対位置決め
    絶対位置決めモデルでは、ボックスは通常フローから完全に削除され(後続の兄弟には影響しません)、包含ブロックに対する位置が割り当てられます。
  • ドキュメント ツリー内の要素間の関係。
  • 外部情報。(例:ビューポートのサイズ, 画像の固有寸法など)

要素がフロートされているか、絶対位置決めされているか、またはルート要素である場合、その要素はフロー外と呼ばれます。 要素がフロー外ではない場合、その要素はフロー内と呼ばれます。 要素 A のフローは、A と、最も近いフロー外祖先が A であるすべてのフロー内要素で構成されるセットです。

一般に、生成されたボックスは、子孫ボックスのブロック(纏まり)を含むものとして機能します。これはコンテナ(容器)といいます。ボックスは、その子孫の包含ブロック「確立」すると言います。「ボックスの包含ブロック」という句は、それが生成するものではなく、「ボックスが存在する包含ブロック」を意味します。

(ここでの説明は、左から右, 上から下に流れる横書きの日本語を前提にしています。)

フォーマットモデル 生成するボックス 参加するボックス
ブロックフォーマットコンテキスト ブロックコンテナボックス
(テーブルラッパーボックス)
ブロックレベルボックス
インラインフォーマットコンテキスト ブロックコンテナボックス インラインレベルボックス
テーブルモデル テーブルグリッドボックス 内部テーブルボックス
ルビモデル ルビコンテナボックス ルビレベルボックス
フレックスフォーマットコンテキスト フレックスコンテナボックス フレックスコンテナボックスの子ボックス

2.ブロックフォーマットコンテキスト

ブロックフォーマットの
コンテキストでは、
ボックスは、
含まれているブロックの
上部から始めて、
垂直方向に
次々に配置されます。

ブロックフォーマットコンテキスト(Block formatting context.) は、かたまり書式設定状況と読めると思います。

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

ブロックフォーマットのコンテキストでは、ボックスは、含まれているブロック(包含ブロック)の上部から始めて、垂直方向に次々に配置されます。
言い換えると、長方形用の整形の環境では、箱は、含まれている長方形の入れ物の上部から始めて、垂直方向に次々に配置されます。2 つの兄弟ボックス間の垂直距離は、margin(マージン)プロパティによって決定されます。ブロックフォーマットコンテキスト内の隣接するブロックレベルボックス間の垂直マージンは縮小されます。

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

ブロックフォーマットのコンテキストでは、各ボックスの左外端は包含ブロックの左端に接します。(右から左の書式設定の場合は、右端が接します) これは、フロートが存在する場合でも当てはまります。(ただし、ボックスの行ボックスはフロートによって縮小される場合があります) ただし、ボックスが新しいブロックフォーマットのコンテキストを確立する場合は除きます。(その場合、ボックス自体がフロートによって狭くなる場合があります)

フロート, 絶対位置指定の要素, ブロックボックスではないブロックコンテナー (インラインブロック, テーブルセル, テーブルキャプションなど), および 'overflow' が 'visible' 以外のブロックボックス (その値がビューポートに伝播されている場合を除く) は、そのコンテンツに対して新しいブロックフォーマットコンテキストを確立します。

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

  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 ブロック
フォーマット
コンテキスト

3.インラインフォーマットコンテキスト

インラインフォーマットの
コンテキストでは、
ボックスは、
含まれているブロックの
上部から始めて、
水平方向に
次々に配置されます。

インラインフォーマットコンテキスト(Inline formatting context.) は、行の内書式設定状況と読めると思います。

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

インラインフォーマットのコンテキストでは、ボックスは、含まれているブロック(包含ブロック)の上部から始めて、水平方向に次々に配置されます。これらのボックス間では、水平方向のマージン、境界線、およびパディングが尊重されます。ボックスは、さまざまな方法で垂直方向に揃えることができます。つまり、ボックスの下部または上部を揃えたり、ボックス内のテキストのベースラインを揃えたりできます。行を形成するボックスを含む長方形の領域は、行ボックスと呼ばれます。インラインフォーマットコンテキスト内にインラインレベルのコンテンツを保持する為に、必要に応じてラインボックスが作成されます。テキスト、保存された空白、ゼロ以外の余白、パディング、または境界線を含むインライン要素、およびその他の流入コンテンツ(画像、インラインブロック、インラインテーブルなど)を含まず、保存された改行で終わらないラインボックスは、高さゼロの行として扱う必要があります。ボックス内の要素の位置を決定する為のボックスであり、他の目的では存在しないものとして扱う必要があります。

行ボックスの幅は、包含ブロックとフロートの存在によって決まります。行ボックスの高さは、行の高さの計算に関するセクションで示されている規則によって決まります。
行ボックスは常に、その中に含まれるすべてのボックスを収容できる高さです。ただし、その中に含まれる最も高いボックスよりも高くなる場合があります (たとえば、ボックスがベースラインを揃えるように配置されている場合)。ボックス B の高さが、それを含む行ボックスの高さよりも低い場合、行ボックス内の B の垂直方向の配置は、「vertical-align」プロパティによって決定されます。複数のインライン レベル ボックスが 1 つの行ボックス内に水平方向に収まらない場合、それらは 2 つ以上の垂直方向に積み重ねられた行ボックスに分散されます。したがって、段落は行ボックスの垂直方向の積み重ねです。行ボックスは垂直方向に分離されることなく積み重ねられ (他の場所で指定されている場合を除く)、重なり合うことはありません。
一般に、行ボックスの左端は包含ブロックの左端に接し、右端は包含ブロックの右端に接します。ただし、フローティング ボックスは包含ブロックの端と行ボックスの端の間に来ることがあります。したがって、同じインライン書式設定コンテキスト内の行ボックスは一般に同じ幅 (包含ブロックの幅) を持ちますが、フロートによって使用可能な水平方向のスペースが削減されると、幅が変わることがあります。同じインライン書式設定コンテキスト内の行ボックスは一般に高さが変わります (たとえば、1 つの行に背の高い画像が含まれ、他の行にはテキストのみが含まれる場合があります)。
行のインライン レベル ボックスの合計幅が、それらを含む行ボックスの幅よりも小さい場合、行ボックス内でのそれらの水平方向の配置は、「text-align」プロパティによって決定されます。そのプロパティの値が「justify」の場合、ユーザー エージェントは、インライン ボックス内のスペースと単語も伸ばすことができます (ただし、インライン テーブル ボックスとインライン ブロック ボックスは伸ばしません)。

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

2つ目のボックスの途中で、
行を折り返した例

インライン ボックスが行ボックスの幅を超える場合、インライン ボックスは複数のボックスに分割され、これらのボックスは複数の行ボックスに分散されます。インライン ボックスを分割できない場合 (たとえば、インライン ボックスに 1 つの文字が含まれている場合、または言語固有の単語区切りルールによってインライン ボックス内での区切りが許可されていない場合、またはインライン ボックスが空白値 nowrap または pre の影響を受ける場合)、インライン ボックスは行ボックスをオーバーフローします。
インライン ボックスが分割されると、分割が発生した場所 (または複数の分割がある場合はどの分割でも) で、マージン、境界線、およびパディングは視覚的な効果を持ちません。
インライン ボックスは、双方向テキスト処理のため、同じ行ボックス内で複数のボックスに分割されることもあります。
行ボックスは、インライン フォーマット コンテキスト内でインライン レベルのコンテンツを保持するために必要に応じて作成されます。テキスト、保持された空白、ゼロ以外のマージン、パディング、または境界線を持つインライン要素、その他のインフロー コンテンツ (画像、インライン ブロック、インライン テーブルなど) が含まれず、保持された改行で終了しない行ボックスは、その中の要素の位置を決定する目的で高さゼロの行ボックスとして扱われ、他の目的では存在しないものとして扱われる必要があります。

インライン フォーマットコンテキストは、ブロックレベルボックスを含まないブロックコンテナーボックスによって確立されます。

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

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

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

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

4.表(テーブル)モデル

テーブルモデルでは、
テーブルは
オプションのキャプションと
任意の数のセル行で
構成されます。

表(テーブル)モデルでは、表はオプションのキャプションと任意の数のセル行で構成されます。作成者がドキュメント言語で明示的に列ではなく行を指定するため、表(テーブル)モデルは「行プライマリ」と呼ばれます。すべての行が指定されると、列が派生します。各行の最初のセルは最初の列に属し、2番目のセルは2番目の列に属します。行と列は構造的にグループ化でき、このグループ化はプレゼンテーションに反映されます。

セル
1A 1B 1C
2A 2B 2C
3A 3B 3C
一行 一行 一行
二行 二行 二行
三行 三行 三行
一列 二列 三列
一列 二列 三列
一列 二列 三列

セルは複数の行または列にまたがることがあります。したがって、各セルは長方形のボックスであり、幅と高さが1つ以上のグリッドセルです。この長方形の一番上の行は、セルの親によって指定された行にあります。長方形はできるだけ左に配置する必要がありますが、最初の列のセルの一部が他のセルボックス(つまり、前の行から始まる行にまたがるセル)と重ならないようにする必要があります。ソースドキュメントの前にある同じ行のすべてのセルの右側にある必要があります。この位置により、列にまたがるセルが前の行の行にまたがるセルとオーバーラップする場合、セルをオーバーラップするか、そのようなオーバーラップを回避するために後のセルを右にシフトする場合があります。

2B2列
1A 1B 1C
2A 2B 2C
3A 3B 3C

2B2行
1A 1B 1C
2A 2B 2C
3A 3B 3C

2B2行
1A 1B 1C
2A 2B 2C
3A 3B 3C

列は明示的に指定されるのではない点がポイントと思います。二列目だけをコピペなど出来ないし、二列目と三列目の入れ替えは個々のセルの順番の入れ替えで行わなければならず大変です。この事からも、事前の設計が大事という事です。

一列
一列
一列
二列
二列
二列
三列
三列
三列

列を纏まりとして重視するならば、列ごとをボックスとして捉え、そのボックスをインラインレベルのブロックコンテナとして扱うとか、フレックスフォーマットコンテキストを用いるとかも一考です。ただしこの場合は、作成者が行を意識して各セルの高さなどセル間の調整も明示的に意図して指定する必要があるので、表したいデータ次第ですが。

  1. <table>
  2. <caption>キャプション</caption>
  3. <tbody>
  4. <tr>
  5. <td>セル</td>
  6. </tr>
  7. </tbody>
  8. </table>

table要素は、テーブルグリッドボックスを含むブロックレベルテーブルラッパーボックスを生成します。この時、テーブルキャプションボックスの領域を考慮します。改めて言うと、table要素は CSSのdisplayプロパティの値で table が提案されていて、これはブロックレベルテーブルラッパーボックスを生成するという事です。テーブルラッパーボックスはブロックコンテナでもあり、ブロックフォーマットコンテキストを確立, 継承します。テーブルグリッドボックスは、テーブルフォーマットコンテキストを確立します。テーブルグリッドボックスを、テーブルボックスとも言います。

caption要素は、テーブルキャプションボックスを生成します。これは、テーブルボックスとテーブルラッパーボックスに関して特別な動作をするブロックボックスです。

ブロック
フォーマット
コンテキスト
 
テーブル
ラッパー
ボックス
テーブル
キャプション
ボックス
テーブル
グリッド
ボックス

tbody要素は、行グループボックスを生成します。これは、内部テーブルボックスです。そして、テーブルフォーマットコンテキストに参加します。

ブロック
フォーマット
コンテキスト
 
テーブル
グリッド
ボックス
テーブル
フォーマット
コンテキスト
内部
テーブル
ボックス

td要素は、ブロックコンテナでもある内部テーブルボックスを生成します。これは、ブロックフォーマットコンテキストを確立します。そして、テーブルフォーマットコンテキストに参加します。

テーブル
フォーマット
コンテキスト

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

5.ルビモデル

ルビモデルでは、
フレージングコンテンツを
マークできます。

ruby要素を使用すると、1つ以上のフレージングコンテンツの範囲をruby注釈でマークできます。
ruby要素は、インラインレベルのルビコンテナボックスを生成します。ただし、rubyコンテナは、注釈をホストする為に、インラインフォーマットコンテキストのセグメントの周りにさらに構造を構築するルビフォーマットコンテキストも確立します。

要素の内部表示タイプがルビで、外部表示タイプがインライン以外の場合、必要な外部表示タイプの主ボックスとインラインレベルのルビコンテナーの 2つのボックスが生成されます。 要素で指定されたすべてのプロパティは主ボックスに適用されます(継承可能な場合は、ルビコンテナーボックスに継承されます)。 これにより、内部のルビ構造を正しく維持しながら、要素をブロックとしてスタイル設定できます。

CSSモデルでは、ドキュメント言語にこれらの各コンポーネントに対応する要素が含まれている必要はありません。 構造の欠落部分は、表の正規化に使用されるものと同様の匿名ボックス生成ルールによって暗示されます。

  1. <ruby>
  2. <rbc>
  3. <rb>2024</rb>
  4. <rb>12</rb>
  5. <rb>15</rb>
  6. </rbc>
  7. <rtc>
  8. <rt>Year</rt>
  9. <rt>Month</rt>
  10. <rt>Day</rt>
  11. </rtc>
  12. <rtc>
  13. <rt rbspan="3">Sample Date</rt>
  14. </rtc>
  15. </ruby>
イメージ
Year Month Day
2024 12 15
Sample Date
インラインフォーマットコンテキスト
ルビコンテナボックス インラインフォーマットコンテキスト(継続)
ルビフォーマットコンテキスト(確立)
注釈レベルの
インラインフォーマットコンテキスト(確立)

ルビ注釈コンテナボックス
ルビ注釈
ボックス
Year
ルビ注釈
ボックス
Month
ルビ注釈
ボックス
Day
ルビベースコンテナボックス
ルビベース
ボックス
2024
ルビベース
ボックス
12
ルビベース
ボックス
15
ルビ注釈コンテナボックス
ルビ注釈ボックスSample Date
ルビコンテナボックス(ruby container box.)

displayプロパティが、ruby の時、要素ルビコンテナボックス生成します。

ruby要素displayプロパティの既定値が、rubyです。

ルビコンテナは非アトミックなインラインレベルボックスです。通常のインラインボックスと同様に、ルビコンテナは行をまたいで分割され、その包含ブロックは最も近いブロックコンテナの祖先です。インラインボックスのコンテンツがインラインボックス自体を含む同じインラインフォーマットコンテキストに参加するのと同様に、ルビコンテナとその基本レベルのコンテンツはルビコンテナ自体を含む同じインラインフォーマットコンテキストに参加します。

ただし、ルビコンテナは、注釈をホストするために、インラインフォーマットコンテキストのセグメントの周りにさらに構造を構築するルビフォーマットコンテキストも確立します。注: このフォーマットコンテキストは独立したフォーマットコンテキストではありません。ルビベース, ルビ注釈, ルビベースコンテナー, およびルビ注釈コンテナーは、内部ルビボックスです。内部テーブル要素と同様に、ルビレイアウトで特定の役割を持ち、ルビコンテナーのルビ書式設定コンテキストに参加します。ルビ書式設定コンテキストでの役割に加えて、ルビベースはルビコンテナーと同じベースレベルのインライン書式設定コンテキストに同時に参加しますが、ルビ注釈はルビコンテナーによって確立された別の注釈レベルのインライン書式設定コンテキストに参加します。

インラインボックスの内容と同様に、ルビコンテナー(およびそのすべての内部ルビボックス) の内容の包含ブロックは、ルビコンテナーの包含ブロックです。したがって、たとえばフロートは、ルビボックスタイプではなく、ルビコンテナーの包含ブロックによってトラップされます。

ルビベースボックス(ruby base box.)

displayプロパティが、ruby-base の時、要素ルビベースボックス生成します。

ルビベースボックスは、内部ルビボックスです。ルビレイアウトで特定の役割を持ち、ルビコンテナルビフォーマットコンテキストに参加します。ルビフォーマットコンテキストでの役割に加えて、ルビベースは、ルビコンテナと同じベースレベルのインラインフォーマットコンテキストに同時に参加します

rb要素displayプロパティの既定値が、ruby-baseです。ただ、HTML Living Standard ではこの要素は採用されていません。 構造の欠落部分は、匿名ボックス生成ルールによって暗示されます。この場合は、匿名のルビベースラップされます。

ルビ注釈ボックス(ruby annotation box.)

displayプロパティが、ruby-text の時、要素ルビ注釈ボックス生成します。

ルビ注釈ボックスは、内部ルビボックスです。ルビレイアウトで特定の役割を持ち、ルビコンテナルビフォーマットコンテキストに参加します。ルビフォーマットコンテキストでの役割に加えて、ルビ注釈は、ルビコンテナによって確立された別の注釈レベルのインラインフォーマットコンテキストに参加します。

rt要素displayプロパティの既定値が、ruby-textです。

ルビベースコンテナボックス(ruby base container box.)

displayプロパティが、ruby-base-container の時、要素ルビベースコンテナボックス生成します。

ルビベースコンテナボックスは、内部ルビボックスです。ルビレイアウトで特定の役割を持ち、ルビコンテナルビフォーマットコンテキストに参加します。

rbc要素displayプロパティの既定値が、ruby-base-containerです。ただ、HTML Living Standard ではこの要素は採用されていません。 構造の欠落部分は、匿名ボックス生成ルールによって暗示されます。この場合は、匿名のルビコンテナラップされます。

ルビ注釈コンテナボックス(ruby annotation container box.)

displayプロパティが、ruby-text--container の時、要素ルビ注釈コンテナボックス生成します。

ルビ注釈コンテナボックスは、内部ルビボックスです。ルビレイアウトで特定の役割を持ち、ルビコンテナルビフォーマットコンテキストに参加します。

rtc要素displayプロパティの既定値が、ruby-text--containerです。ただ、HTML Living Standard ではこの要素は採用されていません。 構造の欠落部分は、匿名ボックス生成ルールによって暗示されます。この場合は、匿名のルビコンテナラップされます。


6.フレックスフォーマットコンテキスト

フレックスフォーマットの
コンテキストでは、
ボックスは、
その開始位置も、
配置の方向も、
個別に指定できます。

フレックスフォーマットコンテキスト(Flex formatting context.) では、ボックスは、その開始位置も、配置の方向も、個別に指定できます。既定値は、含まれているコンテナの上部から始めて、水平方向に次々に配置されます。そして折り返しは行われません。HTMLの要素には、既定値のままでフレックスフォーマットコンテキストを生成する要素はありません。CSS の displayプロパティで指定する必要があります。

span
div
div
  1. <style>
  2. .XHSample42601 > * {
  3. border: dotted 1px rgba(153,153,153,1.0);
  4. }
  5. </style>
  6. <div class="XHSample42601">
  7. <span>span</span><div>div<br>div</div>
  8. </div>

div要素は既定値では、ブロックレベルブロックコンテナであるボックスを生成します。なので、class属性の値に XHSample42601 が指定されている要素は、ブロックフォーマットコンテキストを確立または継承しています。故にそこに含まれているボックスは、そのブロックの上部から始めて、垂直方向に次々に配置されます。

span
div
div
  1. <style>
  2. .XHSample42602 {
  3. display: flex;
  4. }
  5. .XHSample42602 > * {
  6. border: dotted 1px rgba(153,153,153,1.0);
  7. }
  8. </style>
  9. <div class="XHSample42602">
  10. <span>span</span><div>div<br>div</div>
  11. </div>

class属性の値に XHSample42602 が指定されている要素は、フレックスコンテナを生成する様に指定されています。なのでこの要素は、フレックスフォーマットコンテキストを確立します。インラインレベルのボックスがあっても、ブロックレベルのボックスがあっても、インラインフォーマット, ブロックフォーマットのいずれのコンテキストも確立, 継承しません。それぞれのボックスは、フレックスフォーマットのプロパティの指定に従って配置されます。

span
div
div

7.フロート

フロートは、
現在の行で
左または右に
シフトされる
ボックスです。

フロートとは、現在の行で左または右にシフトされるボックスです。 フロート(または「フロートされた」または「フローティング」ボックス) の特徴は、コンテンツがその側面に沿って流れる可能性がある(または「クリア」プロパティによってそれが禁止される) ことです。 コンテンツは、左フロートボックスの右側に流れ、右フロートボックスの左側に流れます。

  1. <style>
  2. .XHSample42701 {
  3. float: left;
  4. width: 5em;
  5. margin: 0;
  6. border: dotted 2px rgba(153,153,153,1.0);
  7. }
  8. </style>
  9. <p class="XHSample42701">フロートの指定がされている要素です。</p>
  10. <p>回り込みの例示です。</p>
  11. <p>フロートボックスにつづくボックスは、側面が終わるまで続きます。</p>

class属性の値に XHSample42701 が指定されている要素は、左フロートボックスを生成する様に指定されています。

フロートの指定がされている要素です。

回り込みの例示です。

フロートボックスにつづくボックスは、側面が終わるまで続きます。

  1. <style>
  2. .XHSample42701 {
  3. float: left;
  4. width: 5em;
  5. margin: 0;
  6. border: dotted 2px rgba(153,153,153,1.0);
  7. }
  8. .XHSample42702 {
  9. clear: both;
  10. }
  11. </style>
  12. <p class="XHSample42701">フロートの指定がされている要素です。</p>
  13. <p>回り込みの例示です。</p>
  14. <p class="XHSample42702">クリアの指定がされている要素です。</p>

class属性の値に XHSample42702 が指定されている要素は、フロートをクリアする様に指定されています。

フロートの指定がされている要素です。

回り込みの例示です。

クリアの指定がされている要素です。


8.配置の指定

positionプロパティで、
文書内で要素が
どのように配置されるかを
設定できます。

positionプロパティは CSS のプロパティで、文書内で要素がどのように配置されるかを設定します。topプロパティ, rightプロパティ, bottomプロパティ, leftプロパティ の各プロパティが、配置された要素の最終的な位置を決めます。

positionプロパティの既定値は static であり、この要素は文書の通常のフローに従って配置されます。relative は相対位置指定であり、absolute または fixed は絶対位置指定となります。相対位置指定とは通常の位置からの指定であり、絶対位置指定とは包含ブロックからの指定です。指定する場合の基準となる箇所の違いです。