CSS フラグメンテーションモジュール レベル 3

W3C 候補勧告,

このバージョン:
https://www.w3.org/TR/2018/CR-css-break-3-20181204/
最新公表バージョン:
https://www.w3.org/TR/css-break-3/
編集者草案:
https://drafts.csswg.org/css-break/
以前のバージョン:
テストスイート:
http://test.csswg.org/suites/css-break-3_dev/nightly-unstable/
編集者:
(Microsoft)
Elika J. Etemad / fantasai (招待専門家)
課題追跡:
GitHub 課題

概要

このモジュールは、フローをページ、カラム、またはリージョンに分割するフラグメンテーションモデルについて説明します。 ページモデルモジュールを基盤とし、フラグメンテーションモデルを導入・定義します。 また、ページ分割、可変フラグメントサイズや方向、ウィドウ・オーファンのための機能も追加します。

CSS は、構造化文書(HTMLやXMLなど)のレンダリングを 画面、紙、音声などで記述するための言語です。

この文書のステータス

このセクションは、本書が公開された時点でのステータスについて説明しています。 他の文書が本書に取って代わる場合があります。 現在のW3C出版物と、この技術レポートの最新版の一覧は、W3C技術レポート一覧 https://www.w3.org/TR/ にてご確認ください。

この文書は CSSワーキンググループ によって作成された候補勧告です。本書はW3C勧告になることを目的としています。 本書は少なくとも までは候補勧告として維持され、 幅広いレビューの機会を確保します。

この仕様についての議論は GitHubの課題 で行うことを推奨します。 課題を提出する際は、タイトルに「css-break」と記入してください。 例えば次のように記載してください: 「[css-break] コメントの概要…」。 すべての課題やコメントはアーカイブされており、 過去のアーカイブも参照できます。

ドラフト実装報告書も公開されています。

候補勧告として公開されたことは、W3C会員による承認を意味するものではありません。 本書はドラフト文書であり、随時更新・置換・廃止される可能性があります。他の進行中の作業以外として引用することは不適切です。

本書はW3C特許ポリシーに基づくグループによって作成されました。 W3Cは、グループの成果物に関連して行われた特許開示の公開リストを管理しています。 そのページには特許開示の方法についても記載されています。 特許の「必須クレーム」を含むと信じる特許を実際に知っている場合は、 W3C特許ポリシー第6節に従って情報を開示してください。

この文書は2018年2月1日W3Cプロセス文書によって管理されています。

前回のドラフト以降の変更については、変更点セクションをご覧ください。

以下の機能は「リスクあり」とされており、CR期間中に削除される可能性があります:

「リスクあり」はW3Cプロセス用語であり、必ずしも機能が廃止・遅延されることを意味するものではありません。 WGがその機能の相互運用可能な実装が難しいと考えている場合、リスクありとすることで、提案勧告への移行時に機能を削除できるようにしています。 その際、機能を削除した新しい候補勧告を発行せずに削除が可能です。

1. はじめに

このセクションは規定的ではありません。

ページメディア(例:紙、フィルム、写真アルバムのページ、印刷出力のシミュレーションとしてコンピュータ画面に表示されるページ)では、 連続メディアとは異なり、 文書の内容は一つまたは複数の独立した表示面に分割されます。 行の途中など不自然な分割を避けるために、レイアウトエンジンはページ分割箇所にかかる内容を調整できなければなりません。 この処理はページネーションと呼ばれます。

CSSでは、ページメディアに加え、リージョン [CSS3-REGIONS]マルチカラムレイアウト [CSS3COL] のような特定のレイアウト機能も、同様に分割された環境を作り出します。 コンテナをまたいで内容を分割する総称は フラグメンテーション です。 このモジュールでは、内容が フラグメンテーションコンテナフラグメンテイナー)である ページやカラムなどをまたいでどのように分割されるか、またその分割を著者が制御する方法について説明します。

1.1. モジュール間の連携

このモジュールは [CSS21]13.3節[CSS3PAGE] で定義されているページネーション制御を置き換え、拡張します。

1.2. 値について

この仕様は CSSプロパティ定義規則[CSS21] から踏襲しています。 この仕様で定義されていない値タイプは CSS Values & Units [CSS-VALUES-3] で定義されています。 他のCSSモジュールがこれらの値タイプの定義を拡張する場合もあります。

各プロパティ定義で記載されている値に加え、 本仕様で定義されるすべてのプロパティは CSS全体のキーワードもプロパティ値として受け入れます。 可読性のため、明示的な記載は省略しています。

2. フラグメンテーションモデルと用語

フラグメンテーションコンテナフラグメンテイナー
ページボックス、カラムボックス、リージョンなど、 フラグメント化されたフローの一部(または全体)を含むボックス。 フラグメンテイナーは事前に定義することも、必要に応じて生成することもできます。 ブロック方向で分割可能な内容がフラグメンテイナーをオーバーフローする場合、 自身のフラグメンテーションコンテキストの次のコンテナに分割されます。
フラグメンテーションコンテキスト
フラグメンテイナーが順序付けられた並び。 例:マルチカラムコンテナCSSリージョンの連鎖、 ページメディア表示など。 1つのフラグメンテーションコンテキスト内では、すべての フラグメンテイナーで ブロックフロー方向は1種類のみです。 (フラグメンテーションルートの子孫は他のブロックフロー方向を持つ場合もありますが、 フラグメンテーション自体はフラグメンテーションルートに適用されるブロックフロー方向に従って進行します。)
フラグメント化されたフロー
フラグメンテーションコンテキストでレイアウトされる内容。 フラグメント化されたフローは、 (匿名の場合もある)ボックスの内容であり、 フラグメンテーションルートと呼ばれます。
フラグメンテーション方向
フラグメンテーションコンテキストのブロックフロー方向、 すなわち内容が分割される方向。 (このCSSレベルでは、内容は1次元でのみ分割されます。)
フラグメンテーション
内容フローを、フラグメンテイナーからなる フラグメンテーションコンテキストにまたがって分割する処理。
ボックスフラグメントまたはフラグメント
ボックスのうち、ちょうど1つのフラグメンテイナーに属する部分。 連続フロー内のボックスは常に1つのフラグメントのみ持ちます。 フラグメント化されたフロー内のボックスは1つ以上のフラグメントを持ちます。 各フラグメントはボックスのボーダー、パディング、マージンの一部を持ち、 それぞれ独自のパディング領域ボーダー領域マージン領域を持ちます。 (フラグメンテーションによる影響を制御する box-decoration-break を参照。)
残りのフラグメンテイナー領域
ブロック軸方向の、 フラグメンテイナー内で指定要素に利用可能なスペース。 すなわち、フラグメンテイナー内の直前の内容の末尾から フラグメンテイナーの端まで。

フラグメンテーション分割(以下、分割) は、現在のフラグメンテイナーでフラグメント化されたボックスのレイアウトを終了し、 残りの内容を次のフラグメンテイナーにレイアウトします。 必要に応じて、保留された内容のために新しいフラグメンテイナーが生成される場合もあります。

インライン内容を行に分割することもフラグメンテーションの一種であり、 インラインボックスがインラインボックスラインボックスをまたいで分割する際にも ボックスフラグメントが生成されます。 ただし、インライン分割については本仕様では扱いません。[CSS21] / [CSS3TEXT] を参照してください。

ボックスは、テキストの双方向並び替え(bidi)によっても複数の フラグメントに分割される場合があります (双方向並び替えアルゴリズムの適用CSS Writing Modes を参照)。 また、より高レベルな display type のボックス分割(例: block-in-inlineの分割 (CSS2§9.2参照) や column-spanner-in-blockの分割 (CSS Multi-column Layout参照) など。 これらの場合のボックスフラグメントへの分割は レイアウト(内容のサイズ・配置)には依存しません。

2.1. 並列フラグメンテーションフロー

複数のフォーマッティングコンテキストが並列にレイアウトされる場合、 フラグメンテーションは各フォーマッティングコンテキストごとに独立して行われます。 例えば、要素がフロートされている場合、 フロート内で強制分割があってもフロート外の内容には影響しません (ただしフロートの高さが増すことで間接的に影響する可能性はあります)。 UAは任意で(必須ではありません)、 並列非強制分割の配置を調整し、 並べて表示される内容の視覚的バランスを取ることができますが、 強制分割を一致させるために調整してはなりません

以下は、内容が独立してフラグメンテーションされる並列フローの例です:

固定サイズボックスの内容エッジから溢れる内容は、 固定サイズボックスの後の内容とは並列とみなされ、通常のフラグメンテーション規則に従います。 溢れた内容はフラグメンテーションルートボックスのサイズには影響しませんが、 フラグメント化されたフローの長さを増加させ、 必要に応じて追加のフラグメンテイナーに分割または生成されます。

2.2. 入れ子のフラグメンテーションフロー

フラグメンテイナー Fを分割すると、実質的にフラグメンテイナーが2つの フラグメンテイナーF1F2)に分割されます。 唯一の違いは、フラグメンテイナー Fの内容に関して、 2つの部分 F1F2 の間の分割の種類は Fを分割したフラグメンテーションコンテキストで作られた分割の種類であり、 F自身のフラグメンテーションコンテキストで通常作成される分割の種類ではありません。

例えば、リージョンボックスがページ境界で分割される場合、 その時点でリージョンの内容にはページ分割の影響が及びます (リージョン分割の影響は及びません)。
マルチカラムコンテナがページをまたいで分割される場合、 残りの内容のために次のページに新しいカラムの行が生成されます。 そのため、マルチカラムコンテナ内でのページ分割は常にページ分割とカラム分割の両方となります。

3. 分割の制御

以下のセクションでは、フラグメント化されたフローにおける分割の制御方法について説明します。 ボックス間のページ・カラム・リージョン分割のタイミングは、 包含ブロックのbreak-insideプロパティ、 直前要素のbreak-afterプロパティ、 次の要素のbreak-beforeプロパティの影響を受けます。 行ボックス間のページ・カラム・リージョン分割のタイミングは、 包含ブロックのbreak-insidewidowsorphansプロパティの影響を受けます。 フラグメンテーション分割は、これらのプロパティ値に応じて許可・強制・回避されます。 強制分割は、その分割点で作用する分割制限を上書きします。 強制ページ分割の場合、著者は次の内容がどちらのページ(左または右)から再開されるかを指定することもできます。

これらのプロパティがフラグメンテーションにどう影響するかの詳細は、分割のルールのセクションを参照してください。

3.1. ボックス間の分割: break-before および break-after プロパティ

Name: break-before, break-after
Value: auto | avoid | avoid-page | page | left | right | recto | verso | avoid-column | column | avoid-region | region
Initial: auto
Applies to: ブロックレベルボックス、グリッドアイテム、フレックスアイテム、テーブル行グループ、テーブル行(詳細は本文参照)
Inherited: no
Percentages: n/a
Media: visual
Computed value: 指定キーワード
Canonical order: 文法順
Animation type: 離散

これらのプロパティは、生成されたボックスの前後でのページ・カラム・リージョン分割動作を指定します。 強制分割値 leftrightrectoversopagecolumnregion は フロー内で強制分割を作成します。 一方、分割回避値 avoidavoid-pageavoid-columnavoid-region は 内容をまとめて配置することを示します。

break-before および break-after の値は以下のサブセクションで定義されています。 ユーザーエージェントは、これらのプロパティをフラグメンテーションルートの通常フロー内のボックスに適用しなければなりません。 また、包含ブロックがルートフラグメント要素の通常フローにあるフロートボックスにも適用すべきです。 他のボックスにも適用しても構いません。 絶対配置されたボックスにはこれらのプロパティを適用してはなりません。

一般的な分割値

これらの値は、フローを含むフラグメント化コンテキストの種類に関係なく効果があります。

auto
principal boxの前後で分割を強制も禁止もしません。
avoid
principal boxの前後で分割を避けます。

ページ分割値

これらの値はページネーションされたコンテキストでのみ効果があります。フローがページネーションされていない場合は効果がありません。

avoid-page
principal boxの前後でページ分割を避けます。
page
principal boxの前後で必ずページ分割します。
left
principal boxの前後で1回または2回ページ分割し、次ページを左ページとしてフォーマットします。
right
principal boxの前後で1回または2回ページ分割し、次ページを右ページとしてフォーマットします。
recto
principal boxの前後で1回または2回ページ分割し、次ページを見開き内で2番目(ページ進行による)となる左または右ページとしてフォーマットします。
verso
principal boxの前後で1回または2回ページ分割し、次ページを見開き内で1番目(ページ進行による)となる左または右ページとしてフォーマットします。

カラム分割値

これらの値はマルチカラムコンテキストでのみ効果があります。フローがマルチカラムコンテキスト内でない場合は効果がありません。

avoid-column
principal boxの前後でカラム分割を避けます。
column
principal boxの前後で必ずカラム分割します。

リージョン分割値

これらの値はマルチリージョンコンテキストでのみ効果があります。フローが複数リージョンをまたがっていない場合は効果がありません。

avoid-region
principal boxの前後でリージョン分割を避けます。
region
principal boxの前後で必ずリージョン分割します。

3.1.1. 子→親への分割伝播

分割は兄弟要素間のみ許可され、ボックスとそのコンテナ間では許可されません (分割可能箇所参照)。 親の開始・終了位置に子に適用された分割値は、親へ伝播され、そこで効果を持ちます。

具体的には—並び替えや並列レイアウトを考慮したより詳細な規則を定義するレイアウトモード(例:フレックスレイアウト [CSS-FLEXBOX-1]グリッドレイアウト [CSS-GRID-1])を除き— 最初のbreak-before値が設定された in-flowの子ボックスは、親へ伝播されます。 同様に、最後のbreak-after値が設定された in-flowの子ボックスも親へ伝播されます。 (矛盾する値は下記定義のように結合されます。) この伝播は最も近い一致するフラグメンテーションコンテキストの前で止まります。

分割の伝播算出値には影響しません。 レイアウトにおける各要素の算出値の解釈の一部です。

3.2. ボックス内の分割: break-inside プロパティ

Name: break-inside
Value: auto | avoid | avoid-page | avoid-column | avoid-region
Initial: auto
Applies to: インラインレベルボックス、内部ルビボックス、テーブルカラムボックス、テーブルカラムグループボックス、絶対配置ボックスを除くすべての要素
Inherited: no
Percentages: n/a
Media: visual
Computed value: 指定キーワード
Canonical order: 文法順
Animation type: 離散

このプロパティは、要素のprincipal box内でのページ・カラム・リージョン分割動作を指定します。 各値の意味は次の通りです:

auto
ボックス内で追加の分割制約を課しません。
avoid
ボックス内で分割を避けます。
avoid-page
ボックス内でページ分割を避けます。
avoid-column
ボックス内でカラム分割を避けます。
avoid-region
ボックス内でリージョン分割を避けます。

3.3. 行間の分割: orphanswidows

Name: orphans, widows
値: <integer>
初期値: 2
適用対象: ブロックコンテナで、インラインフォーマッティングコンテキストを確立するもの
継承: yes
パーセンテージ: n/a
メディア: visual
算出値: 指定された整数値
標準順序: 文法順
アニメーションタイプ: 算出値型による

orphans プロパティは、フラグメンテーション分割 に ブロックコンテナ内に残しておくべき行ボックスの最小数を指定します。 widows プロパティは、分割 に ブロックコンテナ内に残しておくべき行ボックスの最小数を指定します。 これらを使ったフラグメンテーション分割制御例は下記に示します。

orphans および widows の値には 正の整数のみが許可されます。負の値やゼロは無効であり、宣言は無視されなければなりません。

ブロック内の行数が widows または orphans の値より少ない場合、 すべての行をまとめて保持するというルールになります。

3.4. ページ分割エイリアス: page-break-beforepage-break-afterpage-break-inside プロパティ

CSS Level 2との互換性のため、 [CSS21]に準拠するUAは page-break-beforepage-break-afterpage-break-inside プロパティを break-beforebreak-afterbreak-inside にエイリアスし、 page-break-*レガシー略記 として break-* に扱い、以下の値マッピングを適用します:

略記(page-break-*)値 正式(break-*)値
auto | left | right | avoid auto | left | right | avoid
always page

4. 分割のルール

フラグメント化されたフローフラグメンテイナー分割可能箇所で分割される場合があります。強制分割の場合、UAはそのポイントで フローを分割しなければなりません。非強制分割の場合、UAは許可された分割の中から 選択しなければなりません。

進行保証のため、フラグメンテイナーは使用サイズに関係なく 最小ブロックサイズを1pxとみなします。

4.1. 分割可能箇所

フラグメンテーションはブロックフロー次元でボックスを分割します。 ブロック・インラインフローでは、以下の箇所で分割が生じることがあります:

クラスA
以下の型の兄弟ボックス間:
ブロック並列フラグメンテーション
兄弟の包含ブロックのブロックフロー方向がフラグメンテーションコンテキストのそれと並行な場合: in-flow ブロックレベルボックス、 フロートと隣接するin-flowまたはフロートされたボックス、 テーブル行グループボックス、 テーブル行ボックス、 マルチカラムのカラム行ボックス。
ブロック垂直フラグメンテーション
兄弟の包含ブロックのブロックフロー方向がフラグメンテーションコンテキストのそれと垂直な場合: テーブルカラムグループボックス、 テーブルカラムボックス、 マルチカラムのカラムボックス。
クラスB
ブロックコンテナボックス内の行ボックス間。
クラスC
ブロックコンテナボックスの内容エッジと、その子内容の外側(ブロックレベル子のマージンエッジまたはインラインレベル子の行ボックスエッジ)との間 かつ両者間に(ゼロでない)隙間がある場合。

これらの分割点クラス間に本質的な優先順位はありません。 ただし、個々の分割点は分割制御によって優先・非優先される場合があります。

他のレイアウトモデルが上記クラスに分割点を追加することがあります。 例えば、[CSS-FLEXBOX-1]は フレックスフォーマッティングコンテキスト内の特定の点をクラスAとCに追加します。

一部の内容はフラグメント化できません。例えば多くの種類の置換要素 [CSS21](画像や動画など)、 スクロール可能な要素、単一行のテキスト内容などです。 これらの内容はモノリシックとみなされます: 分割可能な箇所を含みません。 そのようなボックス内の強制分割は分割できず、 ボックス自身のフラグメンテーションコンテキストで無視されなければなりません。

一般にフラグメント化できない内容に加え、 UAはモノリシックとみなしてもよい要素として、 overflowauto または scroll に設定されている要素、 overflow: hidden かつ auto でない 論理的高さ(かつ最大論理的高さが指定されていない)要素を含めても構いません。

行ボックスには分割可能箇所がないため、 inline-blockinline-table ボックス (および他のインラインレベルdisplay typeで独立フォーマッティングコンテキストを確立するもの) も モノリシックとみなされる場合があります。 つまり、単一の行ボックスがフラグメンテイナーに自力で収まらないほど大きい場合、 UAがその行ボックスを分割することを選択すれば、そのようなボックスをフラグメント化することも、 モノリシックとして扱うこともできます。

4.2. 分割の種類

CSSでは、フラグメンテイナーの種類に応じて異なる分割タイプが定義されています:

ページ分割
ページボックス間の分割。[CSS3PAGE]
見開き分割
向かい合うページでない2つのページボックス間の分割。 見開き分割は常にページ分割でもある。[CSS3PAGE]
カラム分割
カラムボックス間の分割。 カラムボックスが異なるページ上にある場合、その分割は ページ分割でもあります。 同様に、カラムボックスが異なるリージョンにある場合は リージョン分割でもあります。[CSS3COL]
リージョン分割
リージョン間の分割。 リージョンボックスが異なるページ上にある場合は ページ分割でもあります。[CSS3-REGIONS]

5番目の分割タイプは 行分割で、 行ボックス間の分割です。 これらは本仕様では扱いません。[CSS21] [CSS3TEXT] を参照してください。

4.3. 強制分割

強制分割は、 スタイルシート著者によって明示的に指定されたものです。 強制分割クラスA分割点で発生し、 先行兄弟ボックスに指定または伝播された break-afterプロパティ、 後続兄弟ボックスに指定または伝播された break-beforeプロパティの中に 強制分割値が少なくとも1つあれば発生します。 (つまり、強制分割値は その分割点に同時に適用される 分割回避値 を上書きします。)

1つの分割点に複数の強制分割値 が適用される場合、それらは組み合わされ、すべての分割タイプが尊重されます。 leftrightrectoverso が組み合わされた場合、フロー内で最新の要素に指定された値が優先されます。

強制ページ分割は、クラスA分割点において、 このマージンの上側の最後の行ボックスと下側の最初の行ボックスの page 値が異なる場合にも 発生しなければなりません。[CSS3PAGE]参照

強制分割が発生すると、その後の内容は分割の種類に合わせた次のフラグメンテイナーに配置され、 指定された分割タイプがすべて満たされるまで必要なだけフラグメンテーションコンテキストを突破します。 強制分割が一致する種類のフラグメンテーションコンテキスト内にない場合は、効果がありません。

4.4. 非強制分割

分割制御は分割を強制できるだけでなく、分割を回避することもできます。 非強制分割は、 UAが内容のフラグメンテイナー溢れを防ぐために自動的に挿入する分割です。 非強制分割が分割可能箇所で許可されるかどうかは、次のルールにより制御されます:

ルール1
フラグメント化されたフロークラスA分割点で分割できるのは、 その分割点で適用されるすべての break-after および break-before の値が 分割を許可する場合のみであり、いずれかが分割を強制するか、 どれも禁止しない場合 (avoidavoid-page/avoid-column/avoid-region、分割タイプによる)。
ルール2
ただし、すべてがautoであり、 すべての要素の共通祖先が break-inside の値 avoid を持つ場合は ここで分割してはなりません。
ルール3
クラスB分割点で分割できるのは、 分割から囲みブロックボックスの開始までの行ボックス数が orphans の値以上、 また分割からボックスの終わりまでの行ボックス数が widows の値以上の場合のみ。
ルール4
クラスBまたはクラスC分割点で分割できるのは、 すべての祖先の break-inside プロパティが auto の場合のみ。

上記ルールで十分な分割点が得られず内容がフラグメンテイナーから溢れる場合は、ルール3を除外して分割点を増やします。

それでも十分な分割点が得られない場合は、ルール1、2、4も除外し、さらに分割点を探します。 この場合UAはその地点で有効なavoidを新しい分割点の妥当性評価に利用できますが、 本仕様では正確なアルゴリズムは示しません。

それでも十分な分割点が得られない場合は、複製されたマージン/ボーダー/パディングをブロック末端側で切り詰め、 さらに必要な場合、複製されたマージン/ボーダー/パディングをブロック末端側でも切り詰めます。

最終的に、フラグメンテイナーの上端より下に分割点がない場合で内容が収まりきらない場合は、 UAは内容が失われないようどこでも分割してよいです。 この場合、UAはモノリシック要素の内容も グラフィカルな表現を切り分けることでフラグメント化してよいです。 ただし、UAはページの上端で分割してはならず、各フラグメンテイナーに少なくとも何らかの内容を配置し、 各フラグメンテイナーにゼロでない量の内容が存在するようにして進行が保証されなければなりません。

4.5. 非強制分割の最適化

CSS3では、フラグメント化されたフローは フラグメンテーションコンテキスト内のフラグメンテイナー溢れを避けるために許可された分割点で分割しなければなりませんが、 内容が特定の許可された分割点で分割されるかどうかは定義されていません。 ただし、UAは次の指針に従うことが推奨されています(ただし相反する場合もあります):

例えば、スタイルシートに orphans : 4widows : 2 とあり、 現在のページ下部に20行分のスペースがあり、次のブロックが通常フローで配置されるとします:

次に、orphans10widows20 で、現在のページ下部に8行分のスペースがある場合:

さらにCSSには1つの要件があります: サイズゼロのボックスフラグメントは、 スペースを取らないため、分割点に収まる場合は フラグメンテーション分割の前側に配置しなければなりません。

注: サイズゼロのボックスフラグメントは、 直前の内容がフラグメンテイナーを 溢れる場合、その直後に配置されると次のフラグメンテイナーへ押し出されます。

5. 分割時のボックスモデル

このセクションで使われているサイズ用語は [CSS3-SIZING] で定義されています。

5.1. 可変サイズフラグメンテイナーへの分割

フローが可変サイズのフラグメンテイナーに分割される場合、レイアウトの適応に以下の規則が適用されます:

フラグメンテーション中も要素の文書順は変化しないため、フラグメントは連続メディアと同様の規則で処理されます。特に、floatの順序は全フラグメントを通じて維持され、CSS 2.1 9.5で定義された規則に従います。

以下はこれらの規則による(参考情報として)影響例です:

割合ベースでの進行を示す例: 絶対配置された要素が top: calc(150% + 30px) で、height: calc(100% - 10px) の場合を考えます。これがページ高さ400pxの最初のページ、200pxの2ページ目、600pxの3ページ目のページネーションコンテキストに配置された場合、レイアウト進行は次の通りです:

5.2. 分割時のマージン結合

ブロックレベルボックスの前後で非強制分割が発生する場合、分割に隣接するマージンはゼロに切り詰められます。 強制分割が発生する場合は、分割前の隣接マージンは切り詰められますが、分割後のマージンは保持されます。複製されたマージンはブロックレベルボックスで常にゼロに切り詰められます。

注: CSS Fragmentation Level 4では分割時のマージン切り詰め制御が導入されます。

5.3. ボックスの分割

ボックスが分割されると、 内容ボックスは 残りのフラグメンテイナー領域を埋めるまで拡張されます(box-decoration-break: clone によるマージン/ボーダー/パディングも含めて) 内容が次の フラグメンテイナーに再開されるまで。 (内容が次の フラグメンテイナーへ押し出される フラグメンテーション分割は、ボックス内容の ブロックサイズを実質的に増加させます。)

ボックス分割による追加の ブロックサイズ(分割点から フラグメンテイナーの端までの距離)は、ボックスの ブロックサイズの制限値に向けて進行に加算されます。

Illustration: Filling remaining fragmentainer extent

残りのフラグメンテイナー領域を埋める図。

5.4. 分割された枠線と背景: box-decoration-break プロパティ

Name: box-decoration-break
値: slice | clone
初期値: slice
適用対象: すべての要素
継承: no
パーセンテージ: n/a
メディア: visual
算出値: 指定キーワード
標準順序: 文法順
アニメーションタイプ: 離散

分割(ページ/カラム/リージョン/行)でボックスが分割される場合、 box-decoration-break プロパティは、

値の意味は以下の通りです:

clone
各ボックスフラグメントは独立してボーダー・パディング・マージンでラップされます。 border-radiusborder-imagebox-shadow がある場合は、各フラグメントに個別に適用されます。 背景は要素の各フラグメントごとに独立して描画されます。 no-repeatの背景画像は要素の各フラグメントごとに1回描画されます。

注: 複製されたマージンはブロックレベルボックスで切り詰められます。

slice

要素が分割なしで描画された後で分割点でスライスされたかのような効果になります: 分割点にはボーダーやパディングは挿入されません; 分割された端にはbox-shadowは描画されません; 背景、border-radiusborder-image は全体のボックス形状に対して、分割されていないかのように適用されます。

Illustration:
      (1) a single box cut in two in between two lines of text by a page break and
      (2) two boxes, one before and one after the page break,
      both with a border all around and their own background image

box-decoration-break の2つの可能性:左が slice、右が clone の値。

UAは、双方向(bidi)による分割、すなわちbidiリオーダーでインラインが非連続フラグメントに分割される場合や、display-typeによる分割、すなわち高次の display typeブロックレベルボックスカラムスパナーなど)が互換性のない祖先(インラインボックスブロックコンテナ)を分割する場合にも、描画制御のため box-decoration-break を適用すべきです。 それ以外の場合は、分割は slice として扱わなければなりません。 詳細は 双方向並び替えアルゴリズムの適用CSS Writing Modes)、CSS2§9.2 ブロックレベル要素とブロックボックスCSS Multi-column Layout §6 カラムのスパン参照。

インライン要素の場合、フラグメントのどちら側が分割端とみなされるかは、親要素のインライン進行方向によって決まります。 例えば、親が direction: rtl のインライン要素が2行にまたがって分割される場合、最初の行のフラグメントの 左端 が分割端となります(特に、要素自身の direction や包含ブロックの direction は使われません)。詳細は [CSS3-WRITING-MODES] を参照してください。

5.4.1. slice 用のボックス結合

box-decoration-break: slice の場合、背景(および border-image)は、 ボックスのすべてのフラグメントを視覚順に再結合した合成ボックスに適用されたかのように描画されます。 この理論的な結合は、要素がレイアウトされた後(ジャスティフィケーション、bidi並び替え、ページ分割等含む)に行われます。 合成ボックスを組み立てるには…

行をまたいで分割されたボックスの場合
まず、同じ行上のフラグメントは視覚順に結合されます。 次に、後続行上のフラグメントは要素の インライン基底方向に従い、要素の主要ベースラインで整列されます。 例えば、包含ブロックが左から右(directionltr)の場合、 最初のフラグメントは1行目の最も左側であり、後続行のフラグメントはその右に配置されます。 右から左の場合は、最初のフラグメントは1行目の最も右側で、以降は左に並びます。
カラムをまたいで分割されたボックスの場合
フラグメントは、マルチカラムコンテナの ブロックフロー方向で、カラムボックスが貼り合わせられたかのように結合されます。
ページをまたいで分割されたボックスの場合
フラグメントは、ルート要素の ブロックフロー方向で、ページ内容領域が貼り合わせられたかのように結合されます。
リージョンをまたいで分割されたボックスの場合
フラグメントは、主書記モードリージョンチェーンにおける ブロックフロー方向で、リージョン内容領域が貼り合わせられたかのように結合されます。

ボックスフラグメントの幅(横結合の場合は高さ)が異なる場合、 各部分は自身の幅(高さ)が要素全体の幅(高さ)であるかのように背景描画を行います。 ただし、画像の使用高さ(幅)がボックスの幅(高さ)から導出される場合は、最も広いフラグメントの幅で計算され、固定サイズとなります。 これにより、右揃え画像は右端に、左揃え画像は左端に、中央揃え画像は中央に維持され、 伸長画像は背景領域全体を意図通りカバーし、フラグメント間の連続性が保たれます。

5.5. 変形・配置・ページネーション

フラグメンテーションはレイアウトに影響し、相対位置 [CSS21]、変形 [CSS3-TRANSFORMS]、他のグラフィカル効果の に発生します。 これらの効果は各フラグメントごとに適用されます。 例えば、分割されたボックスに回転を適用すると、各フラグメントごとに回転原点を計算し、その原点を中心に独立して回転します。 (オーバーフロー専用フラグメントの原点は、内容がゼロマージン・ボーダー・パディングの空ボックスからオーバーフローするものとして決定されます。) ただし、印刷時のデータ損失を減らすため、 ページボックスの分離・転送は 最終段階で行うべきです。 そのため、ページをまたぐ変形フラグメントはページ分割でスライスされて全体が印刷されるべきであり、元のページでクリップされるよりも優先されます。

Illustration: Transformed overflow fragmentation

固定高さのボックスが2.5ページをまたぎ、オーバーフロー内容が合計4ページにまたがる例。 各フラグメントの変形原点はそのボーダーボックスの中心。 ボーダーボックスのないフラグメントはオーバーフローの開始位置にゼロ高さボックスを仮定します。

絶対配置はレイアウトに影響し、フラグメンテーションとも相互作用します。 座標系と包含ブロックに属する絶対配置ボックスは、包含ブロックと同じフラグメンテーションフローでフラグメンテイナーにまたがって分割されます。

UAは、フラグメンテーション分割をまたぎ、block-start エッジ位置がボックス内容の分割位置に依存するボックスの位置を正しく配置する必要はありません。

メモリ制約により文書全体をメモリ上で操作できないUAは、 すでに描画されたページに絶対配置要素がまたがる場合の正確な配置を保証する必要はありません。

変更点

2016年1月14日候補勧告以降の主な変更点は以下の通りです:

コメント処理状況が公開されています。

2015年1月29日作業草案以降の主な変更点:

コメント処理状況が公開されています。

謝辞

編集者は本モジュールへの貢献者である Mihai Balan、 Michael Day、 Alex Mogilevsky、 Shinyu Murakami、 Florian Rivoal、 Alan Stearns に感謝します。 また、旧 [CSS3PAGE] 編集者 Jim Bigelow (HP)、 Melinda Grant (HP)、 Håkon Wium Lie (Opera)、 Jacob Refstrup (HP) の本仕様への貢献に特別な謝意を表します。 本仕様は彼らの成果を継承しています。

適合性

文書記法

適合性要件は、記述的な主張とRFC 2119用語の組み合わせで示されています。規定部分におけるキーワード “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, “OPTIONAL” はRFC 2119で定義される通りに解釈されます。 ただし、可読性のため本仕様ではこれらの単語をすべて大文字では表記しません。

本仕様の文中は、非規定と明示されたセクション、例、および注記を除き、すべて規定的です。[RFC2119]

本仕様の例は “for example” という語で導入されるか、class="example" のように規定文から区別して記載されます。例:

これは参考例の一例です。

参考注記は “Note” という語で始まり、class="note" で規定文から区別されます。例:

注:これは参考注記です。

注意事項は、特別な注意を喚起する規定セクションとして強調され、他の規定文と区別するため <strong class="advisement"> を使います。例: UAは必ずアクセシブルな代替手段を提供しなければなりません。

適合クラス

本仕様への適合は、3種類の適合クラスで定義されます:

スタイルシート
CSS スタイルシート
レンダラー
スタイルシートの意味を解釈し、それらを使用する文書を描画する UA
オーサリングツール
スタイルシートを書き出す UA

スタイルシートは、本モジュールで定義された構文を使用するすべての文が 汎用CSS文法および本モジュールで定義される各機能固有の文法に従い有効である場合、 本仕様に適合します。

レンダラーは、スタイルシートを適切な仕様通りに解釈するほか、 本仕様で定義されるすべての機能を正しくパースし、適切に文書を描画することで 本仕様に適合します。ただし、デバイスの制約でUAが正しく描画できない場合(例:モノクロモニターで色表示できない場合)は、 非適合とはみなしません。

オーサリングツールは、汎用CSS文法および本モジュールの各機能固有の文法に従い構文的に正しいスタイルシートを出力し、 本モジュールで記載されたスタイルシートの他の適合要件も満たす場合、本仕様に適合します。

CSSの責任ある実装要件

以下のセクションでは、現在および将来の相互運用性を促進するための、 CSSを責任をもって実装するための適合要件を定義します。

部分的な実装

著者が前方互換のパース規則を活用してフォールバック値を指定できるようにするため、CSSレンダラーは 必ず 利用可能なサポートレベルがない at-rule、プロパティ、プロパティ値、キーワード、その他構文要素を 無効として扱い(適宜無視する)必要があります。 特にUAは、サポートされていない値だけを選択的に無視し、サポートされる値だけを複数値プロパティ宣言で適用することを してはなりません。 いずれかの値が無効(サポート外値は必ず無効)とみなされる場合、 CSSの仕様により宣言全体を無視することが求められます。

不安定・独自機能の実装

将来安定したCSS機能との競合を避けるため、 CSSWGはベストプラクティスに従い 不安定機能独自拡張を実装することを推奨します。

CRレベル機能の実装

仕様が候補勧告段階に達した後は、 実装者は仕様通りに正しく実装できることが示せるCRレベル機能について、 プレフィックスなしで 実装を公開すべきであり、 その機能のプレフィックス付きバリアントは公開しないようにすべきです。

CSSの相互運用性を確保・維持するため、 CSSワーキンググループは非実験的なCSSレンダラーに対し、CSS機能のプレフィックスなし実装を公開する前に 実装報告書(必要に応じてその実装報告で用いたテストケース)をW3Cへ提出するよう要請します。 W3Cに提出されたテストケースは、CSSワーキンググループによるレビュー・修正の対象となります。

テストケース・実装報告の提出方法については CSSワーキンググループのWebサイト https://www.w3.org/Style/CSS/Test/ を参照してください。 質問は public-css-testsuite@w3.org メーリングリストまで。

CR終了基準

本仕様が提案勧告に進むには、 各機能について少なくとも2つの独立した相互運用可能な実装が必要です。 各機能は異なる製品群によって実装されてもよく、 すべての機能が一つの製品で実装される必要はありません。 この基準のために、以下の用語を定義します:

独立
各実装は異なる開発元によって開発され、 他の適格実装のコードを共有、再利用、派生してはなりません。 本仕様の実装に無関係なコード部分はこの要件の対象外です。
相互運用可能
公式CSSテストスイートの該当テストケースに合格するか、 Webブラウザでない場合は同等のテストに合格すること。 テストスイートのすべての関連テストには同等のテストが作られるべきで、 そのようなUAを使って相互運用性を主張する場合、同等テストに合格可能な他のUAが必要です。 同等テストはピアレビューのため公開されなければなりません。
実装
ユーザーエージェントであり、以下を満たすもの:
  1. 本仕様を実装している。
  2. 一般公開されている。製品版か、ベータ版・プレビュー版・ナイトリービルドなどの公開バージョン。 非製品版リリースは少なくとも1ヶ月以上機能を実装し、安定性を示す必要があります。
  3. 実験的でない(テストスイートを通過するためだけのバージョンではなく、今後通常利用されることが意図されているもの)。

本仕様は少なくとも6ヶ月間候補勧告のままとなります。

索引

本仕様で定義される用語

参照で定義される用語

参考文献

規定参考文献

[CSS-BOX-3]
Elika Etemad. CSS Box Model Module Level 3. 2018年8月9日. WD. URL: https://www.w3.org/TR/css-box-3/
[CSS-CASCADE-4]
Elika Etemad; Tab Atkins Jr.. CSS Cascading and Inheritance Level 4. 2018年8月28日. CR. URL: https://www.w3.org/TR/css-cascade-4/
[CSS-DISPLAY-3]
Tab Atkins Jr.; Elika Etemad. CSS Display Module Level 3. 2018年8月28日. CR. URL: https://www.w3.org/TR/css-display-3/
[CSS-MASKING-1]
Dirk Schulze; Brian Birtles; Tab Atkins Jr.. CSS Masking Module Level 1. 2014年8月26日. CR. URL: https://www.w3.org/TR/css-masking-1/
[CSS-OVERFLOW-3]
David Baron; Elika Etemad; Florian Rivoal. CSS Overflow Module Level 3. 2018年7月31日. WD. URL: https://www.w3.org/TR/css-overflow-3/
[CSS-SHAPES-1]
Vincent Hardy; Rossen Atanassov; Alan Stearns. CSS Shapes Module Level 1. 2014年3月20日. CR. URL: https://www.w3.org/TR/css-shapes-1/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 3. 2018年8月14日. CR. URL: https://www.w3.org/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 4. 2018年10月10日. WD. URL: https://www.w3.org/TR/css-values-4/
[CSS-WRITING-MODES-4]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 4. 2018年5月24日. CR. URL: https://www.w3.org/TR/css-writing-modes-4/
[CSS21]
Bert Bos; 他. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 2011年6月7日. REC. URL: https://www.w3.org/TR/CSS2/
[CSS3-REGIONS]
Rossen Atanassov; Alan Stearns. CSS Regions Module Level 1. 2014年10月9日. WD. URL: https://www.w3.org/TR/css-regions-1/
[CSS3-SIZING]
Tab Atkins Jr.; Elika Etemad. CSS Intrinsic & Extrinsic Sizing Module Level 3. 2018年3月4日. WD. URL: https://www.w3.org/TR/css-sizing-3/
[CSS3-TRANSFORMS]
Simon Fraser; 他. CSS Transforms Module Level 1. 2017年11月30日. WD. URL: https://www.w3.org/TR/css-transforms-1/
[CSS3-WRITING-MODES]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 3. 2018年5月24日. CR. URL: https://www.w3.org/TR/css-writing-modes-3/
[CSS3BG]
Bert Bos; Elika Etemad; Brad Kemper. CSS Backgrounds and Borders Module Level 3. 2017年10月17日. CR. URL: https://www.w3.org/TR/css-backgrounds-3/
[CSS3COL]
Florian Rivoal; Rachel Andrew. CSS Multi-column Layout Module Level 1. 2018年5月28日. WD. URL: https://www.w3.org/TR/css-multicol-1/
[CSS3PAGE]
Elika Etemad; Simon Sapin. CSS Paged Media Module Level 3. 2018年10月18日. WD. URL: https://www.w3.org/TR/css-page-3/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. 1997年3月. Best Current Practice. URL: https://tools.ietf.org/html/rfc2119

参考情報

[CSS-FLEXBOX-1]
Tab Atkins Jr.; 他. CSS Flexible Box Layout Module Level 1. 2018年11月19日. CR. URL: https://www.w3.org/TR/css-flexbox-1/
[CSS-GRID-1]
Tab Atkins Jr.; Elika Etemad; Rossen Atanassov. CSS Grid Layout Module Level 1. 2017年12月14日. CR. URL: https://www.w3.org/TR/css-grid-1/
[CSS-POSITION-3]
Rossen Atanassov; Arron Eicholz. CSS Positioned Layout Module Level 3. 2016年5月17日. WD. URL: https://www.w3.org/TR/css-position-3/
[CSS3TEXT]
Elika Etemad; Koji Ishii. CSS Text Module Level 3. 2018年9月20日. WD. URL: https://www.w3.org/TR/css-text-3/

プロパティ索引

名前 初期値 適用対象 継承 パーセンテージ メディア アニメーションタイプ 標準順序 算出値
box-decoration-break slice | clone slice すべての要素 no n/a visual 離散 文法順 指定キーワード
break-after auto | avoid | avoid-page | page | left | right | recto | verso | avoid-column | column | avoid-region | region auto ブロックレベルボックス、グリッドアイテム、フレックスアイテム、テーブル行グループ、テーブル行(本文参照) no n/a visual 離散 文法順 指定キーワード
break-before auto | avoid | avoid-page | page | left | right | recto | verso | avoid-column | column | avoid-region | region auto ブロックレベルボックス、グリッドアイテム、フレックスアイテム、テーブル行グループ、テーブル行(本文参照) no n/a visual 離散 文法順 指定キーワード
break-inside auto | avoid | avoid-page | avoid-column | avoid-region auto インラインレベルボックス、内部ルビボックス、テーブルカラムボックス、テーブルカラムグループボックス、絶対配置ボックスを除くすべての要素 no n/a visual 離散 文法順 指定キーワード
orphans <integer> 2 インラインフォーマッティングコンテキストを確立するブロックコンテナ yes n/a visual 算出値型による 文法順 指定整数値
widows <integer> 2 インラインフォーマッティングコンテキストを確立するブロックコンテナ yes n/a visual 算出値型による 文法順 指定整数値