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

W3C作業草案

この文書の詳細
このバージョン:
https://www.w3.org/TR/2023/WD-css-overflow-3-20230329/
最新公開バージョン:
https://www.w3.org/TR/css-overflow-3/
編集者ドラフト:
https://drafts.csswg.org/css-overflow-3/
以前のバージョン:
履歴:
https://www.w3.org/standards/history/css-overflow-3
フィードバック:
CSSWG課題リポジトリ
仕様内インライン
編集者:
Elika J. Etemad / fantasai (招待専門家)
Florian Rivoal (Bloomberg代表)
元編集者:
L. David Baron (Mozilla)
この仕様の編集提案:
GitHub Editor

概要

このモジュールは、視覚メディアにおけるスクロール可能なオーバーフロー処理に関連するCSSの機能を含みます。 このレベルでは、既存のオーバーフロー機能の正確な仕様の完成に焦点を当てています。 overflowプロパティとそのロングハンド、 text-overflowプロパティが含まれます。 また、[CSS-CONTAIN-1]および[CSS-CONTAIN-2]のサポートのために導入された追加機能も定義されています:overflow: clipおよびoverflow-clip-marginプロパティです。

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

この文書のステータス

このセクションは、公開時点でのこの文書のステータスを説明します。 現在のW3C出版物の一覧と、この技術レポートの最新改訂版は、W3C技術レポートインデックス https://www.w3.org/TR/で確認できます。

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

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

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

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

この文書はW3C特許ポリシーの下で運営されるグループによって作成されました。 W3Cは、グループの成果物に関連して提出された特許開示の公開リストを管理しています。 そのページには特許開示の方法も記載されています。 個人が本質的なクレームを含むと信じる特許を実際に知っている場合、W3C特許ポリシー第6節に従って情報を開示する必要があります。

overflowとそのロングハンドの説明は、 以前の作業草案や[CSS2]よりも かなり完全かつ正確であると考えられていますが、いくつかの疑問や課題が残っています。 'overflow: clip'およびoverflow-clip-marginは比較的新しく、 実装経験が不足しています。text-overflowは安定しており、 [CSS-UI-3]での以前の定義から変更はありません。 実装経験による完全な検証はまだですが、 line-clampとそのロングハンドの設計は概ね完成と考えられています。 以前のバージョンでは、フラグメンテーションを用いて新しいボックスを作成することでオーバーフローを処理する実験的な新しいアイデアが含まれていました。 これらのアイデアは放棄されたわけではなく、レベル4まで延期されています。 このレベルが安定した後、フラグメント化オーバーフローの作業が再開されます。

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

「リスクあり」はW3Cプロセスの専門用語であり、必ずしも機能が削除や遅延の危険にあることを意味しません。 WGがその機能の相互運用可能な実装がタイムリーに困難であると考えていることを示し、 このようにマークすることで、提案勧告段階への移行時に必要に応じて機能を削除できるようになります。 その際、新しい候補勧告を公開せずに機能を削除できます。

1. はじめに

CSS Level 1 [CSS1]では、指定されたサイズの要素内に収まりきらないコンテンツを配置することは、一般的に著者のミスとされていました。 その結果、コンテンツが要素の境界を超えて拡張され、他の要素と重なってしまう可能性がありました。

CSS Level 2 [CSS2]では、overflowプロパティが導入され、 オーバーフローをスクロールで処理できるようになり、もはや著者のミスではなくなりました。 また、オーバーフローをクリッピングで処理することも指定でき、 著者がコンテンツを表示しない意図の場合に適しています。

本仕様では、長らく事実上使われてきたoverflow-xおよびoverflow-y プロパティを導入し、 clip値を追加し、 オーバーフロー処理をより詳細に定義しています。

[何か max-lines に関する記述]

注: 本仕様は、text-overflowプロパティの定義も再掲しています。 これは[CSS-UI-3]で以前に定義されたもので、 追加や修正はなく、text-overflowblock-ellipsisを併せて提示するためです。

1.1. 値の定義

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

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

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

本モジュールは、[CSS2]11.1 Overflow and clippingおよび [CSS-UI-3]5.2. Overflow Ellipsis: the text-overflow propertyで定義された機能を置き換え(上書き)および拡張します。

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

CSSでは、overflowという用語は、 ボックスのいずれかの端(content edgepadding edgeborder edgemargin edge)を超えて コンテンツが拡張することを指します。 この用語は、オーバーフローを引き起こす要素や機能、 それらが占める非矩形領域、 または一般的にはその領域を囲む最小の矩形として解釈される場合があります。 ボックスのオーバーフローは、そのボックス自身のレイアウトとスタイリング、 およびcontaining block chainにそのボックスが含まれるすべての子孫によって計算されます。

多くの場合、overflowは、 ボックス自身の境界とプロパティ、 そして各子のoverflowから計算できます。 ただし、常にそうとは限りません。例えば、 子要素の一部にtransform-style: preserve-3d [CSS3-TRANSFORMS]が使われている場合、 その子孫でtransform-style: preserve-3dが使われているものも調べる必要があります。

オーバーフローには2種類あり、UAによって異なる目的で使用されます:

2.1. インクオーバーフロー

インクオーバーフローは、 ボックスおよびその内容のうち、ボックスのborder boxの外側に視覚効果を生じる部分です。 インクオーバーフローは、レイアウトに影響しない、またはscrollable overflow areaを拡張しないと定義された描画効果のオーバーフローです。 例:box-shadowborder imagestext decoration、 負のサイドベアリングやem box外に伸びるアセンダー/ディセンダーを持つグリフ、outlinesなど。

CSSの一部の効果(例えば、text-shadow [CSS-TEXT-3]box-shadow [CSS-BACKGROUNDS-3]のぼかしなど)は理論上無限であり、 どの範囲まで視覚的に影響するか定義されていないため、インクオーバーフローの範囲は未定義です。

インクオーバーフロー領域は、 ボックスおよびその内容のインクオーバーフローが占める非矩形領域です。 インクオーバーフロー矩形は、 ボックスの軸に揃った最小の矩形で、インクオーバーフロー領域を含みます。 インクオーバーフロー矩形はボックスの座標系では矩形ですが、 変形(transform)によって他の座標系では非矩形になる場合があります。[CSS3-TRANSFORMS]

replacedコンテンツのオーバーフローは常にインクオーバーフロースクロール可能なオーバーフローではない)です。

2.2. スクロール可能なオーバーフロー

スクロール可能なオーバーフローは、 ボックスのpadding edgeの外側に拡張され、スクロール機構が必要なものの集合です。

スクロール可能なオーバーフロー領域は、スクロール可能なオーバーフローが占める非矩形領域であり、スクロール可能なオーバーフロー矩形は、 ボックスの軸に揃った最小の矩形で、スクロール可能なオーバーフロー領域を含みます。

スクロール可能なオーバーフロー領域は以下の和集合です:

さらに、Web互換性の制約(著者がレガシーバグを利用して、視覚的な読者からは隠しつつ検索エンジンや音声出力には表示するため)により、 UAはnegative scrollable overflow region内のコンテンツをクリップしなければならず、 スクロール可能なオーバーフローscroll originの反対側にないかのように振る舞います。

注: スクロール可能なオーバーフロー矩形は 常にボックス自身の座標系では矩形ですが、変形によって他の座標系では非矩形になる場合があります。[CSS3-TRANSFORMS] そのため、実際には不要な場合でもスクロールバーが表示されることがあります。

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

ボックスのoverflowは、可視またはクリップされる場合があります。 CSSでは、ボックスをscroll containerとして、クリップされた部分のスクロール可能なオーバーフロー領域をユーザーがスクロールして表示できるようにすることも可能です。 scroll containerの視覚的ビューポート(スクロール可能なオーバーフロー領域を表示する部分)は そのpadding boxと一致し、scrollportと呼ばれます。 ボックスのnearest scrollportは、最も近いscroll container祖先のscrollportです。

スクロール操作は、ユーザーによる(スクロールバー操作、タッチスクリーンのスワイプ、キーボード操作など) またはスクリプトによって開始できます (例:scrollIntoView()focus() APIなど)。 スクロール操作が行われる前のスクロール可能なオーバーフロー矩形scrollport内での初期位置は、初期スクロール位置です。 初期スクロール位置は、通常scroll containerwriting modeに依存し、 特に指定がない限り、scroll origin positionと一致します。 ただし、align-contentjustify-contentプロパティ [CSS-ALIGN-3]によって 初期スクロール位置を変更できます。 詳細はCSS Box Alignment 3 § 5.3 Overflow and Scroll Positionsを参照してください。

スクロール位置は、 スクロール可能なオーバーフロー矩形scrollport内でどのように揃えられているかを示します。 スクロールオフセットは、scroll originからの距離です。

scroll originは、 スクロール可能なオーバーフロー矩形の基準座標であり、 そこからスクロール可能なオーバーフロー矩形が拡張されます。 特に指定がない限り、block-start inline-startの角がスクロール可能なオーバーフロー矩形の基準となります。 (例:flex containerでは、main-start cross-startの角です。) scroll originより外側の領域は negative scrollable overflow regionとされ、 ここに描画されたコンテンツは読者がアクセスできません。 詳細は§ 2.2 スクロール可能なオーバーフローを参照。 scroll containerscroll originにスクロールされているとは、 scroll originscrollportの対応する角と一致している状態です。 このスクロール位置scroll origin positionは、 通常は初期スクロール位置と一致しますが、必ずしもそうとは限りません。

例えば、 align-contentjustify-contentプロパティ [CSS-ALIGN-3]scroll snapping [CSS-SCROLL-SNAP-1]などによって、 初期スクロール位置scroll origin positionから変更される場合があります。

baseline alignmentなどが初期スクロール位置または scroll origin positionに依存するか要確認。

scroll offsetsの座標系が定義されていません。 下方向/右方向、ブロック/インライン軸の終端方向、またはscroll originから離れる方向かは未定義です。 各APIが座標モデルを定義すべきでしょうか?

ページのルートビューポートcanvasをスクロールするもの)は、 principal writing modeを用いて scroll origin初期スクロール位置を決定します。

注: scroll container(またはその祖先)が グラフィカルな変形の対象となっている場合、UAはユーザー入力をスクロール操作にマッピングする際にこの変形を考慮する必要があります。 例えば、タッチスクリーンでユーザーが直接コンテンツをドラッグしてスクロールする場合、 変形を考慮してスクロール方向をジェスチャーに合わせることが期待されます。 一方、Page Downキーや1Dスクロールホイールなど他の入力では、変形を無視して解釈する方が自然な場合もあります。 各スクロール機構に適切な挙動を選択するのはUAの責任です。

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

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

これらのプロパティは、ボックスのオーバーフローがクリップされるかどうか、 そしてクリップされる場合は スクロールコンテナかどうかを指定します。

Name: overflow-x, overflow-y, overflow-block, overflow-inline
Value: visible | hidden | clip | scroll | auto
Initial: visible
Applies to: ブロックコンテナ [CSS2]、フレックスコンテナ [CSS3-FLEXBOX]、グリッドコンテナ [CSS3-GRID-LAYOUT]
Inherited: no
Percentages: N/A
Computed value: 通常は指定値ですが、詳細は本文参照
Canonical order: 文法順
Animation type: 離散
Logical property group: overflow

overflow-xプロパティは 水平方向(つまりボックスの左右)でのオーバーフローの扱いを指定し、 overflow-yプロパティは 垂直方向(つまりボックスの上下)でのオーバーフローの扱いを指定します。

overflow-blockおよびoverflow-inlineプロパティも同様に、 オーバーフローブロック軸およびインライン軸での扱いを指定します。

これら4つのプロパティは、論理プロパティグループを構成し、overflow略式プロパティとともに、 CSS Logical Properties 1 § 4 Flow-Relative Box Model Propertiesで定義されるように相互作用します。

Name: overflow
Value: <'overflow-block'>{1,2}
Initial: visible
Applies to: ブロックコンテナ [CSS2]、フレックスコンテナ [CSS3-FLEXBOX]、グリッドコンテナ [CSS3-GRID-LAYOUT]
Inherited: no
Percentages: N/A
Computed value: 各プロパティごとに定義
Animation type: 離散
Canonical order: 文法順

overflowプロパティは略式プロパティであり、overflow-xoverflow-yの指定値をこの順で設定します。 2つ目の値が省略された場合は、1つ目の値がコピーされます。

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

visible
オーバーフローに特別な処理は行われません。つまり、 ボックスの内容はその位置に応じてボックス外にも描画されます。 このボックスはスクロールコンテナではありません。
hidden
この値は、 ボックスの内容がpadding boxでクリップされ、 UAがクリッピング領域外の内容を表示するためのスクロールUIを提供してはならず、 ユーザーによる直接操作(タッチスクリーンでのドラッグやマウスのスクロールホイールなど)によるスクロールも許可されません。 ただし、内容はプログラム的にはスクロール可能であり、 例えば[CSSOM-VIEW]で定義される仕組みなどが利用できます。 このため、ボックスは依然としてスクロールコンテナです。
clip
この値は、 ボックスの内容がoverflow clip edgeでクリップされ、 UAがクリッピング領域外の内容を表示するためのスクロールUIを提供してはならないことを示します。 さらに、overflow: hiddenがプログラム的なスクロールを許可するのに対し、overflow: clipは いかなる手段でもスクロールを完全に禁止し、 このためボックスはスクロールコンテナではありません。

hiddenとは異なり、この値は 要素に新たなフォーマットコンテキストを確立しません

注: ボックスにフォーマットコンテキストも確立させたい場合は、 display: flow-rootoverflow: clipを併用してください。

scroll
この値は、 内容がpadding boxでクリップされますが、 スクロールして表示することができます (このためボックスはスクロールコンテナです)。 さらに、UAが画面上にスクロール機構(スクロールバーやパナーなど)を表示する場合、 その機構は内容がクリップされているかどうかに関わらず表示されるべきです。 これにより、動的な環境でスクロールバーが表示・非表示になる問題を回避します。 対象メディアがprintの場合、 オーバーフローした内容が印刷されることがありますが、 どこに印刷されるかは定義されていません。
auto
ボックスにスクロール可能なオーバーフローがある場合は scrollと同様に、 それ以外の場合はhiddenと同様に動作します。 したがって、UAが画面上にスクロール機構(スクロールバーやパナーなど)を表示する場合、 オーバーフローがある場合のみその機構が表示されます。

visibleclip値は、overflowの算出値として autohidden (それぞれ) となります。 これは、overflow-xまたはoverflow-yのいずれかが visibleまたはclip以外の場合に適用されます。

overflowの算出値が ブロックボックス上で visibleでも clipでも その組み合わせでもない場合、 内容に対して独立したフォーマットコンテキストを確立します。

ユーザーエージェントは overlayキーワードも レガシー値エイリアスとして autoと同義でサポートしなければなりません。

3.1.1. visibilityoverflowの相互作用

visibilityプロパティの算出値がhidden(またはhiddenと同じ効果を持つcollapse)であり、 overflowscrollまたはautoの場合:

3.1.2. border-radiusoverflowの相互作用

CSS Backgrounds 3 § 4.3 Corner Clippingで述べられている通り、 overflowによって確立されるクリッピング領域は角を丸めることができます:

3.1.3. 印刷やその他の静的メディアでのオーバーフロー

静的メディア(印刷など)ではスクロールができないため、 著者はそのようなメディアでもコンテンツがアクセス可能であるよう注意すべきです。 例えば、@media print, (update: none) { … }を使って すべての関連コンテンツが同時に表示されるようレイアウトを調整してください。

scroll containerが 非インタラクティブなメディア上で overflow値としてautoまたはscroll (ただしhiddenは除く)を持つ場合、 UAはスクロール可能なオーバーフローの存在を示すために スクロールバーや省略記号などを表示してもよいです。

注: ページメディアのすべてが 非インタラクティブとは限りません。 例えば、電子書籍リーダーはコンテンツをページ分割しますが、 インタラクティブです。

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

Name: overflow-clip-margin
Value: <visual-box> || <length [0,∞]>
Initial: 0px
Applies to: overflowが適用されるボックス
Inherited: no
Percentages: n/a
Computed value: 算出された<length><visual-box>キーワード
Canonical order: 文法順
Animation type: <visual-box>値が一致する場合は算出値ごと、それ以外は離散

このプロパティはボックスのoverflow clip edgeを定義します。 つまり、ボックスの境界からどれだけ外側まで 内容が描画されることを許可し、 overflow: clipなどの効果によって overflow clip edgeでクリップされる前の範囲を定めます。

値の定義は以下の通りです:

<visual-box>

クリップ境界の基準となるボックスの端を指定します(オフセットがゼロの場合の起点)。

省略時はpadding-boxが既定値です。

<length [0,∞]>

指定されたオフセットは、 どれだけoverflow clip edgeが 指定されたボックス端から拡張されるかを決定します。 負の値は無効です。 省略時はゼロになります。

overflow clip edgeの角の形状は、 ボックスのborder edgeから同じ合計オフセット分広げた outer box-shadow と全く同じ方法で丸められます。 詳細はCSS Backgrounds 3 § 4.2 Corner Shapingおよび CSS Backgrounds 3 § 6.1.1 Shadow Shape, Spread, and Knockoutを参照してください。 特にborder edgeより外側へのアウトセットの式に注意してください。

注: このプロパティは overflow: hiddenoverflow: scrollが設定されたボックスには効果がありません。 これらはoverflow clip edgeを使用しないためです。

3.3. オーバーフロービューポートの伝播

UAは、ルート要素に設定されたoverflow-*値を、ルート要素のビューポートに適用しなければなりません。ただし、ルート要素のdisplay値がnoneでない場合に限ります。 しかし、ルート要素が[HTML] html 要素(HTMLのXML構文を含む)であり、 そのoverflow値が両軸ともvisibleで、 かつその子に body 要素があり、そのdisplay値もnoneでない場合、 UAはその最初の子要素のoverflow-*値をビューポートに適用しなければなりません。 この値が伝播された要素の使用値はoverflowvisibleとなります。

注: HTMLの html または body 要素にcontainmentを使用すると、 このHTML body 要素に対する特別な扱いは無効化されます。 詳細はCSS Containment 1 § 2 強いcontainment: containプロパティを参照してください。

注: ルート要素にoverflow: hiddenを指定しても、 初期包含ブロックがビューポートより小さい場合、 すべての外側コンテンツがクリップされないことがあります(モバイルで発生し得ます)。

ビューポートにvisibleが適用された場合は、autoとして解釈されなければなりません。 clipが適用された場合は、hiddenとして解釈されなければなりません。

3.4. スムーズスクロール:scroll-behavior プロパティ

Name: scroll-behavior
Value: auto | smooth
Initial: auto
Applies to: スクロールコンテナ
Inherited: no
Percentages: n/a
Computed value: 指定値
Canonical order: 文法順
Animation type: アニメーション不可

scroll-behaviorプロパティは、 スクロールコンテナに対して、 ナビゲーションや スクロールAPI [CSSOM-VIEW]、 またはユーザー操作によらないスクロールスナップ操作 [CSS-SCROLL-SNAP-1]による スクロール時の挙動を指定します。 その他のスクロール(例:ユーザーによるスクロール)はこのプロパティの影響を受けません。 このプロパティがルート要素に指定された場合、ビューポートに適用されます。

注: HTML body 要素のscroll-behaviorプロパティは ビューポートへは伝播されません

auto
スクロールコンテナ即時にスクロールされます。
smooth
スクロールコンテナスムーズに UA定義のタイミング関数と期間でスクロールされます。 UAはプラットフォームの慣習に従うべきです。

UAはこのプロパティを無視してもかまいません。

4. スクロールバーとレイアウト

4.1. スクロールバーによるサイズへの寄与

要素のボックス端にスクロールバー用のスペースを確保する場合、 そのスペースは内側のborder edgeと外側のpadding edgeの間に挿入されます。 ただし、background positioning areabackground painting areaの目的では、 この確保されたスペースはpadding boxの一部とみなされます。

次の文書断片では、 絶対配置要素と背景画像の両方がボックスの右上に配置されています。
<style>
    article {
    background: top right no-repeat url(circle.png);
    position: relative;
    overflow: auto; }
    aside { position: absolute; top: 0; right: 0; }
</style>
<article>
    <aside>×</aside>
</article>

<article>にスクロールバーがない場合、 両者は右上のpadding edgeコーナーで一致します。 しかし、スクロールバーがある場合、 <aside>はスクロールバーに隣接した右padding-box端に完全に表示され、 背景画像はスクロールバーの下に隠れ、スクロールバー拡張済みのbackground positioning areaの右上コーナーに配置されます。

ボックスが本質的サイズの場合、 この確保スペースは内容サイズに加算されます。 それ以外の場合は、content areaに割り当てられるスペースから減算されます。 スクロールバーの有無がサイズに影響する場合、 UAはまずスクロールバーが不要と仮定し、 必要であることが判明した場合にサイズを再計算しなければなりません。

次の文書断片では、 外側の<article>height: autoですが、 max-height: 5emです。 内側の<section>は大きなマージンを持ち、通常はちょうど収まります:
...
    article { overflow: auto; max-height: 5em;  width: max-content; }
    section { margin: 2em; line-height: 1 }
...
<article>
    <section>
    This section has big margins.
    </section>
</article>

もし<article>にスクロールバーが必要だと仮定した場合、 <section>の高さ(1行のテキスト+2em×2のマージン)は 5em+スクロールバー分となり、最大許容高さ5emを超えます。 よって仮定は正しく、実際にスクロールバーが必要となります。

しかし、最初にスクロールバー不要と仮定すべきです。 その場合、<article>の内容高さはちょうど最大高さ5emとなり、 仮定が正しかったことが証明され、<article>にはスクロールバーが不要となります。

4.2. スクロールバー用スペースの確保: scrollbar-gutterプロパティ

要素の内側のborder edgeと外側のpadding edgeの間に、UAがスクロールバー表示のために確保するスペースは scrollbar gutter (スクロールバーガター)と呼ばれます。

scrollbar-gutterプロパティは、 著者がスクロールバーガターの有無を制御できるようにします。 これは、overflowプロパティによるスクロールバー自体の制御とは別です。

Name: scrollbar-gutter
Value: auto | stable && both-edges?
Initial: auto
Applies to: スクロールコンテナ
Inherited: no
Percentages: n/a
Computed value: 指定キーワード
Canonical order: 文法順
Animation type: 離散

このプロパティは、ボックスのスクロールバーガターinline start端や inline end端に 配置されるかどうかに影響します。

スクロールバーガターblock start端や block end端に 配置されるかどうかは、このレベルでは制御できません。 これは、スクロールバーガターinline start端や inline end端に 配置される場合と同じ方法で決定されます(scrollbar-gutterautoの場合)。

デフォルトでcontent box上に配置され、スクロールバーガターを 作成しないスクロールバーは オーバーレイスクロールバー と呼ばれます。 これらのスクロールバーは通常半透明で、背後のコンテンツが見える場合があります。 外観やサイズは、ユーザーの操作状況によって変化することがあります。

常にスクロールバーガター内に配置され、表示時にスペースを消費するスクロールバーは クラシックスクロールバー と呼ばれます。 これらは通常不透明です。

クラシックスクロールバーオーバーレイスクロールバーのどちらが使われるか、 スクロールバーの外観やサイズ、どちら側に表示されるかはUA定義です。

注: スクロールバーがどちら側に表示されるかは、 OSの慣習や双方向性、その他の人間工学的要因によって決まる場合があります。

クラシックスクロールバーの場合、 スクロールバーガターの幅(存在する場合)は スクロールバーの幅と同じです。 オーバーレイスクロールバーの場合、 スクロールバーガターは存在しません。

注: オーバーレイスクロールバーでも スクロールバーガターを有効化したい 既知のユースケースがありますが、満足できる設計はまだ合意されていません。 今後このプロパティの拡張で対応される可能性があります。 詳細はCSS Overflow 4 § B scrollbar-gutterの拡張案を参照してください。

このプロパティの値の意味は以下の通りです:

auto
クラシックスクロールバースクロールバーガターoverflowscrollの場合や、 overflowautoで ボックスがオーバーフローしている場合に作成します。 オーバーレイスクロールバーはスペースを消費しません。
stable
クラシックスクロールバーの場合、 overflowhiddenscrollauto のいずれかの場合、ボックスが実際にオーバーフローしているかどうかに関わらず スクロールバーガターが存在します。 オーバーレイスクロールバーはスペースを消費しません。

注: この値はスクロールバー自体の表示有無は変えません。 ガターの有無だけに影響します。

both-edges
もしスクロールバーガターが ボックスのinline start端またはinline end端のいずれかに存在する場合、 反対側にももう一つスクロールバーガターを存在させなければなりません。

スクロールバーガターが存在するが スクロールバー自体が表示されていない場合や、 スクロールバーが透明などでスクロールバーガターを完全に覆わない場合、 スクロールバーガターの背景はpaddingの延長として描画されなければなりません。

overflowプロパティと同様に、 scrollbar-gutterがルート要素に設定された場合、 UAはそれをビューポートに適用しなければならず、 ルート要素自体の使用値はscrollbar-gutter: autoとなります。 ただし、overflowプロパティとは異なり、 UAはHTML body 要素からscrollbar-gutterを伝播してはなりません。

注: 次の表はoverflowscrollbar-gutterの相互作用をまとめたもので、 どのケースでクラシックスクロールバースクロールバーガター用スペースが確保されるかを示します。
クラシックスクロールバースクロールバーガターは表示されるべきか?
overflow scrollbar-gutter オーバーフローあり オーバーフローなし
scroll auto yes yes
stable yes yes
auto auto yes
stable yes yes
hidden auto
stable yes yes
visible, clip auto
stable

5. 自動エリプシス

5.1. オーバーフローエリプシス: text-overflow プロパティ

Name: text-overflow
Value: clip | ellipsis
Initial: clip
Applies to: ブロックコンテナ
Inherited: no
Percentages: N/A
Computed value: 指定キーワード
Canonical order: 文法順
Animation type: 離散

このプロパティは、インラインコンテンツが ブロックコンテナ要素(「ブロック」)のインライン進行方向の endラインボックス端を オーバーフローした場合の描画方法を指定します。 ただし、overflowvisible以外の場合に適用されます。

テキストがオーバーフローする例としては、 折り返しが防止されている場合(例:white-space: nowrap)や、 単語が長すぎて収まらない場合などがあります。 値の意味は以下の通りです:

clip
ブロックコンテナ要素をオーバーフローしたインラインコンテンツをクリップします。文字は部分的に描画される場合があります。
ellipsis
クリップされたインラインコンテンツを表すためにエリプシス文字(U+2026)を描画します。 実装は、より言語・スクリプト・書字方向に適したエリプシス文字や、 利用できない場合は「...」などを代用してもかまいません。

このプロパティ定義で使われる「文字」は可読性のためであり、実装上は「グラフェムクラスタ」[UAX29]を意味します。

ellipsis値の場合、 実装はエリプシスを収めるために 行のatomic inline-level elementsや文字を end端から隠し、 エリプシスを残りのインラインコンテンツのend端に隣接して配置しなければなりません。 行の最初の文字やatomic inline-level elementは エリプシスではなくクリップされなければなりません。

双方向エリプシス例

これらの例は、双方向状況でエリプシスのためにどの文字が隠れるか(行の視覚的end端の文字)を示します:

サンプル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; padding:.2em; border:solid .1em black; margin:1em 0;
}

サンプルHTML断片・レンダリング・ブラウザ:

HTML サンプルレンダリング あなたのブラウザ
<div>
CSS IS AWESOME, YES
</div>
1つ目:テキストがボックス外に描画される例
CSS IS AWESOME, YES
<div style="text-overflow:clip; overflow:hidden">
CSS IS AWESOME, YES
</div>
2つ目:テキストがボックス外でクリップされる例
CSS IS AWESOME, YES
<div style="text-overflow:ellipsis; overflow:hidden">
CSS IS AWESOME, YES
</div>
3つ目:クリップされたテキストを表すエリプシス付きの例
CSS IS AWESOME, YES
<div style="text-overflow:ellipsis; overflow:hidden">
NESTED
    <p>PARAGRAPH</p>
WON’T ELLIPSE.
</div>
4つ目:入れ子段落の例(匿名ブロックボックスの等価性と入れ子要素への非継承)
NESTED

PARAGRAPH

WON’T ELLIPSE.

注: エリプシスが配置される行端は ブロックのdirectionプロパティに依存します。 例えば、overflow:hiddenかつ右から左(direction: rtl)の ブロックではインラインコンテンツが側でクリップされ、 そのクリップされた内容を表すエリプシスは側に配置されます。

エリプシスとスクロールインターフェースの相互作用

この節は、text-overflow:clip以外(非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 is awesome, especially when you can scroll
to see extra text instead of just
having it overlap other text by default.
</div>

CSSとHTMLのデモ:

CSS is awesome, especially when you can scroll to see extra text instead of just having it overlap other text by default.

内容がスクロールされている間、実装はエリプシスの描画(例:ボックス端への整列など)を調整してもかまいません。

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

この仕様は新たなプライバシー上の懸念を導入しません。

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

この仕様は新たなセキュリティ上の懸念を導入しません。

付録C. 変更履歴

この付録は参考情報です。

2021-12-02作業草案からの変更点 2021-12-02 Working Draft

2020-06-03作業草案からの変更点 2020-06-03 Working Draft

2018-07-31作業草案からの変更点 2018-07-31 Working Draft

2018-07-31作業草案以前の変更点 2018-07-31 Working Draft

2018-07-31作業草案公開以前の変更は、以下の変更履歴で確認できます:

謝辞

特に以下の方々のフィードバックに感謝します: Rossen Atanassov、 Bert Bos、 Tantek Çelik、 John Daggett、 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文法および各機能の個別文法に従って構文的に正しいスタイルシートを書き、 本モジュールで記載されたスタイルシートの他の適合要件も満たす必要があります。

部分実装

著者が将来互換性のあるパース規則を活用してフォールバック値を割り当てられるよう、 CSSレンダラーは、利用可能なレベルのサポートがない@規則・プロパティ・値・キーワード・その他構文要素を無効として 適切に無視しなければなりません。 特に、UAはサポートされない値だけを選択的に無視し、サポートされる値だけを複数値プロパティ宣言で有効にしてはなりません。 いずれかの値が無効(サポートされない値は必ず無効)とみなされる場合、CSSは宣言全体を無視する必要があります。

不安定・独自機能の実装

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

非実験的実装

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

CSSの相互運用性を確立・維持するため、 CSSワーキンググループは、非実験的CSSレンダラーが プレフィックスなし実装をリリースする前に 実装報告(必要ならそのテストケースも)をW3Cに提出することを求めます。 W3Cに提出されたテストケースはCSSワーキンググループによるレビュー・修正の対象となります。

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

索引

本仕様で定義される用語

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

参考文献

規範的参考文献

[CSS-ALIGN-3]
Elika Etemad; Tab Atkins Jr.. CSS Box Alignment Module Level 3. 2023年2月17日. WD. URL: https://www.w3.org/TR/css-align-3/
[CSS-BACKGROUNDS-3]
Bert Bos; Elika Etemad; Brad Kemper. CSS Backgrounds and Borders Module Level 3. 2023年2月14日. CR. URL: https://www.w3.org/TR/css-backgrounds-3/
[CSS-BOX-4]
Elika Etemad. CSS Box Model Module Level 4. 2022年11月3日. WD. URL: https://www.w3.org/TR/css-box-4/
[CSS-BREAK-4]
Rossen Atanassov; Elika Etemad. CSS Fragmentation Module Level 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. 2022年1月13日. CR. URL: https://www.w3.org/TR/css-cascade-5/
[CSS-CONTAIN-2]
Tab Atkins Jr.; Florian Rivoal; Vladimir Levin. CSS Containment Module Level 2. 2022年9月17日. WD. URL: https://www.w3.org/TR/css-contain-2/
[CSS-DISPLAY-3]
Tab Atkins Jr.; Elika Etemad. CSS Display Module Level 3. 2023年3月16日. CR. URL: https://www.w3.org/TR/css-display-3/
[CSS-GRID-2]
Tab Atkins Jr.; Elika Etemad; Rossen Atanassov. CSS Grid Layout Module Level 2. 2020年12月18日. CR. URL: https://www.w3.org/TR/css-grid-2/
[CSS-INLINE-3]
Dave Cramer; Elika Etemad. CSS Inline Layout Module Level 3. 2022年11月14日. WD. URL: https://www.w3.org/TR/css-inline-3/
[CSS-LOGICAL-1]
Rossen Atanassov; Elika Etemad. CSS Logical Properties and Values Level 1. 2018年8月27日. WD. URL: https://www.w3.org/TR/css-logical-1/
[CSS-MASKING-1]
Dirk Schulze; Brian Birtles; Tab Atkins Jr.. CSS Masking Module Level 1. 2021年8月5日. CR. URL: https://www.w3.org/TR/css-masking-1/
[CSS-OVERFLOW-4]
David Baron; Florian Rivoal; Elika Etemad. CSS Overflow Module Level 4. 2023年3月21日. WD. URL: https://www.w3.org/TR/css-overflow-4/
[CSS-PSEUDO-4]
Daniel Glazman; Elika Etemad; Alan Stearns. CSS Pseudo-Elements Module Level 4. 2022年12月30日. WD. URL: https://www.w3.org/TR/css-pseudo-4/
[CSS-SCROLL-SNAP-1]
Matt Rakow; 他. CSS Scroll Snap Module Level 1. 2021年3月11日. CR. URL: https://www.w3.org/TR/css-scroll-snap-1/
[CSS-TEXT-DECOR-4]
Elika Etemad; Koji Ishii. CSS Text Decoration Module Level 4. 2022年5月4日. WD. URL: https://www.w3.org/TR/css-text-decor-4/
[CSS-TRANSFORMS-2]
Tab Atkins Jr.; 他. CSS Transforms Module Level 2. 2021年11月9日. WD. URL: https://www.w3.org/TR/css-transforms-2/
[CSS-UI-3]
Tantek Çelik; Florian Rivoal. CSS Basic User Interface Module Level 3 (CSS3 UI). 2018年6月21日. REC. URL: https://www.w3.org/TR/css-ui-3/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 3. 2022年12月1日. 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. 2022年10月19日. WD. URL: https://www.w3.org/TR/css-values-4/
[CSS-WRITING-MODES-4]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 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. 2011年6月7日. REC. URL: https://www.w3.org/TR/CSS21/
[CSS3-FLEXBOX]
Tab Atkins Jr.; 他. CSS Flexible Box Layout Module Level 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. 2020年12月18日. CR. URL: https://www.w3.org/TR/css-grid-1/
[CSS3-TRANSFORMS]
Simon Fraser; 他. CSS Transforms Module Level 1. 2019年2月14日. CR. URL: https://www.w3.org/TR/css-transforms-1/
[CSSOM-VIEW]
Simon Pieters. CSSOM View Module. 2016年3月17日. WD. URL: https://www.w3.org/TR/cssom-view-1/
[HTML]
Anne van Kesteren; 他. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. 1997年3月. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[UAX29]
Christopher Chapman. Unicode Text Segmentation. 2022年8月26日. Unicode Standard Annex #29. URL: https://www.unicode.org/reports/tr29/tr29-41.html

参考情報

[CSS-CONTAIN-1]
Tab Atkins Jr.; Florian Rivoal. CSS Containment Module Level 1. 2022年10月25日. REC. URL: https://www.w3.org/TR/css-contain-1/
[CSS-SIZING-3]
Tab Atkins Jr.; Elika Etemad. CSS Box Sizing Module Level 3. 2021年12月17日. WD. URL: https://www.w3.org/TR/css-sizing-3/
[CSS-TEXT-3]
Elika Etemad; Koji Ishii; Florian Rivoal. CSS Text Module Level 3. 2023年2月13日. CR. URL: https://www.w3.org/TR/css-text-3/
[CSS-WRITING-MODES-3]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 3. 2019年12月10日. REC. URL: https://www.w3.org/TR/css-writing-modes-3/
[CSS1]
Håkon Wium Lie; Bert Bos. Cascading Style Sheets, level 1. 2018年9月13日. REC. URL: https://www.w3.org/TR/CSS1/
[MEDIAQUERIES-5]
Dean Jackson; 他. Media Queries Level 5. 2021年12月18日. WD. URL: https://www.w3.org/TR/mediaqueries-5/

プロパティ索引

名前 初期値 適用対象 継承 パーセンテージ アニメーション型 正規順序 算出値 論理プロパティグループ
overflow <'overflow-block'>{1,2} visible block containers [CSS2], flex containers [CSS3-FLEXBOX], grid containers [CSS3-GRID-LAYOUT] no N/A discrete per grammar see individual properties
overflow-block visible | hidden | clip | scroll | auto visible block containers [CSS2], flex containers [CSS3-FLEXBOX], grid containers [CSS3-GRID-LAYOUT] no N/A discrete per grammar usually specified value, but see text overflow
overflow-clip-margin <visual-box> || <length [0,∞]> 0px boxes to which overflow applies no n/a per computed value if the <visual-box> values match; otherwise discrete per grammar the computed <length> and a <visual-box> keyword
overflow-inline visible | hidden | clip | scroll | auto visible block containers [CSS2], flex containers [CSS3-FLEXBOX], grid containers [CSS3-GRID-LAYOUT] no N/A discrete per grammar usually specified value, but see text overflow
overflow-x visible | hidden | clip | scroll | auto visible block containers [CSS2], flex containers [CSS3-FLEXBOX], grid containers [CSS3-GRID-LAYOUT] no N/A discrete per grammar usually specified value, but see text overflow
overflow-y visible | hidden | clip | scroll | auto visible block containers [CSS2], flex containers [CSS3-FLEXBOX], grid containers [CSS3-GRID-LAYOUT] no N/A discrete per grammar usually specified value, but see text overflow
scroll-behavior auto | smooth auto scroll containers no n/a not animatable per grammar specified value
scrollbar-gutter auto | stable && both-edges? auto scroll containers no n/a discrete per grammar specified keyword(s)
text-overflow clip | ellipsis clip block containers no N/A discrete per grammar specified keyword

課題索引

変形処理の説明は十分に正確ですか?
これはさらなるテストと調査が必要です。現時点のドラフトでは保留されています。
どの scrollable overflow をクリップすべきか評価が必要です。 [Issue #8607]
baseline alignment などが initial scroll position または scroll origin position に依存するかどうか確認してください。
scroll offsets の座標系は定義されていません。 下方向/右方向、ブロック/インライン軸の終端方向、 または scroll origin から離れる方向に増加するかどうかは未定義です。 各APIが座標モデルを定義すべきでしょうか?