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

W3C 作業草案

この文書の詳細
このバージョン:
https://www.w3.org/TR/2023/WD-css-overflow-4-20230321/
最新の公開バージョン:
https://www.w3.org/TR/css-overflow-4/
編集者草案:
https://drafts.csswg.org/css-overflow-4/
履歴:
https://www.w3.org/standards/history/css-overflow-4
フィードバック:
CSSWG 課題リポジトリ
仕様内の課題
編集者:
L. David Baron (Mozilla)
Florian Rivoal (Bloombergを代表して)
Elika J. Etemad / fantasai (招聘専門家)
この仕様の編集を提案:
GitHub エディター

概要

このモジュールには、視覚メディアにおけるスクロール可能なオーバーフローの処理に関連する CSS の機能が含まれます。 このモジュールは CSS オーバーフローモジュール レベル 3を基礎として、 line-clamp、その個別指定プロパティ、および標準化前の旧来の構文を定義し、 block-ellipsis プロパティを追加し、 overflow-clip-margin を個別指定プロパティによって拡張します。 附属書には、より実験的な検討として 断片化によるオーバーフローのリダイレクトも含まれています。

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

この文書の位置付け

この節では、公開時点におけるこの文書の位置付けについて説明します。 現在の W3C 公開文書の一覧と この技術報告書の最新の改訂版は、 https://www.w3.org/TR/ にある W3C 技術報告書の索引で確認できます。

この文書は、 CSS ワーキンググループによって、勧告 トラックを使用して作業草案として公開されました。 作業草案としての公開は、 W3C およびその会員による承認を意味するものではありません。

これは草案文書であり、 いつでも更新、置換、 または他の文書によって廃止される可能性があります。 この文書を進行中の作業以外のものとして引用することは不適切です。

フィードバックは、 GitHub に課題を提出する方法(推奨)で送信し、 次のように、タイトルに仕様コード「css-overflow」を含めてください: 「[css-overflow] …コメントの概要…」。 すべての課題とコメントはアーカイブされます。 または、(アーカイブされる)公開メーリングリスト www-style@w3.org にフィードバックを送信することもできます。

この文書には、2021年11月2日付 W3C プロセス文書が適用されます。

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

1. はじめに

この仕様は、[CSS-OVERFLOW-3]を拡張します。 この仕様には、次の主要な節が含まれています:

オーバーフローのスクロールおよびクリッピング制御

この節では、レベル 3 のoverflow-* プロパティに対する比較的単純な拡張を定義します。

自動省略記号

この節では、レベル 3 の*-ellipsis プロパティに対する実験的な拡張をいくつか定義します。

オーバーフローのリダイレクト

この節では、新たに生成された断片化コンテナーへオーバーフローをリダイレクトすることによって処理するための、 非常に実験的かつ探索的な新しいモデルを定義します。

注: 執筆時点では、[CSS-OVERFLOW-3] はまだ完全には 最終化されていません。 意図しない相違や保守上の負担を避けるため、 この仕様は css-overflow レベル 3 に対する差分仕様として記述されています。 レベル 3 の仕様が最終化された時点で、 その内容はこの仕様に統合され、 その後、この仕様がレベル 3 の仕様を置き換えます。 それまでは、この仕様にはレベル 3 に対する追加および拡張のみが含まれます。

1.1. 値の定義

この仕様は、[CSS2]CSS プロパティ 定義規則に従い、[CSS-VALUES-3]値定義構文を使用します。 この仕様で定義されていない値型は、CSS 値および単位 [CSS-VALUES-3] で定義されています。 他の CSS モジュールと組み合わせることで、これらの値型の定義が拡張される場合があります。

各定義に列挙されているプロパティ固有の値に加えて、 この仕様で定義されるすべてのプロパティは、 プロパティ値として CSS 全域キーワードも受け入れます。 読みやすさのため、これらは明示的には繰り返し記載されていません。

1.2. モジュール間の相互作用

このモジュールは、[CSS-OVERFLOW-3]で定義されている機能を拡張します。

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

最終化された時点で、レベル 3 の内容をコピーします。

3. オーバーフローのスクロールとクリッピング

最終化された時点で、レベル 3 の内容をコピーします。

3.1. オーバーフローの管理: overflow-xoverflow-y、および overflow プロパティ

このレベルでは、overflow-x および overflow-y プロパティ (および overflow 一括指定プロパティ)を 置換要素にも適用されるよう拡張します。

置換要素では、 visible 以外のすべての算出値の使用値は、clip です。 ホスト言語は、このような要素に clip の既定値を適用し、 その overflow-clip-margincontent-box に設定するUA スタイル シート規則を定義するべきです。

注: 置換 要素に対する overflow の適用は、 画像がその有効なレイアウトボックスの外側に効果を描画できるようにするために追加されました。 推奨される UA スタイルシート規則は、その元の動作を既定で実現するためのものです。 課題 7059および課題 7144の議論を参照してください。 これは CSS2.1 からの変更であり、リスクがあります。

置換 要素に対する overflow の適用については、現在も検討中です。[課題 #7144]

3.2. クリッピング境界の拡張: overflow-clip-margin-* プロパティ

名前: overflow-clip-margin-top, overflow-clip-margin-right, overflow-clip-margin-bottom, overflow-clip-margin-left, overflow-clip-margin-block-start, overflow-clip-margin-inline-start, overflow-clip-margin-block-end, overflow-clip-margin-inline-end
値: <visual-box> || <length [0,∞]>
初期値: 0px
適用対象: overflow が適用されるボックス
継承: しない
パーセント値: 個々のプロパティを参照
算出値: 算出された <length> および <visual-box> キーワード
アニメーション型: <visual-box> の値が一致する場合は算出値ごと、それ以外の場合は離散的
正規順序: 文法に従う
論理プロパティ グループ: overflow-clip-margin
名前: overflow-clip-margin, overflow-clip-margin-inline, overflow-clip-margin-block
値: <visual-box> || <length [0,∞]>
初期値: 0px
適用対象: overflow が適用されるボックス
継承: しない
パーセント値: 個々のプロパティを参照
算出値: 個々のプロパティを参照
アニメーション型: 個々のプロパティを参照
正規順序: 文法に従う

これらのプロパティおよびその一括指定プロパティは、 ボックスのオーバーフロークリップ 辺を定義します。 すなわち、ボックスの境界の外側へ正確にどれだけの距離まで ボックスの内容を描画できるかを定めます。 その後、 効果(上記の overflow: clip など) によってクリップされます。 これらの効果は、ボックスのオーバーフロークリップ辺までクリップするものとして定義されています。 一括指定プロパティ/個別指定プロパティの関係は、 margin と同様ですが、 一括指定プロパティの構文には制限があることに注意してください。

値は次のように定義されます:

<visual-box>

指定したオフセットがゼロの場合に、オーバーフロークリップ辺の起点として使用するボックス辺を指定します。

省略した場合、 非置換要素では padding-box置換 要素では content-box が既定値になります。

置換要素に対する overflow-clip-margin の適用については、現在も検討中です。[課題 #7144]

<length [0,∞]>

指定したオフセットは、 指定したボックス辺からオーバーフロークリップ辺を どれだけ拡張するかを決定します。 負の値は無効です。 省略した場合の既定値はゼロです。

オーバーフロークリップ 辺の角は、 ボックスのボーダー辺からの累積オフセットと同じ拡張半径を持つ外側の ボックスシャドウとまったく同じ形状になります。 CSS 背景および境界 3 § 4.2 角の形状およびCSS 背景および境界 3 § 6.1.1 シャドウの形状、拡張、およびくり抜きを参照してください。 特に、ボーダー辺を越える外側への拡張に関する式に注意してください。

注: このプロパティは、 overflow: hidden または overflow: scroll を持つボックスには効果がありません。 これらはオーバーフロークリップ辺を使用するものとして定義されていません。

4. 自動省略記号

4.1. インラインオーバーフローの省略記号: text-overflow プロパティ

名前: text-overflow
値: [ clip | ellipsis | <string> | fade | <fade()> ]{1,2}
初期値: clip
適用対象: ブロックコンテナー
継承: しない
パーセント値: 行ボックスの幅を参照
算出値: 指定どおり。ただし長さは絶対値に変換される
正規順序: 文法に従う
アニメーション型: 算出値の型による

この節は、 [CSS-OVERFLOW-3]に合わせて再同期する必要があるかもしれません。

このプロパティは、インライン内容が、 overflowvisible 以外であるブロックコンテナー要素(「ブロック」)の インライン進行方向で行ボックスの辺からオーバーフローした場合のレンダリングを指定します。

このプロパティは継承されませんが、 行ボックスのインライン整形コンテキストを確立するために 生成される匿名ブロックコンテナーボックス(ブロック コンテナーを参照)は 無視され、 適用されるプロパティの値は、 匿名でないボックスの値になります。これは、例 7の「ネストされた段落」の部分で確認できます: 「NESTED」という単語は、text-overflow プロパティが初期値である 匿名ブロックコンテナーで囲まれているにもかかわらず、 省略記号によって省略されます。

テキストは、たとえば折り返しが阻止された場合 (たとえば white-space: nowrap による場合や、単一の 単語が長すぎて収まらない場合)にオーバーフローすることがあります。 値の意味は次のとおりです:

clip
ブロックコンテナー要素からオーバーフローするインライン内容をクリップします。 文字は一部分だけがレンダリングされる場合があります。
ellipsis
クリップされたインライン内容を表す省略記号(U+2026)を レンダリングします。 実装は、言語、用字系、または書字モードにより適した 省略記号に置き換えることができます。 また、省略記号を利用できない場合は、3つのドット「...」に置き換えることができます。
<string>
クリップされたインライン内容を表すために、指定された文字列をレンダリングします。 指定された文字列は、双方向テキスト処理の目的では 独立した段落として扱われます。
fade( [ <length> | <percentage> ] )
行ボックスからオーバーフローするインライン内容をクリップします。 文字は一部分だけがレンダリングされる場合があります。 さらに、UA は行ボックスの辺付近に フェードアウト効果を適用しなければならず、 その辺では完全に透明になります。

フェードがブラウザー間で 同一になるよう、 フェードアウトの計算方法を 定義する必要があるでしょうか? おそらく mask-image: linear-gradient(to right, rgba(0,0,0,1), rgba(0,0,0,0)) のようなものにするべきですが、 行の関連部分にのみ適用する必要があります。

引数は、フェード効果が 適用される距離を決定します。 <percentage> は、行ボックスの幅に対して解決されます。 0未満の値は0に切り詰められます。 行ボックスの幅を超える値は、行ボックスの幅に切り詰められます。

行ボックスが、 希望する長さでフェード効果を表示するには 短すぎる場合、 効果を破棄するべきでしょうか、 収まるまで適用距離を短縮するべきでしょうか、 それともフェードの終端をクリップするべきでしょうか?

行ボックスから オーバーフローするものや、 行ボックスに重なるものを どのように処理するべきでしょうか? フェードは行の論理的な内容に適用するべきでしょうか、 行ボックスの物理的な領域に適用するべきでしょうか、 それとも両者の交差部分に適用するべきでしょうか?

fade
fade() と同じですが、 フェード効果が適用される距離は UA によって決定されます。妥当な値として 1em が提案されています。

このプロパティの定義では、読みやすさのために「文字」という用語を使用していますが、 実装上は「書記素クラスタ」[UAX29]を意味します。

値が1つの場合は、 行ボックスのend 辺にのみ適用されます。 値が2つの場合、 最初の値はline-left 辺に適用され、 2番目の値はline-right 辺に適用されます。 endline-left、および line-right という用語は、[CSS-WRITING-MODES-3]で定義されています。

注: 値が2つの場合に、start および end ではなく、line-left および line-right を使用するのは意図的なものであり、 矢印などの方向を示す文字を使いやすくするためです。

ellipsis 値 および文字列値の場合、 実装は、省略記号/文字列を収めるために必要に応じて、行の該当する辺にある文字および アトミックインラインレベル要素を非表示にし、 残ったインライン内容の該当する辺の すぐ隣に省略記号/文字列を配置しなければなりません。 行の最初の文字またはアトミックインラインレベル 要素は、省略記号で省略するのではなく、 クリップしなければなりません。

双方向テキストにおける省略記号の 例

これらの例は、双方向テキストの状況で省略記号のための空間を確保する際に、 どの文字が非表示になるかを示します: 視覚的に行の端にある文字です。

サンプル CSS:

div {
  font-family: monospace;
  white-space: pre;
  overflow: hidden;
  width: 9ch;
  text-overflow: ellipsis;
}

サンプル HTML 断片、レンダリング、および使用中のブラウザー:

HTML 参照レンダリング 使用中のブラウザー
<div>שלום 123456</div>
123456 ם…
שלום 123456
<div dir=rtl>שלום 123456</div>
…456 שלום
שלום 123456

省略処理の 詳細

省略記号に対する ユーザー操作

text-overflow の例

これらの例は、寸法からオーバーフローするテキストを持つ ブロックコンテナー要素の text-overflow の設定を示します:

div のサンプル CSS:

div {
  font-family: Helvetica, sans-serif;
  line-height: 1.1;
  width: 3.1em;
  border: solid .1em black;
  padding: 0.2em; margin:1em 0;
}

サンプル HTML 断片、レンダリング、および使用中のブラウザー:

HTML サンプルレンダリング 使用中のブラウザー
<div>
CSS は素晴らしい、そうです
</div>
1つ目は、テキストが ボックスの外側に描画されるボックスです。
CSS は素晴らしい、そうです
<div style="text-overflow:clip; overflow:hidden">
CSS は素晴らしい、そうです
</div>
2つ目は、テキストがボックスの外側で クリップされる同様のボックスです。
CSS は素晴らしい、そうです
<div style="text-overflow:ellipsis; overflow:hidden">
CSS は素晴らしい、そうです
</div>
3つ目は、クリップされたテキストを表す 省略記号を持つ同様のボックスです。
CSS は素晴らしい、そうです
<div style="text-overflow:ellipsis; overflow:hidden">
ネスト
 <p>段落</p>
省略記号で省略されません。
</div>
4つ目は、 匿名ブロックボックスの等価性と、ネストされた 要素へ継承されないことを示す、ネストされた段落を持つボックスです。
ネスト

段落

省略記号で省略されません。
<div style="text-overflow:fade; overflow:hidden">
CSS は素晴らしい、そうです
</div>
オーバーフロー時にテキストがフェードアウトする ボックスです。
CSS は素晴らしい、そうです

注: 省略記号が配置される行の側は、 ブロックのdirection によって決まります。 たとえば、オーバーフローを非表示にする右から左の (direction: rtl) ブロックは、インライン内容を 側でクリップします。 したがって、クリップされた内容を表す text-overflow の省略記号は、側に 配置されます。

この注を示す RTL の図を ここに挿入します。

スクロールインターフェイスとの 省略記号の相互作用

この節は、text-overflow:clip 以外の text-overflow (clip 以外の text-overflow) および overflow:scroll を持つ要素に適用されます。

clip 以外の text-overflow を持つ要素が、テキストのインライン進行方向で overflow: scroll となっており、 ブラウザーがスクロールの仕組みを提供する場合 (たとえば、要素上のスクロールバー、 スワイプスクロール用のタッチインターフェイスなど)、 ユーザー体験を向上させるために、実装には次のような追加の詳細があります:

要素がスクロールされると(たとえば、ユーザーまたは DOM 操作によって)、 要素の内容がさらに表示されます。 text-overflow の値は、 要素の内容がさらに表示されるかどうかに影響するべきではありません。 clip 以外の text-overflow が設定されている場合、 より多くの内容がスクロールされて表示領域に入るにつれて、 実装は、収まる追加内容をすべて表示し、 本来クリップされる内容 (または省略記号/文字列のための空間を確保するために必要な内容)のみを切り詰めるべきです。 これは、要素が内容の端を 表示できる位置までスクロールされるまで続きます。 その時点では、その内容を 省略記号/文字列ではなく表示するべきです。

この例では、overflow: scroll を持つ要素で text-overflow を使用し、 上記の動作を示します。

サンプル CSS:

div.crawlbar {
  text-overflow: ellipsis;
  height: 2em;
  overflow: scroll;
  white-space: nowrap;
  width: 15em;
  border:1em solid black;
}

サンプル HTML 断片:

<div class="crawlbar">
CSS は素晴らしく、特にスクロールして
単に既定で他のテキストに重ねる代わりに
追加のテキストを表示できる場合はなおさらです。
</div>

サンプル CSS および HTML のデモ:

CSS は素晴らしく、特にスクロールして 単に既定で他のテキストに重ねる代わりに 追加のテキストを表示できる場合はなおさらです。

一部の内容がスクロールされて表示領域に入ると、 反対側では別の内容が表示領域からスクロールして外れる可能性があります。 その内容のブロックコンテナー要素が、 スクロールを行っているものと同じであり、 text-overflow の算出値が2つの値を持ち、 始端辺に適用される値が clip 以外の値である場合、 実装は、クリップされた内容の代わりに 省略記号/文字列をレンダリングしなければなりません。 その詳細は上記の値の定義と同じですが、 省略記号/文字列は、ブロックの方向(direction プロパティに従う)の startend ではなく)に 描画されます。

内容がスクロールされている間、 実装は省略記号/文字列のレンダリングを調整できます (たとえば、行の辺ではなくボックスの辺に揃えます)。

前の例と同じですが、 text-overflow: ellipsis ellipsis を使用して示します:
CSS は素晴らしく、特にスクロールして 単に既定で他のテキストに重ねる代わりに 追加のテキストを表示できる場合はなおさらです。

始端と終端の両方の省略記号/文字列を配置するための空間が不足している場合は、 終端の省略記号/文字列のみをレンダリングするべきです。

4.2. ブロック軸オーバーフローの表示: block-ellipsis プロパティ

名前: block-ellipsis
値: none | auto | <string>
初期値: none
適用対象: ブロックコンテナー
継承: する
パーセント値: 該当なし
算出値: 指定値
正規順序: 文法に従う
アニメーション型: 離散的

このプロパティを使用すると、切り詰められた、または中断された内容の連続性を 示すために、(強制的なまたは非強制的な)領域分割の 前にある最後の行ボックスへ内容を挿入できます。 このプロパティは、ブロック コンテナー自体に直接含まれる行ボックスにのみ影響しますが、 継承されるため、上書きされない限り子孫の行ボックスにも影響します。 ボックスに、領域 分割の直前にある行ボックスが含まれていない場合、 このプロパティは効果を持ちません。

注: このような領域分割を持つボックスを生成する方法については、附属書 A: オーバーフローのリダイレクトを参照してください。

これは、他の種類の 断片化分割(たとえば、ページや段)にも適用するべきでしょうか?

挿入された内容は、ブロックオーバーフロー省略記号と呼ばれます。 値の意味は次のとおりです:

none
レンダリングには影響しません。
auto
影響を受ける行ボックスの末尾に、ブロック オーバーフロー省略記号として、省略記号(U+2026)—または組版上より適切な同等物—を レンダリングします。 UA は、最も適切な省略文字列を決定するために、内容の 言語、 書記体系、および書字 モードの規則を使用するべきです。
<string>
影響を受ける行ボックスの末尾に、 指定された文字列をブロックオーバーフロー省略記号としてレンダリングします。 文字列が不合理なほど長い場合、UA はその文字列を切り詰めることができます。

block-ellipsisnone でない場合、 ブロック オーバーフロー省略記号の文字列は、 匿名インラインで囲まれ、 ブロックコンテナールートインライン ボックスの直接の子として、 行ボックスの末尾に配置されます。 これにより、行ボックス内で 行の他の内容が使用できる空間が減少します。 このインラインには unicode-bidi: plaintext および line-height: 0 が割り当てられ、行全体に ブロックオーバーフロー省略記号全体を 収めることができる最後のソフト折り返し機会[CSS-TEXT-3]を参照)の後に配置されます。 この目的では、overflow-wrap によって追加されたソフト折り返し機会は無視されます。 その結果、行ボックスの内容全体が押し出された場合、 行ボックスには、CSS 2.1 § 10.8.1 レディングと ハーフレディングで定義されているストラットが含まれていると見なされます。 テキストの配置および両端揃えは、 配置後に行われ、 挿入されたブロックオーバーフロー省略記号を 行の残りの内容と一緒に測定します。

注: ブロックオーバーフロー省略記号line-height0 に設定することで、 その挿入によって行の高さが増加しないことが保証されます。 高さが増加すると、さらに再レイアウトが発生し、循環が生じる可能性があります。 これは、ブロックオーバーフロー 省略記号を描画時の操作として挿入することとほぼ同等ですが、配置と 両端揃えには引き続き関与します。 欠点は、ブロック オーバーフロー省略記号内の通常より高い、または深いグリフがオーバーフローする可能性があることです。

ブロック オーバーフロー省略記号を、 ::first-letter または ::first-line 擬似要素のいずれにも含めてはなりません。

後続の内容を受け取る、後続の断片化コンテナー断片化コンテキスト内に存在する場合、 ブロックオーバーフロー省略記号によって押し出された内容は、その断片化コンテナーへ送られなければなりません。

UA は、ブロックオーバーフロー省略記号を分割不可能な文字列として扱わなければなりません。 ブロックオーバーフロー省略記号の一部でもオーバーフローする場合、 それはスクロール可能なオーバーフローとして扱われ、 そのレンダリングは text-overflow プロパティの影響を受けます。

ブロック オーバーフロー省略記号はイベントを捕捉しません: ポインターイベントは、その下にあるものへ配送されます。

これは、ボックスの内在サイズにも影響しません: min-content および max-content サイズは、 block-ellipsisnone であるかのように算出されます。

注: 将来の仕様でこの機能が拡張される可能性があります。 たとえば、テキストのスタイルを指定するための ::ellipsis 擬似要素を提供したり、 インラインレベルまたはブロックレベルの標識として使用する ブロックの子要素を選択できるようにしたりすることが考えられます (その場合、イベントを捕捉できます)。

5. オーバーフローの断片化

5.1. 可視行の制限: line-clamp 一括指定 プロパティ

名前: line-clamp
値: none | <integer [1,∞]> <'block-ellipsis'>?
初期値: none
適用対象: 個々のプロパティを参照
継承: 個々のプロパティを参照
パーセント値: 該当なし
算出値: 個々のプロパティを参照
アニメーション型: 個々のプロパティを参照
正規順序: 文法に従う

line-clamp プロパティは、max-linesblock-ellipsis、および continue プロパティの一括指定プロパティです。

当面の間、 実験的な実装には、この一括指定プロパティとその個別指定プロパティで定義された 完全な動作に従うことが推奨されますが、 作者に公開するのは一括指定プロパティのみにすることが推奨されます。 これは、個別指定プロパティとその値を さらに調整しやすくし、 特に名前を変更する可能性に対応するためです。

このプロパティを使用すると、ブロックコンテナーの内容を 指定された行数に制限できます。 残りの内容は断片化によって取り除かれ、 レンダリングも測定もされません。 任意で、切り詰められた、または中断された内容の連続性を示すために、 最後の行ボックスへ内容を挿入することもできます。

値の意味は次のとおりです:

none
max-linesnonecontinueautoblock-ellipsisnone に設定します。
<integer [1,∞]> <block-ellipsis>?
max-lines を指定された <integer>continuediscardblock-ellipsis プロパティを値の2番目の成分に設定します。 省略した場合は auto に設定します。

この仕組みの動作の詳細については、 対応する個別指定プロパティを参照してください。

この例では、各記事の導入段落が 短縮されたメニューに一覧表示され、 「…(次のページに続く)」で終わる5行以内に 収まるように切り詰められます:
li {
  line-clamp: 5 "…(次のページに続く)";
}
strong {
  display: block;
  text-transform: uppercase;
}
<li><a href="cheese-is-milk">
  <strong>チーズは実際には牛乳から作られている!</strong>
  ワールド・ワイド・ウェブ報道団の調査記者が
  チーズの秘密を発見した。
  複雑に入り組んだ官僚機構と影の企業を追跡し、
  精鋭記者チームはカマンベールの源を突き止めた。
</a></li>

サンプルレンダリング:

+---------------------------------------+
| チーズは実際には牛乳から作られている! |
| ワールド・ワイド・ウェブ報道団の       |
| 調査記者がチーズの秘密を発見した。     |
| 複雑な官僚機構と影の企業を追跡し、     |
| 精鋭記者…(次のページに続く)          |
+---------------------------------------+

5.1.1. レガシー互換性

レガシーな内容との互換性のため、 line-clamp をサポートする UA は、-webkit-line-clamp プロパティと、 continue プロパティの追加の値である-webkit-discard もサポートしなければなりません。

名前: -webkit-line-clamp
値: none | <integer [1,∞]>
初期値: none
適用対象: 個々のプロパティを参照
継承: 個々のプロパティを参照
パーセント値: 該当なし
算出値: 個々のプロパティを参照
アニメーション型: 個々のプロパティを参照
正規順序: 文法に従う
名前: continue
新しい値: -webkit-discard

line-clamp と同様に、-webkit-line-clamp は、 max-linescontinue、および block-ellipsis の一括指定プロパティですが、 次の点が異なります:

さらに、display プロパティの算出値が -webkit-box または -webkit-inline-box であるボックスの子(匿名の子を含む)では、 max-linescontinue、および block-ellipsis プロパティの使用値は、 親ボックスの算出値から取得されます。 ボックス自体におけるこれらのプロパティの算出値は無視されます。

-webkit-discard 値は、discard と同じように動作しますが、 親の display プロパティの算出値が -webkit-box または -webkit-inline-box であり、かつ親の-webkit-box-orient プロパティの算出値が vertical である場合にのみ効果を持ちます。

注: レガシーな-webkit-line-clamp プロパティの実装は、 ここで指定されているものと同一の動作をしてきたわけではありません。 過去の動作には癖があり、堅牢性も低いものでした。 これは、たとえばこの ブログ記事に記録されています。 現在の設計は、その初期の実験における誤りから学んだものであり、 実装を最終的に指定された動作へ変更できるよう、 既存の内容と十分に互換性を持つことを意図しています。 さらなる調整が必要であることが判明した場合は、 この仕様に組み込まれます。 それまでは、相違が存在する可能性があることに作者は注意するべきです。

5.2. 指定行数の後での強制分割: max-lines プロパティ

名前: max-lines
値: none | <integer [1,∞]>
初期値: none
適用対象: ブロックコンテナーであり、かつ領域分割を捕捉する断片化コンテナー
継承: しない
パーセント値: 該当なし
算出値: キーワード none または整数
正規順序: 文法に従う
アニメーション型: 算出値の型による

このプロパティは、領域分割を捕捉する断片化コンテナーではないボックスには効果を持ちません。

それ以外の場合、max-lines の値が none でなければ、 N 番目の子孫のインフロー行ボックスの後に領域分割が強制されます。 ここで、Nmax-lines の指定値です。 同じブロック整形コンテキスト内にある行ボックスのみが数えられます: 独立した整形コンテキストを確立する子孫の内容は、 行ボックスを数える際に飛ばされます。

行ボックスが N 個未満の場合、 max-lines領域分割を導入しません。

continue: discard は、要素に独立した整形 コンテキストを確立させないため、 line-clamp を持つネストされた要素内の行も数えられます。 これは、次の例で確認できます。
<div id=a>
  a: 1行目<br>
  a: 2行目<br>
  <div id=b>
    b: 1行目<br>
    b: 2行目<br>
    b: 3行目<br>
    b: 4行目<br>
  </div>
  a: 3行目<br>
  a: 4行目<br>
</div>

#a { line-clamp: 5; } #b { line-clamp: 2; } を指定した場合のサンプルレンダリング:

a: 1行目
a: 2行目
b: 1行目
b: 2行目…
a: 3行目…

#a { line-clamp: 3; } #b { line-clamp: 2; } を指定した場合のサンプルレンダリング:

a: 1行目
a: 2行目
b: 1行目…

2番目の場合、 要素 #b に設定された最大2行という制限は効果を持たないことに注意してください。 これは、この要素の2行目より 前に強制分割が導入されるためです。

注: これは、max-lines段組みコンテナーに適用しても効果がないことを意味します。 これは、段組みコンテナーに含まれるすべての行ボックスが、独立した整形コンテキストにネストされるためです。

正の整数のみが受け入れられます。 ゼロまたは負の整数は無効であり、 宣言を無視させなければなりません。

注: widowsorphans、および break-inside プロパティは、 max-lines プロパティによって導入される強制的な領域分割の 位置には影響しません。

注: 「領域分割」という名称にもかかわらず、これは [CSS-REGIONS-1] への依存関係ではありません。 「領域」という語は、強制分割を分類するためにのみ使用されます: 強制分割には、「ページ分割」(ページ間の分割 [css-page-3])、 「段分割」(段組みレイアウトの段間の分割 [css-multicol-1])、 または「領域分割」(CSS によって生成される、その他の種類の断片化コンテナー間の分割)があります。

実装が [CSS-REGIONS-1] も、CSS オーバーフロー 4 § 5 オーバーフローのリダイレクトもサポートしていない場合、 その種類の分割に遭遇する機会はまだなかったため、 これは新たな追加となります。 ただし、この追加では [CSS-REGIONS-1] の機能を導入する必要はありません。 必要なのは次のことだけです:

5.3. オーバーフローの断片化: continue プロパティ

名前: continue
値: auto | discard
初期値: auto
適用対象: ブロックコンテナーおよび段組みコンテナー
継承: しない
パーセント値: 該当なし
算出値: 指定されたキーワード
正規順序: 文法に従う
アニメーション型: 離散的

continue プロパティを使用すると、作者は ボックスを断片化コンテナーに変換し([CSS-BREAK-3]を参照)、 断片化分割後の内容を破棄するよう指定できます。

このプロパティは、 [CSS-REGIONS-1]region-fragment プロパティを一般化して置き換えることを目的としています。 この仕様において十分に安定した時点で、領域仕様から region-fragment を削除し、 このプロパティに置き換えるべきです。

auto

ボックスに収まりきらない内容がある場合、 超過した内容は通常の規則に従って処理されます。

discard
ボックスがまだ領域分割を捕捉する断片化コンテナーでない場合、そのようなコンテナーになります。[CSS-BREAK-3] 最初の領域分割後の内容はレンダリングされません(下記を参照)。 (ボックスが段組みコンテナーである場合、 すべてのオーバーフロー段もレンダリングされません。)

注: この領域 分割は、強制的 (たとえば max-lines、または break-before/break-after プロパティなど、別の仕組みによって課されるもの) である場合も、非強制的(たとえば、サイズ制約により内容がこの断片化コンテナーからオーバーフローする場合) である場合もあります。 他の断片化コンテキストに適用される分割(このボックス 自体のページ化など)によって、 内容が破棄されることはありません。

注: このプロパティによって、ボックスが 独立した整形 コンテキストを確立することはありません

次の図のように、過度に長くオーバーフローする 1行と、 断片化方向に収まりきらない追加の4行を持つ記事では、 overflowcontinue プロパティの組み合わせに応じて、異なるレンダリングが可能です。
過度に長い1行と、ブロック方向に収まる追加の4行を持つ記事
continue: discard continue: auto
overflow: visible continue:discard および overflow:visible によるレンダリング continue:auto および overflow:visible によるレンダリング
overflow: hidden continue:discard および overflow:hidden によるレンダリング continue:auto および overflow:hidden によるレンダリング

continue: discard によって「レンダリングされない」内容は、display: none と同様に破棄されます:

ただし、内在サイズは断片化コンテナー全体にわたって算出されるため、 この内容は、ボックスのmin-content および max-content インラインサイズを求める目的では 考慮されますCSS 断片化 3 § 5.1 サイズの異なるフラグメンテナーへの分割を参照)。Min-content および max-content ブロックサイズは、 強制的分割が 存在する場合は、断片化フローの先頭から最初の強制的分割までの内容に基づいて算出され、 強制的分割が存在しない場合は、断片化フローの末尾までの内容に基づいて算出されます。

注: 並列断片化フローの場合、 ボックスツリー内で断片化分割の後に現れる内容でも、 この断片化コンテナーの末尾を表す位置より 上にレイアウトされる場合は、引き続きレンダリングされる可能性があります。

附属書 A: オーバーフローの リダイレクト

この節は非常に 実験的です。 追加のユースケースを解決するために、 continue プロパティの機能を 拡張しようとする現在の試みを記録しています。 ただし、現時点では合意が得られていません。 議論を促すためにここで提示していますが、 非実験的な実装は推奨されません。

CSS レベル 1 [CSS1] では、指定されたサイズの要素内に 収まりきらない量の内容を配置することは、 通常、オーサリングエラーでした。 そうすると、内容が要素の 境界外へはみ出し、 その内容が他の要素と 重なる可能性が高くなりました。

CSS レベル 2 [CSS2] では、overflow プロパティが導入され、 作者はオーバーフローをスクロールによって処理できるようになり、 オーサリングエラーではなくなりました。 また作者は、オーバーフローを クリッピングによって処理するよう指定することもできます。 これは、内容を表示しないことが 作者の意図である場合に適しています。 これは、CSS オーバーフローモジュール レベル 3 [CSS-OVERFLOW-3] でさらに改良されました。

ただし、大量の内容を 提示する方法はスクロールだけではなく、 スクロールが最適な方法でない場合もあります。 結局のところ、大量の文書の一般的な形式として 冊子体が巻物に取って代わったのは、 冊子体に利点があったためです。

この仕様では、ページの要素が オーバーフローをスクロールではなく ページ化によって処理するよう、 Web ページで指定するための仕組みを導入します。

この仕様は、オーバーフローの概念を 別の方向にも拡張します。 要素の内容を流し込む単一の領域を 作者が指定することを要求する代わりに、 この仕様では、作者がそれぞれ独自の寸法とスタイルを持つ 複数の断片を指定できます。 これにより、要素の内容は断片から次の断片へ流れ、 オーバーフローせずに内容を配置するために必要な数の断片を使用できます。

どちらの場合も、実装は ブロック進行方向で内容を分割しなければなりません。 実装がこれを行う方法は、 CSS 断片化モジュール [CSS-BREAK-3] で説明されています。

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

continue プロパティを使用すると、作者は 要素内に収まらない内容を 断片化するよう要求し([CSS-BREAK-3]における意味で)、 残りの内容をどこで継続するかについて 選択肢を指定できます。

特に、このプロパティは従来のページ化を説明し、 さらに拡張します。

名前: continue
新しい値: overflow | paginate | fragments
初期値: auto
適用対象: ブロックコンテナー [CSS2]、フレックス コンテナー [CSS3-FLEXBOX]、およびグリッドコンテナー [CSS3-GRID-LAYOUT]
継承: しない
パーセント値: 該当なし
算出値: 下記を参照
アニメーション型: 離散的

この プロパティとその値の名前は暫定的なものです。 当初は 「fragmentation: auto | none | break | clone | page」として https://lists.w3.org/Archives/Public/www-style/2015Jan/0357.html で提案されましたが、どの名前がより適切であるかについては、まだ広範な合意がありません。

このプロパティは、 region-fragment を一般化して置き換えることを目的としています。 この仕様において十分に安定した時点で、領域仕様から region-fragment を削除し、 このプロパティに置き換えるべきです。

注: continue: fragments は、 この仕様の以前のバージョンにあった 「overflow:fragments」を置き換えます。 一方、continue: paginate は「overflow: paged-x | paged-y | paged-x-controls | paged-y-controls」を置き換えます。

auto
要素が領域チェーン内の最後以外のCSS 領域である場合に限り、 auto が算出値として現れる可能性があります。 収まりきらない内容は、チェーン内の次の領域へ送られます。

それ以外のすべての場合、auto は他のいずれかの値として算出されます。

これは、 指定値が算出値となる§ 5.3 オーバーフローの断片化: continue プロパティの定義とは異なります。 どちらのモデルがより適切でしょうか?

overflow
収まりきらない内容は、overflow プロパティに従ってオーバーフローします
paginate
収まりきらない内容はページ化されます。 「overflow: scroll」がスクロール可能なビューを作成するのと同様に、 要素内にページ化されたビューを作成します。

ページ化されたオーバーフローを参照してください

注: 印刷は、実質的にルート上の 「continue: paginate」です。

fragments
収まりきらない内容があると、要素は自身を複製してレイアウトを継続します。

断片化されたオーバーフローを参照してください。

特定の要素または擬似要素における continue の算出値は、 次のように決定されます:

  1. レイアウト封じ込めを持つ要素または擬似要素([CSS-CONTAIN-1]を参照)では、 指定値が auto または fragments の場合、 算出値は overflow です。
  2. それ以外で、指定値が auto の場合
    1. 領域 チェーン内の最後以外のCSS 領域では、 算出値は auto です
    2. ページでは、 算出値は paginate です
    3. 断片ボックスでは、 算出値は fragments です
    4. それ以外の場合、算出値は overflow です
  3. それ以外で、指定値が fragments の場合
    1. ページでは、 算出値は paginate です
    2. それ以外の場合、算出値は指定値です
  4. その他のすべての場合、算出値は指定値です

段組み内の段を選択できる 擬似要素を導入する場合、 その擬似要素では auto が auto として算出されることを指定するか、 新しい値を導入して auto がその値として算出されるようにする必要があります (ただし、段ではないものにおいて、その値は何として算出されるのでしょうか?)。

注: このプロパティに至った背景の議論については、 次のスレッドを参照してください: overflow、 overflow-x、overflow-y、および overflow-style に関する議論と、fragmentation プロパティの提案

ページ化されたオーバーフロー

この節では、continue プロパティの paginate 値を導入し、その意味を定義します。

この節を執筆します

@page 規則によってページの スタイルを指定できるようにするべきです。ネストされたページでは、どのように機能するのでしょうか?

従来のページ化(たとえば印刷時)は、 auto の算出値に何らかの特別な仕組みを設けることで 表現するべきでしょうか、 それとも UA スタイルシートに次を挿入することで表現するべきでしょうか:
@media (overflow-block: paged), (overflow-block: optional-paged) {
  :root {
    continue: paginate;
  }
}

従来のページ化 (たとえば印刷時)では、 ページボックスが :root の擬似要素の子になるのではなく、 :root がページボックスに含まれていることを前提とします。 断片ボックスに似たものを使用して、これを回避できるでしょうか? または、:root 内のページボックス内に、:root を再現する断片ボックスを配置する方法はどうでしょうか?

通常の CSS ボックスの 子である場合、ページボックスモデルはどのように機能するのでしょうか?

[CSS3GCPM]における最初の提案と Opera の実装では、 paginate の代わりに4つの値を使用していました: 「paged-x | paged-y | paged-x-controls | paged-y-controls」。 このプロパティにもこれらの値を含めるべきでしょうか、 それとも別のプロパティとして扱う方が適切でしょうか? (たとえば、「pagination-layout: auto | horizontal | vertical」、「pagination-controls: auto | none」)

一度に1ページだけでなく、 N ページを同時に表示できるようにするべきでしょうか? これは、次のような「pagination-layout」の値にできるでしょうか: 「pagination-layout: horizontal 2;」

Brad Kemper は、複数ページの表示にも対応する、 ページ化と断片オーバーフローを 組み合わせるためのモデルを提案しています。https://www.w3.org/mid/FF1704C5-D5C1-4D6F-A99D-0DD094036685@gmail.com

ページ化されたオーバーフローの現在の実装では、 [CSS3GCPM] 草案で提案された overflow-style プロパティ ([CSS3-MARQUEE] の提案とも一致します)や、 ここで説明されている continue プロパティではなく、 overflow/overflow-x/overflow-y プロパティを使用しています。

断片化されたオーバーフロー

この節では、continue プロパティの fragments 値を 導入し、その意味を定義します。

要素の continue の算出値が fragments であり、 それ以外の場合に実装がその要素のボックスを作成する状況では、 実装は、その要素のために一連の断片ボックスを 作成しなければなりません。 (continue: fragments を持つ要素が、断片ボックスを1つだけ生成する場合もあります。 ただし、要素の continue の算出値が fragments でない場合、 そのボックスは断片ボックスではありません。) すべての断片ボックスは断片化コンテナーであり、 その断片化コンテナーを断片化させる オーバーフローが発生すると、 直前の断片ボックスの次の兄弟として、別の断片ボックスが作成されます。それとも、要素の次の兄弟であるかのように扱われるのでしょうか? これが他のボックスレベルの修正と どのように相互作用するかを正確に把握する必要があります。 さらに、断片ボックスが 段組みボックスでもある場合 ([css-multicol-1] で定義されていますただし、そこで定義されているのは段組み コンテナーです)、 オーバーフロー 段 [css-multicol-1] の作成につながる内容は、 代わりに追加の断片ボックスへ流し込まれます。 ただし、断片ボックス自体が分割される場合もあります (ページ、段、または他の断片ボックスなど、 断片ボックス外部の断片化コンテキストにおける断片化によるものです)。 このような分割では、複数の断片ボックスではなく、 同じ断片ボックスの複数の断片が生成されます。 (断片ボックスはそのインデックスに基づいてスタイル指定される場合があるため、これは重要です。 このような分割では、単一のインデックスを持つ断片ボックスの 複数の断片が生成されます。 この設計が選択されたのは、 断片ボックスをページ間で分割しても、 インデックスと特定の内容部分との関連付けが壊れないようにするためです。)外側の断片化コンテキストへ分割する強制分割では、 単一の断片ボックスの新しい断片を生成するべきでしょうか、 それとも新しい断片ボックスを生成するべきでしょうか? ここでは、混乱を少し軽減するために、断片ボックス以外の用語を使用するべきでしょうか?

別の種類の断片化コンテキスト内で 分割された要素の各部分に スタイルを指定できるようにしたい場合は、どうなるでしょうか? これらの規則により、その目的で ::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 内のテキストが
  一連のカードに分割されます。
  これらのカードはすべて同じスタイルを持ちます。
  1つのカードからオーバーフローする
  十分な量の内容があると、
  別のカードが作成されます。2番目の
  カードは、1番目のカードの
  次の兄弟であるかのように作成されます。
</div>
この例では、div 内のテキストが
一連のカードに分割 されます。これらのカードはすべて
同じスタイルを持ちます。1つのカードから
オーバーフローする十分な量の内容が あると、
別のカードが作成されます。
2番目のカードは、1番目の
カードの次の兄弟であるかの ように
作成されます。
作者は、要素の冒頭の数行を 別のスタイルで指定するために、 それらの冒頭行を別の断片に配置したい場合があります。 ただし、最初の断片をその高さに制限するために それらの行が占める正確な高さを 予測するのは難しい場合があるため、 指定された行数の後で 断片を強制的に分割する 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 プロパティを使用すると、
作者は記事の最初の 数行に
大きなフォントを使用できます。これがなければ、
作者は
代わりに height プロパティを使用する必要があるかもしれませんが、
指定された行数が占める 高さを作者が誤って算出すると、
わずかな隙間が残ります
(これは、 使用されるテキストを
作者が知らない場合には
特に困難であり、
空間を満たす テキストや、使用される
正確なフォント、 または
フォントの表示に使用されるプラットフォームの
フォントレンダリングを 正確に
把握できない場合があります)。

continue: fragments は、少なくとも一部の表の構成要素には 適用されず、 おそらく他の要素にも適用されないことを指定するべきです。 正確にどの要素であるかを判断する必要があります。

どの break-* プロパティ値がこのコンテキスト内で 分割を発生させるかを明確にするため、 この仕様では、作成される 断片化コンテキストの種類を指定する必要があります。 おそらく break-*: region を適用することになります。

この仕様には、 断片を含むレイアウトが、 断片の内在サイズを使用して 断片に利用可能な空間の量を変更する特性を持つ場合に 適用される処理モデルが必要です。 たとえば [CSS3-GRID-LAYOUT] が該当します。 このような処理モデルについては、すでに [CSS-REGIONS-1] である程度の作業が行われています。 そこで行われたモデルに関する作業と、 その仕様の編集者の知見を、 この仕様における処理へ反映するべきです。

断片のスタイル指定

::nth-fragment() 擬似要素

::nth-fragment() 擬似要素は、 要素によって生成される一部の断片 ボックスを記述する擬似要素です。 擬似要素の引数は、[SELECT] で 定義される :nth-child() 擬似クラスの引数と同じ構文を取り、 同じ意味を持ちます。 ただし、番号は要素の兄弟ではなく、 要素によって生成される断片ボックスを基準とします。

始端ではなく終端から数えることで 断片を指定できるセレクターは、 意図的に提供されていません。 このようなセレクターは、 断片数の決定を妨げるためです。

今後の 議論によっては、 この ::nth-fragment(an+b) 構文は、 新しい ::fragment:nth(an+b) 構文に 置き換えられる可能性があります。

断片のスタイル指定

これは continue:fragments のみに適用するべきでしょうか、 それとも continue:paginate にも適用するべきでしょうか? (適用する場合、 continue:paginate には より厳しいプロパティ制限が必要になります。)

::nth-fragment() 擬似要素を持つ規則が存在しない場合、 各断片 ボックスの算出スタイルは、 その断片ボックスが作成された要素の算出スタイルになります。 ただし、断片ボックスのスタイルは、 セレクターの主体 [SELECT]::nth-fragment() 擬似要素を持つ規則からも影響を受けます。 これは、断片ボックスの1から始まる番号が その ::nth-fragment() 擬似要素と一致し、 セレクター(::nth-fragment() 擬似要素を除く)が 断片を生成する要素と一致する場合です。

断片ボックスのスタイルを決定する際、 断片擬似要素と一致するこれらの規則は、 要素と一致する規則と一緒にカスケードされます。 断片擬似要素は、詳細度の計算に 擬似クラスの詳細度を追加します。これはカスケードモジュールでも 指定する必要があるでしょうか?

<!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 プロパティでスタイルを指定すると効果があります。 断片ボックスcontinue の算出値が fragments 以外である場合、その断片ボックスが最後の断片になります。 ただし、最初の断片で continue を 上書きしても、 断片ボックスが存在しなくなることはありません。 断片ボックスが存在するかどうかは、 要素の overflow の算出値によって決まります。

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

断片ボックスdisplay: none を指定すると、 そのインデックスを持つ断片ボックスは生成されません。 ただし、後続の断片ボックスの ::nth-fragment() 擬似要素との照合に使用する インデックスに関しては、 生成されたものとして引き続き数えられます。 ただし、生成されないため、内容は含まれません。

displayposition、 または float に他の値を指定することは許可されますが、 内側表示型を変更することは許可されません。 (continue は、 ブロックコンテナー、フレックスコンテナー、およびグリッドコンテナーにのみ適用されるためです)。これがどのように 機能するかを正確に指定する必要があります

擬似要素が対応する要素内に存在する 他の擬似要素のモデルと一致させるため、 ::nth-fragment() 擬似要素内の宣言は、 擬似要素を持たない規則内の宣言を上書きします。 このような宣言間の相対的な優先順位は、 通常のカスケード順序によって決定されます([CSS2]を参照)。

::nth-fragment() 擬似要素で指定されたスタイルは、 断片ボックス内の内容への継承に影響します。 言い換えると、断片ボックス内の内容は、 要素から直接継承するのではなく、 断片ボックスのスタイル(すなわち、擬似要素のスタイル)から継承しなければなりません。 これは、複数の断片ボックスに分割された要素では、 要素の部分ごとに異なるスタイルを持つ場合があることを意味します。

この継承規則により、 直接指定できないスタイルを 間接的に指定できます (明示的な 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() 擬似要素は、 断片 ボックス内の内容に スタイルを指定するためにも使用できます。 ::first-line および ::first-letter 擬似要素とは異なり、 ::nth-fragment() 擬似要素は、 主体以外のセレクター部分にも 適用できます。 特に、主体の祖先と一致できます。 ただし、このようなセレクターを持つ規則によって 適用される CSS プロパティは、 ::first-letter 擬似要素に 適用されるものだけです。

より正確には、 規則のセレクターで、主体以外のセレクター部分に ::nth-fragment() 擬似要素が付加されている場合、 その規則内の宣言は、次の条件を満たすときに 断片(またはその擬似要素)へ適用されます:

  1. 宣言が、::first-letter 擬似要素に適用されるプロパティに関するものであり、
  2. それらの ::nth-fragment() 擬似要素を削除した場合に、 各単純セレクター列と、 それが一致する要素との間に特定の関連付けを持って、 宣言がその断片(またはその擬似要素)に 適用されるものであり、
  3. 削除された各 ::nth-fragment() 擬似要素について、 その断片が、擬似要素の付加先セレクターに 当該関連付けで関連付けられた要素の断片ボックス内に存在し、 そのインデックスが擬似要素と一致すること。
<!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>
この
では、
テキストが
明るい色の 断片
から別の
暗い色の
断片へ流れます。
そのため、異なる
断片内の ハイパーリンク
異なるスタイルを 適用したいと
考えます。

附属書 B: scrollbar-gutter の拡張候補

この節は非規範的です。

この節では、 追加のユースケースを解決するために、 scrollbar-gutter プロパティを 拡張しようとする現在の試みを記録しています。 ただし、現時点では合意が得られていません。 議論を促すためにここで提示していますが、 非実験的な実装は推奨されません。

この例では、 scrollbar-gutter プロパティの追加値をすべて使用します:
クラシックスクロールバーを使用した場合
オーバーレイスクロールバーを使用した場合
名前: scrollbar-gutter
新しい値: auto | [ [ stable | always ] && both-edges? && force? ] || match-parent
適用対象: すべての要素

オーバーレイスクロールバーでは、 スクロールバーガターが存在する場合、その正確な幅は UA によって定義されます。 ただし、0であってはならず、 スクロールバー自体が変化する場合でも、ページまたはスクロールバーに対するユーザー操作に基づいて 変化してはなりません。 これは、明確に定義できる範囲において、 最も幅が広い状態のオーバーレイスクロールバーの 幅を覆うことを想定しています。

このプロパティの新しい値の意味は次のとおりです:

always
overflowscrollhidden、または auto の場合、 スクロールバーの種類や ボックスがオーバーフローしているかどうかにかかわらず、 スクロールバーガターが常に存在します。
scrollbar-gutter: always は、 要素の辺付近にある(小さな)対話型要素が 表示されたオーバーレイスクロールバーに覆われる問題を 解決するために使用できます。 代表的な例は基本的な ToDo リストです。 各行はテキストで始まり、右揃えされたチェックボックスで終わります。 クラシックスクロールバーでは問題ありませんが、 オーバーレイスクロールバーはチェックボックスを覆い、操作しにくくする可能性があります。
クラシックスクロールバーに隣接するチェックボックス

					右端にチェックボックスがあり、
					スクロールバーに隣接している、スクロール可能な ToDo リスト。
					この状況では、特に問題は生じません。
チェックボックスとオーバーレイスクロールバー

					右端にチェックボックスがある、スクロール可能な ToDo リスト。
					オーバーレイスクロールバーが非表示の場合、
					特に問題は生じませんが、
					表示されると、
					チェックボックスを覆い、
					操作を妨げます。

オーバーレイスクロールバーは通常一時的であり、操作されていないときは消えるため、 覆われたチェックボックスがまったく使用できなくなるわけではありません。 ただし、スクロールバーが表示されると操作を妨げ、 不自然な操作感になります。 作者は右側にパディングを追加して問題を解決しようとするかもしれませんが、 (1)どれだけ追加するべきでしょうか? また(2)クラシックスクロールバーの場合、そのパディングは必要ありません。scrollbar-gutter: always はこの問題を解決し、 クラシックスクロールバーの場合は最初の例と同じ結果を保ちながら、 オーバーレイスクロールバーでは必要なガターを追加します:

チェックボックス、オーバーレイスクロールバー、および scrollbar-gutter: always

					右端にチェックボックスがあり、
					ガターによって左へ移動された、スクロール可能な ToDo リスト。
					オーバーレイスクロールバーが非表示か表示中かにかかわらず、
					チェックボックスは覆われず、
					操作できます。
Apple はこの値の追加に消極的です。 作者がこの値を広範に使用しすぎて、 対話型要素によって正当化されない場合でもオーバーレイスクロールバー用のガターを挿入し、 オーバーレイスクロールバーによる空間節約の利点を損なう可能性があるためです。

代替の解決策が提案されています: 焦点となるのは対話型要素であるため、 スクロールバーの下に配置されることを回避する必要がある 要素へ適用するプロパティを用意できるかもしれません。 有効にすると、必要に応じて要素の右または左のマージンを 適切な値だけ拡大し、 オーバーレイスクロールバーの下に配置される場合は、そこから要素を押し出します。 それ以外の場合、要素は変更されません。

追加の切り替えによって、 要素の inline-end と inline-start の両方のマージンを拡大するか、 どちらも拡大しないようにできる可能性もあります。 これは、可視の境界線または背景を持つ スクローラーのブロックレベルの子孫で特に役立つ可能性があります: オーバーレイスクロールバーとの衝突を避けるために一方の側へ空間を追加すると、 スクロールバーが消えたときに中央からずれて見えます。 両側のマージンを増やすことで、これを回避できます。

さらに別の可能性として、要素を保護するためにマージンを拡大するか、 要素の内容を保護するためにパディングを拡大するかを選択できるようにすることが考えられます。

構文は、たとえば scrollbar-avoid: none | [self | content] && both-edges? のようなものにできます。

興味深い点として、これにより scrollbar-gutter: match-parent の必要性が 軽減される可能性があります。 親に scrollbar-gutter: stable または scrollbar-gutter: always を、 選択した子に scrollbar-gutter: match-parent を指定して対処する状況は、 代わりに親を scrollbar-gutter: auto のままにし、 関連する子に scrollbar-avoid: self または scrollbar-avoid: content を使用することで 対処できるように思われます。

force
force キーワードが存在する場合、 overflowauto または scroll の場合に加え、 visiblehidden、または clip の場合にも、stable および always が効果を持ちます。 これによってスクロールバーが表示されるわけではなく、スクロールバーガターのみが表示されます。
この値を使用すると、作者は スクローラーに隣接する要素の辺に、 スクローラー自体で確保されているものと同じ量の空間を確保し、 内容を視覚的に揃えることができます。 クラシックスクロールバーの場合にパディングを追加し、オーバーレイスクロールバーの場合には追加しないことでも、 同じ効果を実現できます。 ただし、この値がなければ、作者がパディングを追加するべきかどうか、 また追加する場合はどれだけ追加するべきかを確実に判断する方法がありません。

具体的な例は、執筆時点の Gmail の UI で確認できます: Gmail は、メール一覧の上にあるツールバー内のコントロールを 一覧内のコントロールと揃えようとしますが、 必ずしも成功しません。 次に2つのスクリーンショットを示します。 1つはクラシックスクロールバーを有効にしたもの(OS レベル)で、 Gmail は一覧の上にあるツールバーへ追加するべきパディングの量を正しく推測しています。 もう1つはオーバーレイスクロールバーを有効にしたもので、 Gmail は誤ってパディングを追加し、 配置をずらしています (議論している点を強調するために、オレンジ色の点線を手動で追加しています)。

クラシックスクロールバーを使用した Gmail UI

				スクローラー内外のアイコンが正しく揃っています:
				スクローラー内のアイコンは、スクロールバーによってコンテナーの右端から左へ移動し、
				スクローラー外のアイコンは、パディングによって同じ量だけ左へ移動しています。
オーバーレイスクロールバーを使用した Gmail UI

				スクローラー内外のアイコンが揃っていません:
				スクローラー内のアイコンはコンテナーの右端に接していますが、
				スクローラー外のアイコンは不要なパディングによって左へ移動しています。

ツールバー内のこの間隔を パディングではなく scrollbar-gutter: stable force で作成すれば、 どちらの場合でもアイコンの配置を維持できます。 また、スクロールバーのサイズが一般的でないシステムでも配置を維持できます。

この値のために、 このプロパティはスクロールコンテナーだけではなく、 すべての要素に適用されるようになっています。 これにより、例に示す overflow: visible 要素にも適用できます。 ユーザーエージェントは既存のコードだけに依存してガターを配置できず、 これまでガターを持てなかった要素にも配置する必要があるため、 実装が困難になる可能性があります。 overflow が適用されるすべての要素に制限しても、 ユースケースへの悪影響はおそらくなく、 実装を容易にできる可能性があります。 ただし、それでもスクロールコンテナーだけに 制限するより難しい可能性があります。

上記の 実装上の課題に加えて、 この値が意図するほど確実に問題を解決できるかは明確ではありません。 スクロールバーとそのガターのサイズおよび側は UA によって定義されるため、 要素ごとに異なる可能性があります。 スクロールバーの外観と位置はユーザーエージェントに委ねられるため、 それらに影響を与える可能性のあるプロパティの一覧に制限はありません。 direction(HTML の dir 属性の設定を通じて)や scrollbar-width などのプロパティを設定すれば、 要素がスクロール可能である場合にユーザーエージェントがどのようなスクロールバーを作成するかを 判断するための十分なコンテキストが得られ、 適切な場所に同じサイズのガターを作成できる可能性はありますが、 保証はできません。

仕様の初期の 版では、 この値が例で説明した効果を実現する唯一の方法でした。 しかし、その後、scrollbar-gutter: stableoverflow: hidden 要素に適用されるようになりました。 overflow: hidden の適用には、 このコンテキストでは望ましくない可能性がある他の効果もありますが、 scrollbar-gutter: stableoverflow: hidden の 組み合わせは、scrollbar-gutter: stable force と同じ方法で間隔を追加します。 また、特に上記の他の問題を考慮すると、 十分な回避策になる可能性があります。

match-parent
親がスクロールバーガター(または両方の辺にガター)を持つブロックレベルボックスでは、 ボックスが親のガターと同じ側に、同じ幅の スクロールバーガターを持つようになります。 さらに、 そのガターは親ボックスのガターと重なるようになります。
<fake-maybe-placeholder bs-autolink-syntax='''scrollbar-gutter: match-parent'''>scrollbar-gutter: match-parent</fake-maybe-placeholder> ボックスのガターは、その親のガターと重なります。

scrollbar-gutter: match-parent を持つボックスが、 ガターが想定される側にゼロでない 境界線またはマージンを持つ場合、 そのボックスのガターのサイズは parent.gutter - child.border - child.margin となり、 ガター+境界線+マージンが親のガターと重なります。

scrollbar-gutter/ match-parent を持つボックス自体がスクロールコンテナーである場合、 スクロールバーの種類、 その overflow プロパティ、 および scrollbar-gutter プロパティの他の値によっては、 自身のスクロールバー用に追加のガターが必要になる場合があります。 これは、match-parent 値のために追加されるガター量とは別に追加され、 親のガターとは重なりません。

match-parent により、子の背景がガターへ入り込むスクローラー
クラシックスクロールバー、overflow: auto、および scrollbar-gutter: stable を持つ スクロールコンテナー内の match-parent ボックス
スクロールバーがない場合、match-parent 要素の背景がガター内に表示されます。
別のスクロールコンテナー内にある match-parent を持つスクロール可能なボックス
要素には、自身のスクロールバー用と親に一致させるための、2つのガターがあります。
別のスクロールコンテナー内にある、双方向テキストを使用した match-parent を持つスクロール可能なボックス
要素の反対側には、自身のスクロールバー用と親に一致させるための、2つのガターがあります。
別のスクロールコンテナー内にある、双方向テキストを使用した scrollbar-gutter:match-parent stable を持つスクロール可能なボックス
要素の反対側には、自身のスクロールバー用(オーバーフローしていないため非表示)と親に一致させるための、2つのガターがあります。
注: 次の表は、異なる種類のスクロールバーにおける overflowscrollbar-gutter の相互作用を要約し、 どの場合にスクロールバーガター用の空間が確保されるかを示します。
スクロールバーガター用の空間を確保するべきか?
overflow scrollbar-gutter クラシックスクロールバー オーバーレイスクロールバー (オーバーフローしているかどうかにかかわらず)
オーバーフローしている オーバーフローしていない
scroll auto はい はい
stable はい はい
always はい はい はい
auto auto はい
stable はい はい
always はい はい はい
hidden auto
stable はい はい
always はい はい はい
visible, clip auto
stable force の場合 force の場合
always force の場合 force の場合 force の場合

附属書 C: プライバシーに関する 考慮事項

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

附属書 D: セキュリティに関する考慮事項

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

変更点

最近の変更点

2017年6月の 作業草案以降の主な変更点は次のとおりです:

レベル 3 以降の変更点

未定

謝辞

特に、 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]

この仕様の例は、「たとえば」という語で導入されるか、 class="example" によって規範的な文章から分離されます。 次に例を示します:

これは、参考情報としての例です。

参考情報としての注は「注」という語で始まり、 class="note" によって規範的な文章から分離されます。 次に例を示します:

注: これは参考情報としての注です。

勧告事項は、特別な注意を喚起するようにスタイル指定された規範的な節であり、 <strong class="advisement"> によって他の規範的な文章から分離されます。 次に例を示します: UA はアクセス可能な代替を提供しなければなりません。

適合性クラス

この仕様への適合性は、 次の3つの適合性クラスについて定義されます:

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

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

レンダラーは、適切な仕様で定義されているとおりに スタイルシートを解釈することに加え、 この仕様で定義されるすべての機能を正しく解析し、 それに従って文書をレンダリングすることによってサポートする場合、 この仕様に適合します。ただし、デバイスの制限によって UA が文書を正しくレンダリングできない場合でも、 UA が不適合になることはありません。(たとえば、モノクロモニター上で 色をレンダリングすることを UA に要求するものではありません。)

オーサリングツールは、 一般的な CSS 文法およびこのモジュール内の各機能の 個別の文法に従って構文的に正しく、 このモジュールで説明されるスタイルシートの その他すべての適合性要件を満たすスタイルシートを書き出す場合、 この仕様に適合します。

部分的な実装

作者が前方互換の解析規則を利用して フォールバック値を割り当てられるようにするため、CSS レンダラーは、使用可能なレベルで サポートしていない at 規則、プロパティ、プロパティ値、キーワード、 およびその他の構文構造を無効として扱い(必要に応じて無視しなければなりません。 特に、ユーザーエージェントは、単一の複数値プロパティ宣言において、 サポートされていない成分値を選択的に無視し、サポートされている値を受け入れてはなりません: いずれかの値が無効と見なされる場合 (サポートされていない値は無効と見なされなければなりません)、CSS では宣言全体を 無視する必要があります。

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

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

非実験的な実装

仕様が勧告候補の段階に達すると、 非実験的な実装が可能になります。実装者は、 仕様に従って正しく実装されていることを実証できる 勧告候補レベルの機能について、接頭辞のない実装を リリースするべきです。

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

テストケースおよび実装報告書の提出に関する詳細情報は、 CSS ワーキンググループの Web サイト https://www.w3.org/Style/CSS/Test/ で確認できます。 質問は、public-css-testsuite@w3.org メーリング リストへ送信してください。

索引

この仕様で定義される 用語

参照によって定義される 用語

参考文献

規範的参考文献

[COMPAT]
Mike Taylor. 互換性標準. 現行標準。URL: https://compat.spec.whatwg.org/
[CSS-BACKGROUNDS-3]
Bert Bos; Elika Etemad; Brad Kemper. CSS 背景および境界モジュール レベル 3. 2023年2月14日。勧告候補。URL: https://www.w3.org/TR/css-backgrounds-3/
[CSS-BOX-4]
Elika Etemad. CSS ボックスモデルモジュール レベル 4. 2022年11月3日。作業草案。URL: https://www.w3.org/TR/css-box-4/
[CSS-BREAK-3]
Rossen Atanassov; Elika Etemad. CSS 断片化モジュール レベル 3. 2018年12月4日。勧告候補。URL: https://www.w3.org/TR/css-break-3/
[CSS-BREAK-4]
Rossen Atanassov; Elika Etemad. CSS 断片化モジュール レベル 4. 2018年12月18日。作業草案。URL: https://www.w3.org/TR/css-break-4/
[CSS-CASCADE-5]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSS カスケードおよび継承 レベル 5. 2022年1月13日。勧告候補。URL: https://www.w3.org/TR/css-cascade-5/
[CSS-CONTAIN-1]
Tab Atkins Jr.; Florian Rivoal. CSS 封じ込めモジュール レベル 1. 2022年10月25日。勧告。URL: https://www.w3.org/TR/css-contain-1/
[CSS-CONTAIN-2]
Tab Atkins Jr.; Florian Rivoal; Vladimir Levin. CSS 封じ込めモジュール レベル 2. 2022年9月17日。作業草案。URL: https://www.w3.org/TR/css-contain-2/
[CSS-CONTENT-3]
Elika Etemad; Dave Cramer. CSS 生成内容モジュール レベル 3. 2019年8月2日。作業草案。URL: https://www.w3.org/TR/css-content-3/
[CSS-DISPLAY-3]
Tab Atkins Jr.; Elika Etemad. CSS 表示モジュール レベル 3. 2023年3月16日。勧告候補。URL: https://www.w3.org/TR/css-display-3/
[CSS-INLINE-3]
Dave Cramer; Elika Etemad. CSS インラインレイアウトモジュール レベル 3. 2022年11月14日。作業草案。URL: https://www.w3.org/TR/css-inline-3/
[CSS-MASKING-1]
Dirk Schulze; Brian Birtles; Tab Atkins Jr.. CSS マスキングモジュール レベル 1. 2021年8月5日。勧告候補。URL: https://www.w3.org/TR/css-masking-1/
[CSS-MULTICOL-1]
Florian Rivoal; Rachel Andrew. CSS 段組みレイアウト モジュール レベル 1. 2021年10月12日。勧告候補。URL: https://www.w3.org/TR/css-multicol-1/
[CSS-OVERFLOW-3]
Elika Etemad; Florian Rivoal. CSS オーバーフローモジュール レベル 3. 2022年12月31日。作業草案。URL: https://www.w3.org/TR/css-overflow-3/
[CSS-POSITION-3]
Elika Etemad; Tab Atkins Jr.. CSS 位置指定レイアウト モジュール レベル 3. 2023年2月17日。作業草案。URL: https://www.w3.org/TR/css-position-3/
[CSS-PSEUDO-4]
Daniel Glazman; Elika Etemad; Alan Stearns. CSS 擬似要素モジュール レベル 4. 2022年12月30日。作業草案。URL: https://www.w3.org/TR/css-pseudo-4/
[CSS-REGIONS-1]
Rossen Atanassov; Alan Stearns. CSS 領域モジュール レベル 1. 2014年10月9日。作業草案。URL: https://www.w3.org/TR/css-regions-1/
[CSS-SIZING-3]
Tab Atkins Jr.; Elika Etemad. CSS ボックスサイジングモジュール レベル 3. 2021年12月17日。作業草案。URL: https://www.w3.org/TR/css-sizing-3/
[CSS-SYNTAX-3]
Tab Atkins Jr.; Simon Sapin. CSS 構文モジュール レベル 3. 2021年12月24日。勧告候補。URL: https://www.w3.org/TR/css-syntax-3/
[CSS-TEXT-3]
Elika Etemad; Koji Ishii; Florian Rivoal. CSS テキストモジュール レベル 3. 2023年2月13日。勧告候補。URL: https://www.w3.org/TR/css-text-3/
[CSS-TEXT-4]
Elika Etemad; ほか. CSS テキストモジュール レベル 4. 2023年3月1日。作業草案。URL: https://www.w3.org/TR/css-text-4/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS 値および単位 モジュール レベル 3. 2022年12月1日。勧告候補。URL: https://www.w3.org/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS 値および単位 モジュール レベル 4. 2022年10月19日。作業草案。URL: https://www.w3.org/TR/css-values-4/
[CSS-WRITING-MODES-3]
Elika Etemad; Koji Ishii. CSS 書字モード レベル 3. 2019年12月10日。勧告。URL: https://www.w3.org/TR/css-writing-modes-3/
[CSS-WRITING-MODES-4]
Elika Etemad; Koji Ishii. CSS 書字モード レベル 4. 2019年7月30日。勧告候補。URL: https://www.w3.org/TR/css-writing-modes-4/
[CSS2]
Bert Bos; ほか. カスケーディングスタイルシート レベル 2 改訂 1(CSS 2.1)仕様. 2011年6月7日。勧告。URL: https://www.w3.org/TR/CSS21/
[CSS22]
Bert Bos. カスケーディングスタイルシート レベル 2 改訂 2(CSS 2.2) 仕様. 2016年4月12日。作業草案。URL: https://www.w3.org/TR/CSS22/
[CSS3-FLEXBOX]
Tab Atkins Jr.; ほか. CSS フレキシブルボックスレイアウトモジュール レベル 1. 2018年11月19日。勧告候補。URL: https://www.w3.org/TR/css-flexbox-1/
[CSS3-GRID-LAYOUT]
Tab Atkins Jr.; ほか. CSS グリッドレイアウトモジュール レベル 1. 2020年12月18日。勧告候補。URL: https://www.w3.org/TR/css-grid-1/
[RFC2119]
S. Bradner. 要件レベルを示すために RFC で使用する キーワード. 1997年3月。現行のベストプラクティス。URL: https://datatracker.ietf.org/doc/html/rfc2119
[SELECT]
Tantek Çelik; ほか. セレクター レベル 3. 2018年11月6日。勧告。URL: https://www.w3.org/TR/selectors-3/
[UAX29]
Christopher Chapman. Unicode テキスト 分割. 2022年8月26日。Unicode 標準附属書 #29。URL: https://www.unicode.org/reports/tr29/tr29-41.html

参考情報

[CSS-OVERFLOW-4]
David Baron; Florian Rivoal. CSS オーバーフローモジュール レベル 4. 2022年12月31日。作業草案。URL: https://www.w3.org/TR/css-overflow-4/
[CSS-PAGE-3]
Elika Etemad; Simon Sapin. CSS ページメディアモジュール レベル 3. 2018年10月18日。作業草案。URL: https://www.w3.org/TR/css-page-3/
[CSS-SCROLLBARS-1]
Tantek Çelik; Rossen Atanassov; Florian Rivoal. CSS スクロールバースタイルモジュール レベル 1. 2021年12月9日。勧告候補。URL: https://www.w3.org/TR/css-scrollbars-1/
[CSS-UI-4]
Florian Rivoal. CSS 基本ユーザーインターフェイスモジュール レベル 4. 2021年3月16日。作業草案。URL: https://www.w3.org/TR/css-ui-4/
[CSS1]
Håkon Wium Lie; Bert Bos. カスケーディングスタイルシート レベル 1. 2018年9月13日。勧告。URL: https://www.w3.org/TR/CSS1/
[CSS3-MARQUEE]
Bert Bos. CSS マーキーモジュール レベル 3. 2014年10月14日。注記。URL: https://www.w3.org/TR/css3-marquee/
[CSS3GCPM]
Dave Cramer. ページメディア向け CSS 生成内容 モジュール. 2014年5月13日。作業草案。URL: https://www.w3.org/TR/css-gcpm-3/
[HTML]
Anne van Kesteren; ほか. HTML 標準. 現行標準。URL: https://html.spec.whatwg.org/multipage/

プロパティ索引

名前 初期値 適用対象 継承 パーセント値 アニメーション型 正規順序 算出値 論理プロパティグループ
-webkit-line-clamp none | <integer [1,∞]> none 個々のプロパティを参照 個々のプロパティを参照 該当なし 個々のプロパティを参照 文法に従う 個々のプロパティを参照
block-ellipsis none | auto | <string> none ブロックコンテナー する 該当なし 離散的 文法に従う 指定値
continue auto | discard auto ブロックコンテナーおよび段組みコンテナー しない 該当なし 離散的 文法に従う 指定されたキーワード
line-clamp none | <integer [1,∞]> <'block-ellipsis'>? none 個々のプロパティを参照 個々のプロパティを参照 該当なし 個々のプロパティを参照 文法に従う 個々のプロパティを参照
max-lines none | <integer [1,∞]> none 領域分割を捕捉する断片化コンテナーでもあるブロックコンテナー しない 該当なし 算出値の型による 文法に従う キーワード none または整数
overflow-clip-margin <visual-box> || <length [0,∞]> 0px overflow が適用されるボックス しない 個々のプロパティを参照 個々のプロパティを参照 文法に従う 個々のプロパティを参照
overflow-clip-margin-block <visual-box> || <length [0,∞]> 0px overflow が適用されるボックス しない 個々のプロパティを参照 個々のプロパティを参照 文法に従う 個々のプロパティを参照
overflow-clip-margin-block-end <visual-box> || <length [0,∞]> 0px overflow が適用されるボックス しない 個々のプロパティを参照 <visual-box> の値が一致する場合は算出値ごと、それ以外の場合は離散的 文法に従う 算出された <length> および <visual-box> キーワード overflow-clip-margin
overflow-clip-margin-block-start <visual-box> || <length [0,∞]> 0px overflow が適用されるボックス しない 個々のプロパティを参照 <visual-box> の値が一致する場合は算出値ごと、それ以外の場合は離散的 文法に従う 算出された <length> および <visual-box> キーワード overflow-clip-margin
overflow-clip-margin-bottom <visual-box> || <length [0,∞]> 0px overflow が適用されるボックス しない 個々のプロパティを参照 <visual-box> の値が一致する場合は算出値ごと、それ以外の場合は離散的 文法に従う 算出された <length> および <visual-box> キーワード overflow-clip-margin
overflow-clip-margin-inline <visual-box> || <length [0,∞]> 0px overflow が適用されるボックス しない 個々のプロパティを参照 個々のプロパティを参照 文法に従う 個々のプロパティを参照
overflow-clip-margin-inline-end <visual-box> || <length [0,∞]> 0px overflow が適用されるボックス しない 個々のプロパティを参照 <visual-box> の値が一致する場合は算出値ごと、それ以外の場合は離散的 文法に従う 算出された <length> および <visual-box> キーワード overflow-clip-margin
overflow-clip-margin-inline-start <visual-box> || <length [0,∞]> 0px overflow が適用されるボックス しない 個々のプロパティを参照 <visual-box> の値が一致する場合は算出値ごと、それ以外の場合は離散的 文法に従う 算出された <length> および <visual-box> キーワード overflow-clip-margin
overflow-clip-margin-left <visual-box> || <length [0,∞]> 0px overflow が適用されるボックス しない 個々のプロパティを参照 <visual-box> の値が一致する場合は算出値ごと、それ以外の場合は離散的 文法に従う 算出された <length> および <visual-box> キーワード overflow-clip-margin
overflow-clip-margin-right <visual-box> || <length [0,∞]> 0px overflow が適用されるボックス しない 個々のプロパティを参照 <visual-box> の値が一致する場合は算出値ごと、それ以外の場合は離散的 文法に従う 算出された <length> および <visual-box> キーワード overflow-clip-margin
overflow-clip-margin-top <visual-box> || <length [0,∞]> 0px overflow が適用されるボックス しない 個々のプロパティを参照 <visual-box> の値が一致する場合は算出値ごと、それ以外の場合は離散的 文法に従う 算出された <length> および <visual-box> キーワード overflow-clip-margin
text-overflow [ clip | ellipsis | <string> | fade | <fade()> ]{1,2} clip ブロックコンテナー しない 行ボックスの幅を参照 算出値の型による 文法に従う 指定どおり。ただし長さは絶対値に変換される

課題索引

最終化された時点でレベル 3 の内容を コピーする。
最終化された時点でレベル 3 の内容を コピーする。
overflow置換要素への適用については、現在も検討が 続けられている。 [課題 #7144]
overflow-clip-margin置換要素への適用については、現在も検討が 続けられている。 [課題 #7144]
この節は [CSS-OVERFLOW-3] と再同期する必要があるかもしれない。
ブラウザー間でフェードが同一になるように、 フェードアウトの算出方法を 定義する必要があるだろうか? おそらく mask-image: linear-gradient(to right, rgba(0,0,0,1), rgba(0,0,0,0)) のようなものにすべきだが、 行の該当部分にのみ適用する。
行ボックスが短すぎて フェード効果を希望する長さで表示できない場合、 効果を取り除くべきか、 収まるまで適用距離を縮めるべきか、 それともフェードの終端を切り取るべきか?
行ボックスからはみ出すものや、 行ボックスに重なるものを どのように扱うべきか? フェードは、行の論理的な内容、 行ボックスの物理的な領域、 それとも両者の交差領域のいずれに適用すべきか?
注記を説明する RTL の例示図をここに挿入する。
これは、ほかの種類の断片化分割(ページ、段など)にも適用すべきか?
当面の間、 実験的な実装には、この一括指定プロパティとその個別指定プロパティによって定義される 完全な挙動に従いつつ、 作者には一括指定プロパティのみを公開することを推奨する。 これは、さらなる調整、 とりわけ個別指定プロパティとその値の名称変更の可能性に 対応しやすくするためである。
このプロパティは、[CSS-REGIONS-1]region-fragment プロパティを一般化して置き換えることを意図している。 この仕様で十分に安定した時点で、領域仕様から region-fragment を削除し、 これに置き換えるべきである。
OM への影響が明確に定義されていることを確認する [課題 #2970]
静的位置が破棄された内容内にある位置指定された要素は、レンダリングされないのだろうか? シドニー対面会議での議論も参照。 [課題 #2971]
この節は非常に実験的である。 追加のユースケースを解決するために continue プロパティの能力を 拡張しようとする現在の試みを記録している。 ただし、現時点では合意が得られていない。 議論を促すためにここで提示しているが、 非実験的な実装は推奨されない。
このプロパティとその値の命名は暫定的なものである。 当初は "fragmentation: auto | none | break | clone | page" として https://lists.w3.org/Archives/Public/www-style/2015Jan/0357.html で提案されたが、どの命名がより適切かについては、まだ広範な合意がない。
このプロパティは region-fragment を一般化して置き換えることを意図している。 この仕様で十分に安定した時点で、領域仕様から region-fragment を削除し、 これに置き換えるべきである。
これは、指定値が算出値となる§ 5.3 オーバーフローの断片化: continue プロパティの定義とは異なる。 どちらのモデルが優れているか?
段組み内の段を選択できる疑似要素を導入する場合、 その疑似要素では auto の算出値が auto になると指定するか、 新しい値を導入して auto の算出値がその値になるようにする必要がある (しかし、段ではないものに対してその値は何に算出されるのか?)。
この節を執筆する
ページは @page 規則でスタイル指定できるようにすべきである。入れ子になったページではどのように機能するのか?
従来のページ付け(印刷時など)は、 auto の算出値に何らかの特別な処理を施すことで表現すべきか、 それとも UA スタイルシートに次の内容を挿入することで表現すべきか:
@media (overflow-block: paged), (overflow-block: optional-paged) {
  :root {
    continue: paginate;
  }
}
従来のページ付け(印刷時など)では、 ページボックスが :root の疑似要素の子になるのではなく、 :root がページボックスに包含されるものと想定されている。 断片ボックスに似たものを使って、この問題に対処できるだろうか? あるいは、:root 内のページボックス内に、:root を再現する断片ボックスを配置できないだろうか?
通常の CSS ボックスの子である場合、ページボックスモデルはどのように機能するのか?
[CSS3GCPM] の当初の提案と Opera の実装では、 paginate の代わりに次の 4 つの値を使用していた: "paged-x | paged-y | paged-x-controls | paged-y-controls"。 このプロパティにもこれらの値を含めるべきか、 それとも別個のプロパティとして扱う方が適切か? (例:"pagination-layout: auto | horizontal | vertical"、"pagination-controls: auto | none")
一度に 1 ページだけでなく、 N ページを同時に表示できるようにすべきか? これは、次のような "pagination-layout" の値にできるだろうか: "pagination-layout: horizontal 2;"
Brad Kemper は、複数ページの表示にも対応する、 ページ付けと断片オーバーフローを組み合わせるためのモデルを提案している。 https://www.w3.org/mid/FF1704C5-D5C1-4D6F-A99D-0DD094036685@gmail.com
ページ付けされたオーバーフローの現在の実装では、 [CSS3GCPM] 草案で提案された overflow-style プロパティ ([CSS3-MARQUEE] の提案とも一致する)や、 ここで説明する continue プロパティではなく、 overflow/overflow-x/overflow-y プロパティを使用している。
それとも、要素の次の兄弟であるかのように扱うのだろうか? これがほかのボックスレベルの補正とどのように相互作用するのかを 正確に明らかにする必要がある。
段組みコンテナーを定義してはいるが
外側の断片化コンテキストへ分割する強制分割は、 単一の断片ボックスの新しい断片を生成すべきか、 それとも新しい断片ボックスを生成すべきか?
混乱を少し抑えるために、ここでは断片 ボックス以外の用語を探すべきだろうか?
別の種類の断片化コンテキスト内で分割された要素の各部分を スタイル指定できるようにしたい場合はどうするのか? この規則では、そのような機能の名称として最も論理的に見えるにもかかわらず、 ::nth-fragment() をその目的に使用することはできない。
continue: fragments は、少なくとも一部の表の構成要素には 適用されず、 おそらくほかの要素にも適用されないことを指定すべきである。 具体的にどの要素かを決定する必要がある。
この仕様では、 どの種類の断片化コンテキストが作成されるのかを示す必要がある。 そうすることで、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 にも適用すべきか?
この節では、追加のユースケースを解決するために scrollbar-gutter プロパティを 拡張しようとする現在の試みを記録している。 ただし、現時点では合意が得られていない。 議論を促すためにここで提示しているが、 非実験的な実装は推奨されない。
Apple はこの値の追加に消極的である。 作者がこの値を広範に使用しすぎて、 インタラクティブ要素による正当な理由がない場合にもオーバーレイスクロールバー用のガターを挿入し、 オーバーレイスクロールバーによる省スペース上の利点を損なう可能性があるためである。

代替案が提案されている: 焦点となるのはインタラクティブ要素であるため、 スクロールバーの下に配置されることを避ける必要がある要素に 適用するプロパティを用意してはどうか。 有効にすると、要素がオーバーレイスクロールバーの下に配置される場合に限り、 要素の右または左のマージンを必要に応じて ちょうど適切な値だけ拡大し、 それ以外の場合は要素を変更しない。

さらに、追加の切り替えによって、 要素の inline-end と inline-start の両方のマージンを拡大するか、 どちらも拡大しないようにできる可能性がある。 これは通常、可視の境界線または背景を持つ、 スクローラーのブロックレベルの子孫に役立つ可能性がある: オーバーレイスクロールバーとの衝突を避けるために片側だけに空間を追加すると、 スクロールバーが消えたときに中央からずれて見える。 両側のマージンを増やせば、それを回避できる。

さらに別の可能性として、要素を保護するためにマージンを拡大するか、 要素の内容を保護するためにパディングを拡大するかを選択できるようにすることが考えられる。

構文は次のようなものにできる: scrollbar-avoid: none | [self | content] && both-edges?

興味深い点として、これにより scrollbar-gutter: match-parent の必要性が軽減される可能性がある。 親に scrollbar-gutter: stable または scrollbar-gutter: always を指定し、 選択した子に scrollbar-gutter: match-parent を指定することで対処していた状況は、 代わりに親を scrollbar-gutter: auto のままにして、 関連する子に scrollbar-avoid: self または scrollbar-avoid: content を 使用することで対処できるように思われる。

この値があるため、このプロパティは単なるスクロールコンテナーだけでなく、 すべての要素に適用されるようにされている。 これにより、例に示す overflow: visible の要素にも 適用できる。 これは実装上の困難を引き起こす可能性がある。 ユーザーエージェントはガターを配置するために既存のコードだけに依存できず、 以前はガターを持つことができなかった要素にも配置しなければならない可能性があるためである。 適用対象を overflow が適用されるすべての要素に制限しても、 ユースケースへの悪影響はおそらくなく、 実装が容易になる可能性がある。 ただし、それでもスクロールコンテナーだけに制限するより 困難である可能性がある。
上記の実装上の課題に加え、 この値が意図したほど確実に問題を解決できるかは明らかではない。 スクロールバーとそのガターの寸法および配置側は UA が定義するため、 要素によって異なる可能性がある。 スクロールバーの外観と位置はユーザーエージェントに委ねられているため、 それらに影響を与え得るプロパティの一覧に限りはない。 HTML の dir 属性を設定することで direction を設定したり、 scrollbar-width を設定したりすれば、 その要素がスクロール可能であった場合にどのようなスクロールバーを作成するかを ユーザーエージェントが判断するのに十分なコンテキストが得られ、 適切な位置に同じ寸法のガターを作成できる可能性が高いが、 それを保証することはできない。
仕様の初期の版では、 この値が例で説明した効果を実現する唯一の方法であった。 しかし、その後 scrollbar-gutter: stable は、 overflow: hidden の要素にも 適用されるようになった。 overflow: hidden の適用には、そのコンテキストで望ましくない可能性のある ほかの効果もあるが、 scrollbar-gutter: stableoverflow: hidden の組み合わせは、scrollbar-gutter: stable force と同じように間隔を追加するため、 特に上記のほかの課題を考慮すれば、 十分な回避策となる可能性がある。
未定