CSSオーバーフローモジュール レベル5

W3C 初回公開作業草案,

この文書の詳細
このバージョン:
https://www.w3.org/TR/2024/WD-css-overflow-5-20241217/
最新版:
https://www.w3.org/TR/css-overflow-5/
編集者草案:
https://drafts.csswg.org/css-overflow-5/
履歴:
https://www.w3.org/standards/history/css-overflow-5/
フィードバック:
CSSWG課題リポジトリ
仕様内インライン
編集者:
Florian Rivoal (Bloomberg代表)
Elika J. Etemad / fantasai (Apple)
(Google)
この仕様の編集提案:
GitHub エディター

概要

このモジュールは、視覚メディアにおけるスクロール可能なオーバーフロー処理に関するCSSの機能を含みます。 CSS Overflow Module Level 4を基盤とし、 様々なスクロール制御(スクロール進行状況を示すマーカーや、スクロールをトリガーするボタンなど)を生成・関連付ける機能を追加し、 断片化によるオーバーフローの転送の実験的な検討を含む付録を追加しています。

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

この文書の位置付け

このセクションは、公開時点での本書の位置付けについて説明します。 現在のW3C出版物一覧や最新バージョンは W3C技術レポートインデックス https://www.w3.org/TR/ にてご覧いただけます。

この文書はCSS作業部会によって、初回公開作業草案として勧告トラックを用いて公開されました。 初回公開作業草案としての公開は、W3Cおよびそのメンバーによる承認を意味するものではありません。

この文書はドラフトであり、 随時更新、置換、または他の文書により廃止される可能性があります。 本文書を進行中の作業以外として引用することは不適切です。

ご意見・フィードバックは GitHubでIssueを提出(推奨)してください。 タイトルに仕様コード「css-overflow」を含め、次のようにしてください: 「[css-overflow] …コメントの要約…」 すべてのIssueやコメントはアーカイブされています。 または、(アーカイブされます) 公開メーリングリスト www-style@w3.org へ送信も可能です。

この文書は、2023年11月3日版W3Cプロセス文書に準拠しています。

この文書は、W3C特許ポリシーの下で活動するグループによって作成されました。 W3Cは、グループの成果物に関連して行われた特許開示の公開リストを管理しています。 そのページには特許開示の方法も記載されています。 個人が特許について実際に知っていて、 必須クレームが含まれていると信じる場合は、W3C特許ポリシー第6節に従い、情報開示しなければなりません。

1. はじめに

この仕様は [CSS-OVERFLOW-4] を拡張します。 現時点では差分仕様であり、 新しい機能のみをいくつか定義しています。 オーバーフローに関連するその他の機能については [CSS-OVERFLOW-4] を参照してください。

スクロールナビゲーション制御

このセクションでは、スクローラー内の要素に スクロールマーカー を関連付ける機能 (または ::scroll-marker 疑似要素として自動生成し、 ユーザーの自動動作やアクセシブルラベルを付与)の定義を行います。 これらは、関連する要素へスクロールしたり、 :target-current 疑似クラスを通じて スクロール位置の進行状況を反映したりできます。

また、::scroll-button() 疑似要素も定義されており、 これをアクティブ化することで、対応するスクローラーが指定した方向に「ページ」単位でスクロールします。

オーバーフローの転送

このセクションでは、オーバーフローを新たに生成された 断片化コンテナ に転送して処理する 非常に実験的かつ探索的な新モデルを定義します。

2. オーバーフローの概念と用語

Level 3の内容は最終化時にコピーすること。

2.1. スクロールオーバーフロー

スクロールオーバーフローの概念に、以下が追加されます:

すべての スクロールコンテナ現在のスクロールターゲット を保持します。 初期値は null であり、 ユーザーによるその スクロールコンテナ でのスクロール操作、 またはターゲットのないスクリプトによる操作、 あるいはターゲットが文書から削除された場合には null にリセットされます。 スクロールコンテナ でターゲットElementやPseudoElementを指定してスクロール操作を行った場合、 現在のスクロールターゲット がそのElementまたはPseudoElementに設定されます。

現在のスクロールターゲットの設定は ターゲットを表示範囲にスクロール する方法で定義されるべきです。

現在のスクロールターゲットを スクロールアンカー優先候補 として利用すること。

3. スクロールナビゲーション制御

3.1. スクロールマーカー

スクロールマーカー とは、 スクロールターゲット を持つ要素または疑似要素です。 要素または疑似要素の スクロールターゲット は、 Element であり、スクロールマーカー により示されます。 どの要素が スクロールマーカー となるか、 その スクロールターゲット が何かは、ホスト言語定義です。 HTML <a> 要素SVG <a> 要素スクロールマーカー であり、 その スクロールターゲット示された文書部分 です。 これらのナビゲーションリンクは現在でも作成可能ですが、 ユーザーに対して現在表示中のコンテンツに関するフィードバックがほとんどなく、 インタラクションモデルは多くの最新アクセシブルUIコンポーネントの期待と一致しません。

この仕様では、スクロールマーカー のグループ化機構と、 ::scroll-marker 疑似要素の自動生成機構を追加します。 各グループ内で、アクティブなマーカーが現在のスクロール位置を反映し、 ユーザーにどのセクションにいるかを示すスタイルを適用できます。

ユースケースには、目次リンク、カルーセルページのマーカー、スクロール可能なタブパネルなどが含まれます。

これらの例を表現する画像を追加すること。

3.1.1. スクロールマーカーのグループ化

focusgroup 属性を持つ要素は、 スクロールマーカーグループコンテナ を定義し、 その スクロールマーカーグループ に 最も近い祖先 スクロールマーカーグループコンテナ を持つ スクロールマーカー 要素すべてが含まれます。

スクロール進行状況追跡のためのマーカーグループ化は、focusgroupのフォーカス挙動へのオプトインと分離すべきです。

::scroll-marker-group 疑似要素は、 その中の ::scroll-marker 疑似要素の スクロールマーカーグループ を形成する スクロールマーカーグループコンテナ です。

3.1.2. scroll-marker-group プロパティ

名前: scroll-marker-group
値: none | before | after
初期値: none
適用対象: スクロールコンテナ
継承: no
パーセンテージ: n/a
算出値: 指定値
正規順序: 文法順
アニメーションタイプ: 離散

scroll-marker-group プロパティは、 スクロールコンテナ に '::scroll-marker-group' 疑似要素を生成するか、 その位置をスクロールコンテナに対してどこにするかを指定します。

none
スクロールコンテナ は '::scroll-marker-group' 疑似要素を生成しません。
before
スクロールコンテナ::scroll-marker-group 疑似要素を生成し、 そのボックスは 生成元要素 の直前の兄弟要素となります。
after
スクロールコンテナ::scroll-marker-group 疑似要素を生成し、 そのボックスは 生成元要素 の直後の兄弟要素となります。

3.1.3. ::scroll-marker-group 疑似要素

::scroll-marker-group 完全にスタイル可能な疑似要素 は、 スクロールコンテナ 要素によって生成されます。 この要素の scroll-marker-group プロパティの算出値が none でない場合に生成されます。

::scroll-marker-group は、 生成元要素兄弟要素としてボックスを生成し、 (scroll-marker-group: before の場合は直前に、 scroll-marker-group: after の場合は直後に)配置されます。

スクロールマーカー疑似要素の生成がサイトのレイアウトを壊さないよう、デフォルトUAスタイルシートには次の追加が推奨されます:

/* ::scroll-marker 疑似要素の生成は
 * この疑似要素の外のレイアウトを壊すべきではありません。 */
::scroll-marker-group { contain: size !important; }

scroll-marker-group は暗黙的に単一のフォーカス可能なコンポーネントとして振る舞い、 focusgroup を確立します。

3.1.4. ::scroll-marker 疑似要素

::before::after と同様に、 すべての要素は ::scroll-marker 疑似要素を持つことができ、 これは最も近い祖先 ::scroll-marker-group のグループに集められ、 アクティブ化するとその要素へスクロールします。

最も近い祖先 スクロールコンテナ スクロールコンテナscroll-marker-group プロパティが none でなく、 ::scroll-marker 疑似要素の content の算出値が none でない場合、 疑似要素は、最も近い祖先 スクロールコンテナ::scroll-marker-group 疑似要素の生成ボックスの子としてボックスを生成します。 これらのボックスは、ツリー順生成元要素 に追加されます。

これらの疑似要素の スクロールターゲット生成元要素 です。 これらは tabindex が "-1" の要素として振る舞い、 グループ内で矢印キーによるナビゲーションや、 現在アクティブな場合、または他にアクティブな ::scroll-marker がなくグループの最初のマーカーである場合にタブキーでフォーカス可能となり、 グループに 保証されたタブストップ を提供します。

3.1.5. アクティブなスクロールマーカーの選択::target-current 疑似クラス

スクロールマーカーグループ内では、常に1つだけ「アクティブ」なスクロールマーカーが決定されます。 この「アクティブ」なスクロールマーカー:target-current疑似クラスに一致します。

次のコード例は、現在スクロール中のセクションへのリンクをハイライトする方法を示します:
a:target-current {
  font-weight: bold;
}

スクロール操作は、特定の位置へアニメーションする場合(例:スクロールバーの矢印クリック、矢印キー、"behavior: smooth"なプログラムスクロール)や、 ユーザーの入力を直接追従する場合(例:タッチスクロール、スクロールバーのドラッグ)があります。 いずれの場合も、ユーザーエージェントはスクローラーが到達する「最終スクロール位置」を選択します。これにより、関連するマーカーが即座にアクティブになります。

この「最終スクロール位置」が各スクロールマーカーグループ内のアクティブマーカーを判定するために使われます。 マーカー自体はコンテンツの開始(例:見出し)を示すだけの場合もあるため、アクティブなマーカーは、現在地またはそれ以降のスクロール位置にある最初のマーカーとみなします。

1つ以上のスクロールコンテナがスクロールされる、またはレイアウト変更により最終スクロール位置が変化した際、 ユーザーエージェントは、ターゲットスクロール位置をもとに各スクロールマーカーグループのアクティブマーカーを決定・更新すべきです。

指定したスクロールマーカーgroupのアクティブマーカーを決定するアルゴリズム例:
  1. scrollerを、group内の全スクロールマーカー要素の最も近い共通祖先スクロールコンテナとする。

  2. activeをscrollerとする。

  3. activegroupでターゲットとなるスクロールターゲット要素を含むスクロールコンテナである間:

    1. scrolleractiveとする。

    2. targetsを、最も近い祖先スクロールコンテナscrollerであるスクロールターゲット要素と、scrollerを祖先とするスクロールマーカーグループがターゲットにしている要素群とする。

    3. scrollerが非nullな現在のスクロールターゲットを持つ場合

      activeを、現在のスクロールターゲットから逆順ツリー探索で最初に見つかるtargetsの項目、なければツリー順で最初の項目とする。

      それ以外の場合
      1. primaryを、コンテナのwriting-modeのブロック方向とみなす主要スクロール軸とする。

      2. secondaryを、primaryと直交する軸とする。

      3. positionを、現在のスクロール操作を含む「最終スクロール位置」とする。

      4. primarysecondary両軸について次を行う:

        1. scrollport sizescrolleraxis方向のクライアントサイズとする。

        2. targetsの各targetについて、スクロールインビュー位置を決定し、これをtarget positionとして記録する。

        3. scroll sizeを、スクロール可能オーバーフロー領域の長さとする。

        4. scroll rangescroll size - scrollport sizeとする。

        5. scroll rangeが0より大きい場合、到達不能なターゲット位置を分布調整:

          1. distribute rangemin(1/8 * scrollport size, scroll range / 2)とする。

          2. before targetsを、target positiondistribute range未満のtargetsとする。

          3. minimum positionbefore targetsの最小target positionとする。

          4. before targetstarget position(target position - minimum position) / (distribute range - minimum position) * distribute rangeで更新。

          5. after targetsを、target positionscroll range - distribute range超のtargetsとする。

          6. maximum positionafter targetsの最大target positionとする。

          7. after targetstarget position(target position - (scroll range - distribute range)) / (maximum position - (scroll range - distribute range)) * distribute range + (scroll range - distribute range)で更新。

        6. selected positionを、axis方向でtarget positionposition以下かつ最大のもの、 または最も近い小さいtarget positionposition - scrollport size / 2未満で、 そのtarget positionposition + scrollport size / 2未満であるものとする。

        7. 該当位置がない場合

          selected positionを最初のものに設定。

        8. activeを、selected positionに一致するtargets全てとする。

      5. activeが複数候補の場合は、最初の項目を採用する。

  4. selected markeractiveに関連付けられたスクロールマーカーとする。 もし複数のスクロールマーカー要素がactiveに関連付けられている場合、 selected markerをツリー順で最も早いものに設定する。

  5. selected markerを返す。

ユーザーエージェントが新しいマーカーをactive markerと決定した場合、スクロールマーカーグループgroupについて次を実行する:
  1. active markerのアクティブ状態をtrueに設定する。

  2. active markergroup内で最後にフォーカスされた要素であった場合

    active markerにフォーカスする。

  3. group最後にフォーカスされた要素active markerに更新する。

  4. group内の他の全スクロールマーカー要素のアクティブ状態をfalseに設定する。

3.1.6. アクティベーションの挙動

スクロールマーカーが非nullなスクロールターゲットを持ち、明示的な呼び出しまたは矢印キーによるフォーカスでアクティブ化された場合:
  1. elementを、このコントロールのスクロールターゲットとする。

  2. blockを"start"とする。

  3. inlineを"start"とする。

  4. elementをスクロールインビューする(block, inline指定)。

  5. 呼び出しによってアクティベーションされた場合
    1. ハイパーリンクをたどりURLを更新するが、マーカー要素へのフォーカスは維持する。

    注: ユーザーがタブで移動した場合、フォーカス挙動により関連コンテンツへタブ移動されます。

3.1.7. フォーカスの挙動

スクロールマーカーがアクティブ化された場合、 次のtabindex順フォーカスナビゲーションは、スクロールターゲットがフォーカス可能ならそれにフォーカスし、 そうでなければスクロールターゲットから次のフォーカス可能要素を探してフォーカスします。

3.2. スクロールボタン

::scroll-button( <scroll-button-direction> ) 疑似要素は、 算出されたcontent値がnone以外の場合に スクロールコンテナ上で生成されます。 これらは自身の生成元要素の直前の兄弟要素としてボックスを生成し、 内容はcontentで指定された通りとなります。 ::scroll-marker-group疑似要素 (scroll-marker-group: before使用時)の後に存在します。

最大4つの::scroll-button()疑似要素が スクロールコンテナ上に存在でき、 それぞれがフロー相対方向に対応します。 生成元要素writing-mode に基づき、順番は block-startinline-startblock-endinline-endです。 ::scroll-button()疑似要素はデフォルトでフォーカス可能かつアクティブ化可能であり、 アクティベーション時はその生成元要素を対応する方向に「1ページ」スクロールします。 (PgUp/PgDnキーの動作に類似。通常はscrollportサイズの約85%のスクロールです。) これらのキーと同様に、スクロールには意図された方向と終了位置があります。

[CSSOM-VIEW-1]に「ページ単位スクロール」アルゴリズムが追加予定です。 追加された時点で本仕様から参照可能になります。 10914号の解決案参照

ボタンの順序はこれが最適か? CSSの論理方向の通常順には合致しますが、手動で作成される類似ボタンは 縦横でグループ化(block-start/block-end→inline-start/inline-end)や 縦を横の「周り」に配置(block-start/inline-start/inline-end/block-end)することも多いです。

4つの::scroll-button()疑似要素は セレクタの引数で個別に選択できます。 <scroll-button-direction>の値は次の通りです:

up
down
left
right

物理的な方向に対応する::scroll-button()を選択します。

block-start
block-end
inline-start
inline-end

指定された::scroll-button()疑似要素を選択します。

prev

block-start」または「inline-start」の ::scroll-button() のうち、originating element において「スクロール可能なページ数」が多い軸を選択します。 つまり、originating elementscrollable overflow heightscrollport の高さで割った値、 または幅についても同様です。

両方の寸法が同じ場合は、block-start::scroll-button() を選択します。

例えば、originating element の幅が800px、高さが500pxであり、 scrollable overflow area の幅が1200px、高さが1000pxだったとします。 水平方向のスクロールは1.5「ページ」(1200/800)に相当し、 垂直方向のスクロールは2「ページ」(1000/500)に相当します。 したがって(要素が英語の場合)、 ::scroll-button(prev) セレクターは block-start ボタンを選択します。

next

prev と同一ですが、 代わりに block-end または inline-end::scroll-button() を選択します。

複数ボタンを同じスタイルにしやすいような キーワード追加(all/horizontal/vertical/block/inlineなど)が必要か検討。

::scroll-button()完全スタイル可能な疑似要素です:適用プロパティに制限はありません。

:disabled疑似クラスは ::scroll-button()にも適用可能です。 これは、そのボタンの生成元要素が関連方向にスクロールできない場合に一致します。

UAスタイルシートで ::scroll-button()button 要素と同じスタイル(disabled含む)にすべき。

::scroll-button()は ボタンの完全なUAスタイル(appearance:button)を使うべきか?それとも非ネイティブ(appearance:none)か? 前者の場合、appearanceとの相互作用定義が必要。

3.3. フォーカスナビゲーション順序

上記の機能は複数のフォーカス可能疑似要素を生成します。 これら疑似要素は要素ツリー内で位置が定義されていますが、 フォーカスナビゲーション(タブ順)として最適な位置ではありません。

代わりに、 スクロールコンテナと 本章で定義された各種疑似要素間のフォーカスナビゲーション順序は次の通りです:

  1. ::scroll-marker-group疑似要素 (スクロールコンテナscroll-marker-group: beforeの場合)

    注: ::scroll-marker疑似要素は スクロールコンテナ子孫として生成され、 この::scroll-marker-group下に再配置され、 「フォーカスグループ」としてまとめてナビゲートされます。

  2. ::scroll-button()疑似要素(定義順)

  3. スクロールコンテナ自身とその内容(通常のフォーカス順)

  4. ::scroll-marker-group疑似要素 (スクロールコンテナscroll-marker-group: afterの場合)

付録A: オーバーフローの転送

本セクションは非常に実験的です。 continue プロパティの拡張で追加ユースケースを解決する試みを記述していますが、 現時点で合意はありません。 議論促進のため提示していますが、実験的でない実装は推奨されません。

CSS Level 1 [CSS1] では、指定サイズの要素に内容が収まりきらない場合、 それは一般的に著者のミスでした。 内容は要素外に拡張され、他の要素と重なることがありました。

CSS Level 2 [CSS2]では overflow プロパティが導入され、 オーバーフローをスクロールで処理できるようになりました(著者ミスではなくなる)。 また、クリッピングで処理する指定も可能となり、 内容を表示しない意図の場合に有用です。 これはCSS Overflow Module Level 3 [CSS-OVERFLOW-3]でさらに洗練されました。

しかし、スクロールは多量の内容を提示する唯一の方法ではなく、 最適とも限りません。 コーデックスが巻物に代わったのも、その利点ゆえです。

本仕様は、ページの要素がオーバーフローをスクロールでなく ページ分割で処理するよう指定する仕組みを導入します。

さらに本仕様はオーバーフローの概念を拡張します。 著者が一つの領域だけを指定せず、 複数の断片(各自の寸法とスタイル)を指定でき、 要素内容が必要なだけ断片を使って流れる(オーバーフローしない)ようにできます。

いずれの場合も、実装はブロック進行方向で内容を分割する必要があります。 その方法はCSS Fragmentation Module [CSS-BREAK-3]で説明されています。

オーバーフローのチャンネリング:continueプロパティ

continueプロパティは、 要素内に収まりきらない内容を断片化([CSS-BREAK-3]の意味)し、 残り内容の継続先を指定できます。

このプロパティは伝統的なページ分割を説明し、さらに拡張します。

名前: continue
新しい値: overflow | paginate | fragments
初期値: auto
適用対象: ブロックコンテナ[CSS2]、flexコンテナ[CSS3-FLEXBOX]、gridコンテナ[CSS3-GRID-LAYOUT]
継承: no
パーセンテージ: N/A
算出値: 下記参照
アニメーションタイプ: 離散

このプロパティと値の命名は暫定です。 当初は "fragmentation: auto | none | break | clone | page" として提案されました(https://lists.w3.org/Archives/Public/www-style/2015Jan/0357.html)、 まだどちらが良いか広く合意されていません。

このプロパティはregion-fragmentの一般化・置換を意図しています。 本仕様で十分安定したら、region-fragmentはregions仕様から削除されるべきです。

注: continue: fragmentsは、仕様初期の"overflow:fragments"を置換します。 continue: paginateは "overflow: paged-x | paged-y | paged-x-controls | paged-y-controls"を置換します。

auto
autoは、 CSS Region(リージョンチェーンの最後以外)でのみ算出値になりえます。 収まりきらない内容は次のリージョンへ送られます。

その他の場合、autoは他の値に算出されます。

CSS Overflow 4 § 5.3 Fragmentation of Overflow: the continue propertyの定義とは異なり、指定値が算出値となります。どちらのモデルが良いか?

overflow
収まりきらない内容はoverflowプロパティに従ってオーバーフローします。
paginate
収まりきらない内容はページ分割されます。 要素内でページ送りビューを作成し、'overflow: scroll'によるスクロールビューに似ています。

ページ分割オーバーフロー参照

注: 印刷は事実上ルートで"continue: paginate"です。

fragments
収まりきらない内容は要素自身を複製し、配置を続行します。

断片化オーバーフロー参照。

指定要素や疑似要素のcontinueの算出値は次の通りです:

  1. layout containmentを持つ要素・疑似要素([CSS-CONTAIN-1]参照)で、 指定値がautoまたはfragmentsの場合、 算出値はoverflowです。

  2. それ以外で指定値がautoの場合

    1. CSS Region(リージョンチェーンの最後以外)なら算出値はauto

    2. ページ上なら算出値はpaginate

    3. fragment boxなら算出値はfragments

    4. それ以外は算出値はoverflow

  3. 指定値がfragmentsの場合

    1. ページ上なら算出値はpaginate

    2. それ以外は算出値は指定値と同じ

  4. その他は算出値は指定値と同じ

multicolのカラムを選択できる疑似要素追加時はauto算出値をautoにするか、 新値を導入してautoがそれに算出されるようにする必要があるかも(他要素での算出値は?)。

注: このプロパティに至る議論は overflow/overflow-x/overflow-y/overflow-styleの議論fragmentationプロパティの提案を参照。

ページ分割オーバーフロー

このセクションでは、paginate値のcontinueプロパティの意味を導入・定義します。

このセクションは執筆中です

ページは@page規則でスタイル可能であるべきです。ネストしたページの場合はどうなる?

従来のページ分割(例:印刷時)は、autoの算出値のマジックで表現すべきか、 それともUAスタイルシートに次を挿入することで実現すべきか:
@media (overflow-block: paged), (overflow-block: optional-paged) {
  :root {
    continue: paginate;
  }
}

従来のページ分割(印刷時など)は :rootがページボックス内に含まれていることを仮定していますが、 ページボックスが:rootの子として疑似要素になるのではなく、 fragment boxのような何かで回避できるか? それとも:root内にページボックス内にfragment box(:rootの複製)を置くべき?

ページボックスモデルが通常のCSSボックスの子の場合、その振る舞いは?

[CSS3GCPM]の初期案やOperaの実装では paginateの代わりに "paged-x | paged-y | paged-x-controls | paged-y-controls"の4値を使っていました。 このプロパティもこれらの値を含むべきか、あるいは別プロパティで扱うべきか? (例:"pagination-layout: auto | horizontal | vertical", "pagination-controls: auto | none")

一度にNページを表示する能力は? "pagination-layout: horizontal 2;"のような値で指定できる?

Brad Kemperがページ分割と 断片オーバーフローを組み合わせるモデル(複数ページ表示対応)を提案しています。https://lists.w3.org/Archives/Public/www-style/2015Mar/0241.html

ページ分割オーバーフローの現実装は continueプロパティではなく、 [CSS3GCPM]ドラフトや [CSS3-MARQUEE]案で提案された overflow/overflow-x/overflow-yプロパティを使っています。

断片化オーバーフロー

このセクションではfragments値のcontinueプロパティの意味を導入・定義します。

要素のcontinueの算出値がfragmentsの場合、 実装はその要素のためにfragment boxの列を生成しなければなりません。 (continue: fragmentsを持つ要素が1つだけfragment boxを生成することも可能です。 ただし、要素の算出continuefragmentsでない場合、 そのボックスはfragment boxではありません。) すべてのfragment boxは断片化コンテナであり、 その断片化コンテナが断片化を引き起こすオーバーフローがある場合、 さらに別のfragment boxが前のものの次の兄弟として生成されます。 もしくは要素の次の兄弟として扱うべき?他のボックスレベル修正との相互作用を明確にする必要があります。 さらに、fragment box[css-multicol-1]で定義される マルチカラムボックスの場合(multi-column containerの定義)overflow columns [css-multicol-1]が作られるはずの内容は 代わりに追加のfragment boxへ流れます。 ただし、fragment box自体も外部の断片化コンテキスト(ページ・カラム・他のfragment boxなど)で分割されることがあり、 その場合は複数のfragment boxではなく、1つのfragment boxの複数断片となります。 (これはfragment boxがインデックスでスタイル指定可能なため重要です。 ページをまたいでfragment boxが分割されても、インデックスと内容の対応が崩れないようにする設計です。) 外部断片化コンテキストへの強制ブレーク時はfragment boxの新断片か新fragment boxか? ここでfragment box以外の用語にした方が混乱が減る?

他種類の断片化コンテキスト内で分割された要素断片をスタイルしたい場合は? これらのルールにより::nth-fragment()はその用途に使えないが、 名前自体はその用途に最も合理的に見える。

<!DOCTYPE HTML>
<title>内容を
  同じサイズのカードに分割</title>
<style>
  .in-cards {
    continue: fragments;

    width: 13em;
    height: 8em;

    padding: 4px;
    border: medium solid blue;
    margin: 6px;

    font: medium/1.3 Times New
      Roman, Times, serif;
  }
</style>
<div class="in-cards">
  この例では、div内のテキストが
  一連のカードに分割されます。
  これらのカードはすべて同じスタイルです。
  内容がカードをオーバーフローするほど十分にある場合、
  さらにカードが生成されます。2つめのカードは
  まさに最初のカードの次の兄弟として生成されます。
</div>
この例では、div内の
テキストが一連のカードに
分割されます。これらのカードは
すべて同じスタイルです。内容が
カードをオーバーフローするほど
十分にある場合、さらにカードが
生成されます。2つめのカードは
まさに最初のカードの次の兄弟
として生成されます。
著者は要素の冒頭の数行のみを他と異なるスタイルにしたい場合、 それらを別断片に分けてスタイルします。 ただし、その行が占める正確な高さを予測して最初の断片に制限するのは困難なため、 max-linesプロパティを使う方が便利です。 これにより、指定した行数後に断片が強制的に分割されます。 この分割は、要素またはその子孫に含まれる行数で判定されます(同じブロック整形コンテキスト内に限る)。
<!DOCTYPE HTML>
<style>
  .article {
    continue: fragments;
  }
  .article::first-letter {
    font-size: 2em;
    line-height: 0.9;
  }
  .article::nth-fragment(1) {
    font-size: 1.5em;
    max-lines: 3;
  }
  .article::nth-fragment(2) {
    column-count: 2;
  }
</style>
<div class="article">
  ...
</div>
max-linesプロパティを使うことで
記事冒頭の数行だけ大きなフォントに
できます。max-linesがない場合
著者は
heightプロパティを使う必要が
あり、誤差があると
ほんの少しの隙間ができてしまう
可能性があります(何行分の
高さになるか正確に予測しづらい)
特にどのテキストが
入るか分からない場合や
フォント指定や
プラットフォームごとの
レンダリングの違いがある場合
は困難です。

continue: fragmentsは少なくとも一部のtable部品、 そして他の要素にも適用されないことを指定すべき。どれに適用しないか明確にする必要がある。

この仕様は どの種類の断片化コンテキストが作られるか明示すべき。 どのbreak-*プロパティ値が このコンテキスト内で分割を引き起こすか分かるようにする。 おそらくbreak-*: regionが適用されるべき。

この仕様は レイアウトが断片の本来的サイズによって利用可能空間を変える場合(例:[CSS3-GRID-LAYOUT])の処理モデルが必要。 [CSS-REGIONS-1]で既に処理モデル案があり、 その内容や編集者は本仕様にも参考になるはず。

断片のスタイリング

::nth-fragment() 疑似要素

::nth-fragment()疑似要素は、 要素によって生成されたfragment boxの一部を記述するための疑似要素です。 この疑似要素の引数は[SELECT]で定義される :nth-child()疑似クラスの引数と同じ構文を取り、意味も同じですが 番号は兄弟でなくその要素が生成したfragment boxを基準に数えます。

注:断片を最後から数えて指定するセレクタは意図的に提供されていません。 そのようなセレクタは断片数の決定に影響を与えるためです。

将来の議論次第で、 ::nth-fragment(an+b)構文が ::fragment:nth(an+b)構文に置き換わる可能性があります。

断片のスタイル

これはcontinue:fragmentsのみに適用すべきか、continue:paginateにも適用すべきか? (適用するなら、continue:paginateへのより厳しいプロパティ制限が必要になる。)

::nth-fragment()疑似要素規則がない場合、 各fragment boxの算出スタイルは そのfragment boxが生成された要素の算出スタイルとなります。 ただし、fragment boxのスタイルは、 セレクタの主部::nth-fragment()疑似要素を含む規則にも影響されます。 その断片boxの1始まり番号が::nth-fragment()疑似要素と一致し、 セレクタ(::nth-fragment()疑似要素除く)が断片生成要素と一致する場合です。

fragment boxのスタイル決定時、 断片疑似要素に一致する規則と要素自体に一致する規則がカスケードされ、 断片疑似要素は疑似クラス並の特異性を加算します。 これもカスケーディングモジュールで明記必要?

<!DOCTYPE HTML>
<style>
  .bouncy-columns {
    continue: fragments;
    width: 6em;
    height: 10em;
    float: left;
    margin: 1em;
    font: medium/1.25 Times New
      Roman, Times, serif;
  }
  .bouncy-columns::nth-fragment(1) {
    background: aqua; color: black;
    transform: rotate(-3deg);
  }
  .bouncy-columns::nth-fragment(2) {
    background: yellow; color: black;
    transform: rotate(3deg);
  }
</style>
<div class="bouncy-columns">
  ...
</div>
この例ではdiv内の
テキストが一連のカラムに
分割されます。著者は
2カラムになることを
想定していたかもしれません。
もし3カラムになるほど
内容が多くても、3つめのカラムも
生成されます。ただし
著者が
スタイル指定していなければ、
断片専用のスタイルは
ありません。

::nth-fragment()疑似要素にcontinueプロパティでスタイル指定すると効果があります。 fragment boxの算出値が continuefragments以外になった場合、そのfragment boxは最後の断片です。 ただし、最初の断片へのoverrideは、そのfragment boxが存在しないことにはなりません。 fragment boxの有無は要素のoverflow算出値で決まります。

::nth-fragment()疑似要素にcontentプロパティでスタイル指定しても効果はありません。 断片boxのcontent算出値は 要素のcontent算出値と同じです。

display: nonefragment boxに指定すると そのインデックスのfragment boxは生成されません。 ただし、後続断片boxの::nth-fragment()疑似要素一致判定のための インデックスとしては生成されるものとして数えます。 ただし生成されないため内容は含みません。

他のdisplay値や positionfloatを指定することは許されますが、 内部display型は変更できません。 (continueは ブロック・flex・gridコンテナにのみ適用されます。) この挙動の詳細仕様が必要

他の疑似要素同様、疑似要素は対応する要素内に属するモデルに合わせて、 ::nth-fragment()疑似要素宣言は 疑似要素なし規則の宣言を上書きします。 優先順位は通常のカスケード順([CSS2]参照)で決定されます。

::nth-fragment()疑似要素へのスタイル指定は fragment box内の内容への継承に影響します。 つまり、fragment box内の内容は 要素自身でなく疑似要素スタイル(fragment boxスタイル)から継承されます。 そのため、断片box間で分割された要素はそれぞれ異なるスタイルになることがあります。

この継承ルールにより、 inherit::first-letterなど 直接指定できないプロパティも間接指定できてしまうが、 断片内スタイルの制限は継承にも適用すべき。

<!DOCTYPE HTML>
<style>
  .article {
    continue: fragments;
  }
  .article::nth-fragment(1) {
    font-size: 1.5em;
    margin-bottom: 1em;
    height: 4em;
  }
  .article::nth-fragment(2) {
    margin-left: 5em;
    margin-right: 2em;
  }
</style>
<div class="article">
  <code>font-size</code> プロパティ...
</div>
font-sizeプロパティが
断片に指定されると
断片内の子孫へ継承されます。
このため断片で継承プロパティを
安全に使えるようになります。
この例のように。

断片内のスタイリング

これはcontinue:fragmentsのみに適用すべきか、continue:paginateにも適用すべきか?

::nth-fragment()疑似要素は fragment box内の内容のスタイルにも利用できます。 ::first-line::first-letter疑似要素とは異なり、 ::nth-fragment()疑似要素は セレクタの主部以外の部分にも付与可能です。 特に、主部の祖先にも一致させることができます。 ただし、そのようなセレクタ規則で適用されるCSSプロパティは ::first-letter疑似要素に適用できるプロパティに限ります。

より厳密には、 セレクタの主部以外の部分に::nth-fragment()疑似要素が付与された場合、 その規則の宣言は次の場合に断片(またはその疑似要素)へ適用されます:

  1. 宣言が::first-letter疑似要素に適用できるプロパティであること。

  2. 宣言が、もしその::nth-fragment()疑似要素を除去した場合に その断片(またはその疑似要素)に適用されるものであり、 各単純セレクタ列と一致する要素との関係が明確に対応付けられていること。

  3. 除去された各::nth-fragment()疑似要素について、 その断片は、疑似要素が付与されていたセレクタに対応する要素のfragment box内に存在し、 そのインデックスが疑似要素と一致すること。

<!DOCTYPE HTML>
<style>
  .dark-columns {
    continue: fragments;
    width: 6em;
    height: 10em;
    float: left;
    margin-right: 1em;
    font: medium/1.25 Times New
      Roman, Times, serif;
  }
  .dark-columns::nth-fragment(1) {
    background: aqua; color: black;
  }
  .dark-columns::nth-fragment(1) :link {
    color: blue;
  }
  .dark-columns::nth-fragment(1) :visited {
    color: purple;
  }
  .dark-columns::nth-fragment(2) {
    background: navy; color: white;
  }
  .dark-columns::nth-fragment(2) :link {
    color: aqua;
  }
  .dark-columns::nth-fragment(2) :visited {
    color: fuchsia;
  }
</style>
<div class="dark-columns">
  ...
</div>
この
では、
テキストは
明るい色の
断片から
暗い色の
断片へと
流れます。
そのため
ハイパーリンク
スタイルも
断片ごとに
変えたいのです。

付録C: プライバシーに関する考慮事項

この仕様は新たなプライバシーに関する考慮事項を導入しません。

付録D: セキュリティに関する考慮事項

この仕様は新たなセキュリティに関する考慮事項を導入しません。

レベル4からの変更点

未定

謝辞

特に、Rossen Atanassov、Bert Bos、Tantek Çelik、John Daggett、fantasai、Daniel Glazman、Vincent Hardy、Håkon Wium Lie、Peter Linss、Robert O’Callahan、Florian Rivoal、Alan Stearns、Steve Zilles、そしてwww-styleコミュニティ全体からのフィードバックに感謝します。

適合性

文書の慣例

適合要件は記述的な主張と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レンダラーは、サポートのない構文要素(at規則、プロパティ、値、キーワードなど)を無効として適切に無視)扱わなければなりません。 特に、UAはサポートされていない値のみを選択的に無視し、サポートされる値だけを有効にすることはしてはならない。 マルチ値プロパティ宣言でいずれかの値が無効(未サポート)なら、CSSの規定により宣言全体が無視されます。

不安定および独自機能の実装

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

非実験的実装

仕様がCandidate Recommendation段階に達したら、 非実験的な実装が可能となり、実装者は仕様通りに正しく実装できるCRレベル機能はプレフィックスなしで提供すべきです。

CSS実装の相互運用性維持のため、CSSWGは非実験的CSSレンダラーが 仕様通りに正しく実装できた機能は、リリース前にW3Cへ実装報告(および必要ならそのテストケース)を提出するよう求めます。 W3Cに提出されたテストケースはCSSWGによるレビュー・修正の対象となります。

テストケースや実装報告の提出方法などはCSSWGのWebサイト https://www.w3.org/Style/CSS/Test/ に記載されています。 質問はpublic-css-testsuite@w3.org宛にどうぞ。

索引

本仕様で定義された用語

参照で定義された用語

参考文献

規定参考文献

[CSS-BREAK-3]
Rossen Atanassov; Elika Etemad. CSS Fragmentation Module Level 3(CSS断片化モジュール レベル3)。2018年12月4日。CR。URL: https://www.w3.org/TR/css-break-3/
[CSS-BREAK-4]
Rossen Atanassov; Elika Etemad. CSS Fragmentation Module Level 4(CSS断片化モジュール レベル4)。2018年12月18日。WD。URL: https://www.w3.org/TR/css-break-4/
[CSS-CASCADE-5]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSS Cascading and Inheritance Level 5(CSSカスケードと継承 レベル5)。2022年1月13日。CR。URL: https://www.w3.org/TR/css-cascade-5/
[CSS-CONTAIN-1]
Tab Atkins Jr.; Florian Rivoal. CSS Containment Module Level 1(CSS包含モジュール レベル1)。2024年6月25日。REC。URL: https://www.w3.org/TR/css-contain-1/
[CSS-CONTAIN-2]
Tab Atkins Jr.; Florian Rivoal; Vladimir Levin. CSS Containment Module Level 2(CSS包含モジュール レベル2)。2022年9月17日。WD。URL: https://www.w3.org/TR/css-contain-2/
[CSS-CONTENT-3]
Elika Etemad; Dave Cramer. CSS Generated Content Module Level 3(CSS生成コンテンツモジュール レベル3)。2019年8月2日。WD。URL: https://www.w3.org/TR/css-content-3/
[CSS-DISPLAY-3]
Elika Etemad; Tab Atkins Jr.. CSS Display Module Level 3(CSS表示モジュール レベル3)。2023年3月30日。CR。URL: https://www.w3.org/TR/css-display-3/
[CSS-MULTICOL-1]
Florian Rivoal; Rachel Andrew. CSS Multi-column Layout Module Level 1(CSSマルチカラムレイアウトモジュール レベル1)。2024年5月16日。CR。URL: https://www.w3.org/TR/css-multicol-1/
[CSS-OVERFLOW-3]
Elika Etemad; Florian Rivoal. CSS Overflow Module Level 3(CSSオーバーフローモジュール レベル3)。2023年3月29日。WD。URL: https://www.w3.org/TR/css-overflow-3/
[CSS-OVERFLOW-4]
David Baron; Florian Rivoal; Elika Etemad. CSS Overflow Module Level 4(CSSオーバーフローモジュール レベル4)。2023年3月21日。WD。URL: https://www.w3.org/TR/css-overflow-4/
[CSS-POSITION-3]
Elika Etemad; Tab Atkins Jr.. CSS Positioned Layout Module Level 3(CSS配置レイアウトモジュール レベル3)。2024年8月10日。WD。URL: https://www.w3.org/TR/css-position-3/
[CSS-PSEUDO-4]
Daniel Glazman; Elika Etemad; Alan Stearns. CSS Pseudo-Elements Module Level 4(CSS疑似要素モジュール レベル4)。2022年12月30日。WD。URL: https://www.w3.org/TR/css-pseudo-4/
[CSS-REGIONS-1]
Rossen Atanassov; Alan Stearns. CSS Regions Module Level 1(CSSリージョンモジュール レベル1)。2014年10月9日。WD。URL: https://www.w3.org/TR/css-regions-1/
[CSS-SCROLL-ANCHORING-1]
Tab Atkins Jr.. CSS Scroll Anchoring Module Level 1(CSSスクロールアンカーモジュール レベル1)。2020年11月11日。WD。URL: https://www.w3.org/TR/css-scroll-anchoring-1/
[CSS-SCROLL-SNAP-1]
Matt Rakow; 他. CSS Scroll Snap Module Level 1(CSSスクロールスナップモジュール レベル1)。2021年3月11日。CR。URL: https://www.w3.org/TR/css-scroll-snap-1/
[CSS-UI-4]
Florian Rivoal. CSS Basic User Interface Module Level 4(CSS基本ユーザーインターフェースモジュール レベル4)。2021年3月16日。WD。URL: https://www.w3.org/TR/css-ui-4/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 4(CSS値と単位モジュール レベル4)。2024年3月12日。WD。URL: https://www.w3.org/TR/css-values-4/
[CSS-WRITING-MODES-4]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 4(CSS書字方向モジュール レベル4)。2019年7月30日。CR。URL: https://www.w3.org/TR/css-writing-modes-4/
[CSS2]
Bert Bos; 他. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification(CSSレベル2改訂1仕様書)。2011年6月7日。REC。URL: https://www.w3.org/TR/CSS21/
[CSS22]
Bert Bos. Cascading Style Sheets Level 2 Revision 2 (CSS 2.2) Specification(CSSレベル2改訂2仕様書)。2016年4月12日。WD。URL: https://www.w3.org/TR/CSS22/
[CSS3-FLEXBOX]
Tab Atkins Jr.; 他. CSS Flexible Box Layout Module Level 1(CSSフレキシブルボックスレイアウトモジュール レベル1)。2018年11月19日。CR。URL: https://www.w3.org/TR/css-flexbox-1/
[CSS3-GRID-LAYOUT]
Tab Atkins Jr.; 他. CSS Grid Layout Module Level 1(CSSグリッドレイアウトモジュール レベル1)。2020年12月18日。CR。URL: https://www.w3.org/TR/css-grid-1/
[CSSOM-VIEW-1]
Simon Pieters. CSSOM View Module(CSSOMビュー・モジュール)。2016年3月17日。WD。URL: https://www.w3.org/TR/cssom-view-1/
[DOM]
Anne van Kesteren. DOM Standard(DOM標準)。Living Standard。URL: https://dom.spec.whatwg.org/
[HTML]
Anne van Kesteren; 他. HTML Standard(HTML標準)。Living Standard。URL: https://html.spec.whatwg.org/multipage/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels(RFCで要求レベルを示すためのキーワード)。1997年3月。Best Current Practice。URL: https://datatracker.ietf.org/doc/html/rfc2119
[SELECT]
Tantek Çelik; 他. Selectors Level 3(セレクタ レベル3)。2018年11月6日。REC。URL: https://www.w3.org/TR/selectors-3/
[SELECTORS-4]
Elika Etemad; Tab Atkins Jr.. Selectors Level 4(セレクタ レベル4)。2022年11月11日。WD。URL: https://www.w3.org/TR/selectors-4/
[SVG2]
Amelia Bellamy-Royds; 他. Scalable Vector Graphics (SVG) 2(拡張可能ベクターグラフィックス2)。2018年10月4日。CR。URL: https://www.w3.org/TR/SVG2/

参考情報文献

[CSS-SIZING-3]
Tab Atkins Jr.; Elika Etemad. CSS Box Sizing Module Level 3(CSSボックスサイズモジュール レベル3)。2021年12月17日。WD。URL: https://www.w3.org/TR/css-sizing-3/
[CSS1]
Håkon Wium Lie; Bert Bos. Cascading Style Sheets, level 1(カスケーディングスタイルシート レベル1)。2018年9月13日。REC。URL: https://www.w3.org/TR/CSS1/
[CSS3-MARQUEE]
Bert Bos. CSS Marquee Module Level 3(CSSマルキーモジュール レベル3)。2014年10月14日。NOTE。URL: https://www.w3.org/TR/css3-marquee/
[CSS3GCPM]
Rachel Andrew; Mike Bremford. CSS Generated Content for Paged Media Module(CSSページメディア生成コンテンツモジュール)。2024年1月25日。WD。URL: https://www.w3.org/TR/css-gcpm-3/

プロパティ索引

プロパティ名 初期値 適用対象 継承 パーセンテージ アニメーションタイプ 正規順序 算出値
scroll-marker-group none | before | after none scroll containers no n/a discrete 文法順 指定値

課題索引

最終化時にLevel 3の内容をコピーすること。
現在のスクロールターゲットの設定方法はターゲットを表示範囲にスクロールの中で定義すべき。
現在のスクロールターゲットをスクロールアンカーのアンカー優先候補として利用すること。
これらの例を表す画像を追加すること。
スクロール進行状況追跡のマーカーグループ化はfocusgroupのフォーカス挙動へのオプトインと分離すべき。
[CSSOM-VIEW-1]に「ページ単位スクロール」アルゴリズムが追加される予定。 追加された時点で本仕様から参照可能に。 10914号の解決案参照
ボタンの順序はこれが最適か? CSSの論理方向の通常順には合致するが、手動作成の類似ボタンは 縦横グループ化(block-start/block-end→inline-start/inline-end)や 縦を横の「周り」に配置(block-start/inline-start/inline-end/block-end)することが多い。
複数ボタンを同じスタイルにしやすいようなキーワード追加が必要か? 特にallは有用そうだが、horizontal/vertical/block/inlineも検討対象。
UAスタイルシートで::scroll-button()button 要素と同じスタイル(disabled含む)にすべき。
::scroll-button()は ボタンの完全なUAスタイル(appearance:button)を使うべきか? それとも非ネイティブ(appearance:none)か? 前者の場合、appearanceとの相互作用定義が必要。
本セクションは非常に実験的です。 continueプロパティの拡張で追加ユースケースを解決する試みを記述していますが、 現時点で合意はありません。 議論促進のため提示していますが、実験的でない実装は推奨されません。
このプロパティと値の命名は暫定です。 当初は"fragmentation: auto | none | break | clone | page" として提案されました(https://lists.w3.org/Archives/Public/www-style/2015Jan/0357.html)、 まだどちらが良いか広く合意されていません。
このプロパティはregion-fragmentの一般化・置換を意図しています。 本仕様で十分安定したら、region-fragmentはregions仕様から削除されるべきです。
CSS Overflow 4 § 5.3 Fragmentation of Overflow: the continue propertyの定義とは異なり、指定値が算出値となります。どちらのモデルが良いか?
multicolのカラムを選択できる疑似要素追加時はauto算出値をautoにするか、 新値を導入してautoがそれに算出されるようにする必要があるかも(他要素での算出値は?)。
このセクションは執筆中です
ページは@page規則でスタイル可能であるべきです。ネストしたページの場合はどうなる?
従来のページ分割(例:印刷時)はautoの算出値のマジックで表現すべきか、 それともUAスタイルシートに次を挿入することで実現すべきか:
@media (overflow-block: paged), (overflow-block: optional-paged) {
  :root {
    continue: paginate;
  }
}
従来のページ分割(印刷時など)は:rootがページボックス内に含まれていることを仮定していますが、 ページボックスが:rootの子として疑似要素になるのではなく、 fragment boxのような何かで回避できるか? それとも:root内にページボックス内にfragment box(:rootの複製)を置くべき?
ページボックスモデルが通常のCSSボックスの子の場合、その振る舞いは?
[CSS3GCPM]の初期案やOperaの実装ではpaginateの代わりに "paged-x | paged-y | paged-x-controls | paged-y-controls"の4値を使っていました。 このプロパティもこれらの値を含むべきか、あるいは別プロパティで扱うべきか? (例:"pagination-layout: auto | horizontal | vertical", "pagination-controls: auto | none")
一度にNページを表示する能力は? "pagination-layout: horizontal 2;"のような値で指定できる?
Brad Kemperがページ分割と断片オーバーフローを組み合わせるモデル(複数ページ表示対応)を提案しています。https://lists.w3.org/Archives/Public/www-style/2015Mar/0241.html
ページ分割オーバーフローの現実装はcontinueプロパティではなく、 [CSS3GCPM]ドラフトや [CSS3-MARQUEE]案で提案された overflow/overflow-x/overflow-yプロパティを使っています。
もしくは要素の次の兄弟として扱うべき?他のボックスレベル修正との相互作用を明確にする必要があります。
multi-column containerの定義
外部断片化コンテキストへの強制ブレーク時はfragment boxの新断片か新fragment boxか?
ここでfragment box以外の用語にした方が混乱が減る?
他種類の断片化コンテキスト内で分割された要素断片をスタイルしたい場合は? これらのルールにより::nth-fragment()はその用途に使えないが、 名前自体はその用途に最も合理的に見える。
continue: fragmentsは少なくとも一部のtable部品、 そして他の要素にも適用されないことを指定すべき。どれに適用しないか明確にする必要がある。
この仕様はどの種類の断片化コンテキストが作られるか明示すべき。 どのbreak-*プロパティ値が このコンテキスト内で分割を引き起こすか分かるようにする。 おそらくbreak-*: regionが適用されるべき。
この仕様は、レイアウトが断片の本来的サイズによって利用可能空間を変える場合(例:[CSS3-GRID-LAYOUT])の処理モデルが必要。 [CSS-REGIONS-1]で既に処理モデル案があり、 その内容や編集者は本仕様にも参考になるはず。
将来の議論次第で、::nth-fragment(an+b)構文が ::fragment:nth(an+b)構文に置き換わる可能性があります。
これはcontinue:fragmentsのみに適用すべきか、continue:paginateにも適用すべきか? 適用する場合、continue:paginateへのより厳しいプロパティ制限が必要になる。
これもカスケーディングモジュールで明記必要?
この挙動の詳細仕様が必要
この継承ルールにより、inherit::first-letterなど 直接指定できないプロパティも間接指定できてしまうが、 断片内スタイルの制限は継承にも適用すべき。
これはcontinue:fragmentsのみに適用すべきか、continue:paginateにも適用すべきか?
未定