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

W3C作業草案

この文書の詳細
この版:
https://www.w3.org/TR/2025/WD-css-overflow-3-20251007/
最新公開版:
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 Issues リポジトリ
仕様内インライン
編集者:
Elika J. Etemad / fantasai (Apple)
Florian Rivoal (On behalf of Bloomberg)
前任の編集者:
L. David Baron (Mozilla)
この仕様への編集提案:
GitHub 編集

概要

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

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

この文書のステータス

このセクションは、本書の発行時点での状況を説明します。現在のW3Cの公開物一覧およびこの技術報告の最新版は、W3C standards and drafts index.で確認できます。

この文書はCSS Working Groupによって、 Working DraftとしてRecommendation trackを用いて公開されました。 Working Draftとしての公開は、W3Cおよびそのメンバーによる承認を意味するものではありません。

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

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

本ドキュメントは2025年8月18日版 W3C Process Documentに基づいて管理されています。

本ドキュメントはW3C Patent Policyの下で運営されるグループによって作成されました。 W3C は、そのグループの成果物に関連して行われた特許開示の公開リストを維持しています; そのページには特許を開示するための手順も含まれています。 個人が、当該個人が実際に知っている特許がEssential Claim(s)を含むと考える場合、 その情報はW3C Patent Policy のセクション 6に従って開示しなければなりません。

この仕様におけるoverflowおよびそのロングハンドの記述は、以前のワーキングドラフトや[CSS2]よりも かなり完全かつ正確であると考えられますが、いくつかの疑問点や未解決の課題が残っています。 overflow: clipおよびoverflow-clip-marginは比較的新しいものであり、 実装経験が不足しています。 text-overflowは安定しており、 以前の定義([CSS-UI-3])から変更されていません。 まだ実装経験によって完全に検証されているわけではありませんが、 line-clampとそのロングハンドの設計は概ね完了していると考えられます。 仕様の以前の版では、フラグメンテーションを用いて新しいボックスを生成することでオーバーフローを扱う実験的な新しいアイデアが含まれていました。 これらのアイデアは放棄されたわけではなく、単にLevel 4まで延期されています。 このレベルが安定して完成次第、フラグメント化されたオーバーフローに関する作業は再開される予定です。

以下の機能は“at-risk”とされており、CR期間中に削除される可能性があります:

「At-risk」はW3Cプロセスにおける専門用語であり、必ずしもその機能が削除や遅延の危険にあることを意味するわけではありません。 これは、ワーキンググループがその機能が適時に相互運用可能な形で実装されるのが難しいと考えている可能性があることを意味し、 Proposed Rec への移行時に必要であればその機能を削除できるようにするためにそのようにマークされています。削除する場合、まずその機能を含まない新しい Candidate Rec を公開する必要があるわけではありません。

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. インクオーバーフロー

インクオーバーフローとは、 ボックスおよびその内容のうち、 ボックスのボーダーボックスの外側に視覚効果を生み出す部分を指します。 インクオーバーフローは、レイアウトに影響しない、または スクロール可能なオーバーフロー領域を拡張しない 描画効果のオーバーフローです。 例えば、ボックスシャドウボーダー画像テキスト装飾、 はみ出したグリフ(負のサイドベアリングや、emボックスの外側まで伸びるアセンダー/ディセンダー)、 アウトライン などが該当します。

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

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

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

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

スクロール可能なオーバーフローとは、ボックスのパディング端の外側に拡張され、スクロール機構の提供が必要な対象の集合です。

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

スクロール可能なオーバーフロー領域は、次の集合の合成です:

さらに、Web互換性の制約(著者がレガシーバグを利用して視覚的な閲覧者からコンテンツを密かに隠すが、検索エンジンや音声出力からは隠さないため)により、UAは到達不能スクロール可能オーバーフロー領域内のコンテンツをクリップしなければなりません。

注: コンテンツ分配プロパティ到達不能スクロール可能オーバーフロー領域を変更し、スクロールコンテナアライメント対象がアライメント後に到達可能になるようにできます。 [CSS-ALIGN-3]

注: スクロール可能なオーバーフロー矩形はボックス自身の座標系では常に矩形ですが、トランスフォームにより他の座標系では非矩形になることがあります。[CSS3-TRANSFORMS]そのため、実際には必要ないにもかかわらずスクロールバーが表示されることがあります。

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

ボックスのオーバーフローは、可視またはクリップされている場合があります。 CSSでは、ボックスをスクロールコンテナ として、スクロール可能なオーバーフロー領域のクリップされた部分をスクロールして表示できるようにすることもできます。 スクロールコンテナの視覚的な「ビューポート」 (スクロール可能なオーバーフロー領域を閲覧するための部分)は パディングボックスと一致し、スクロールポートと呼ばれます。 ボックスの最も近いスクロールポートは、 その最も近いスクロールコンテナ祖先のスクロールポートです。

スクロール操作は、ユーザーによって(例えば、スクロールバーの操作、タッチスクリーンのスワイプ、キーボード制御の使用など)や スクリプトによって (例:scrollIntoView()focus() API)開始されることがあります。 スクロール操作が行われる前にスクロール可能なオーバーフロー矩形スクロールポート内にある初期位置は 初期スクロール位置です。 初期スクロール位置は、通常スクロールコンテナ書字モードに依存し、特に指定がなければ スクロール原点位置と一致します。 例えば、scroll-initial-targetプロパティを使って 初期スクロール位置を変更できます。 [CSS-SCROLL-SNAP-2]

スクロール位置は、 スクロール可能なオーバーフロー矩形スクロールポート内で特定の位置合わせになった状態を指します。 これはスクロールオフセットに関連付けられており、 スクロール原点からの距離です。

スクロール原点は、 スクロール可能なオーバーフロー矩形の基準座標であり、 ここからスクロール可能なオーバーフロー矩形が広がります。 特に指定がなければ、 block-startおよびinline-startの角がスクロール可能なオーバーフロー矩形の原点です。 (例えば、フレックスコンテナの場合は main-startcross-startの角です。) 特に調整されていなければ (例:コンテンツアライメントによる [css-align-3])、 原点より先の領域は、どちらの軸でも 到達不能スクロール可能オーバーフロー領域とみなされます。 ここに描画されたコンテンツは読者がアクセスできません。 § 2.2 スクロール可能なオーバーフローも参照してください。 スクロールコンテナスクロール原点にスクロールされているとは、 スクロール原点が対応するスクロールポートの角と一致している状態です。 このスクロール位置スクロール原点位置と呼ばれ、通常は 初期スクロール位置と一致しますが、必ずしもそうとは限りません。

例えば、 スクロールスナップ [CSS-SCROLL-SNAP-1] によって初期スクロール位置スクロール原点位置から変更することができます。

ベースラインアライメントなどが 初期スクロール位置またはスクロール原点位置に依存するかどうか確認してください。

スクロールオフセットの座標系は定義されていません。 下方向/右方向、ブロック軸/インライン軸の終端方向、またはスクロール原点から離れる方向で増加するかも未定義です。 各APIごとに座標モデルを定義するべきでしょうか?

ページ全体をスクロールするルートビューポートはキャンバスをスクロールし、 主書字モードを用いて スクロール原点および初期スクロール位置を決定します。

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

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

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

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

名前: overflow-x, overflow-y, overflow-block, overflow-inline
値: visible | hidden | clip | scroll | auto
初期値: visible
適用対象: ブロックコンテナ [CSS2]、フレックスコンテナ [CSS3-FLEXBOX]、グリッドコンテナ [CSS3-GRID-LAYOUT]
継承: いいえ
パーセンテージ: 該当なし
算出値: 通常は指定値ですが、本文を参照
正規順序: 文法ごと
アニメーション型: 離散
論理プロパティグループ: overflow

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

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

これら4つのプロパティは、 論理プロパティグループoverflowショートハンドとともに構成し、 CSS Logical Properties 1 § 4 流れ相対ボックスモデルプロパティで定義されたように相互作用します。

名前: overflow
値: <'overflow-block'>{1,2}
初期値: visible
適用対象: ブロックコンテナ [CSS2]、フレックスコンテナ [CSS3-FLEXBOX]、グリッドコンテナ [CSS3-GRID-LAYOUT]
継承: いいえ
パーセンテージ: 該当なし
算出値: 各プロパティごとに参照
アニメーション型: 離散
正規順序: 文法ごと

overflowプロパティは、 ショートハンドプロパティであり、 overflow-xおよびoverflow-yの値をその順で設定します。 2番目の値が省略された場合は、1番目の値がコピーされます。

値の意味は次の通りです:

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

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

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

scroll
この値は、内容がパディングボックスにクリップされますが、 スクロールして表示することができます(したがってボックスはスクロールコンテナです)。 さらに、ユーザーエージェントが画面上に見えるスクロール機構(スクロールバーやパナーなど)を使用する場合、 内容がクリップされているかどうかに関わらず、その機構は表示されるべきです。 動的な環境でスクロールバーが表示されたり消えたりする問題を回避できます。 ターゲット媒体がprintの場合、オーバーフローした内容が印刷される場合がありますが、 どこに印刷されるかは定義されていません。
auto
ボックスがスクロール可能なオーバーフローを持つ場合はscrollと同じです。 そうでない場合はhiddenと同じです。 したがって、ユーザーエージェントが画面上に見えるスクロール機構(スクロールバーやパナーなど)を使用する場合、 オーバーフローがある場合のみ表示されます。

scrollautohidden の値は、 overflowスクロール可能値 として知られています。 visibleおよび clip の値は、 非スクロール可能値 として知られています。

visible/clipoverflowの値は、 auto/hidden(それぞれ)に算出されます。 これは、overflow-xまたはoverflow-yのいずれかが visibleまたはclip以外の場合です。 置換要素では、 算出値hiddenの場合、 使用値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 コーナークリッピングで述べられているように、 overflowによって確立されるクリッピング領域は角を丸めることができます:

3.1.3. 印刷およびその他の静的メディアにおけるオーバーフロー

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

スクロールコンテナが 非インタラクティブメディアで overflow値としてautoまたはscroll (ただしhiddenは除く)を持つ場合、 UAはスクロール可能なオーバーフローの表示を行うことができます。 例えば、スクロールバーや省略記号を表示するなどです。

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

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

名前: overflow-clip-margin
値: <visual-box> || <length [0,∞]>
初期値: 0px
適用対象: overflowが適用されるボックス
継承: いいえ
パーセンテージ: 該当なし
算出値: 算出された<length><visual-box>キーワード
正規順序: 文法ごと
アニメーション型: <visual-box>値が一致する場合は算出値ごと、それ以外は離散

このプロパティは、ボックスのoverflow clip edge、すなわち ボックスの境界から内容がどれだけ外側まで描画され、 overflow: clip(上記)などの クリッピング効果によって overflow clip edgeでクリップされる前に 許可される距離を定義します。

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

<visual-box>

指定されたオフセットがゼロの場合、overflow clip edgeの原点として 使われるボックス端を指定します。

省略された場合は padding-boxがデフォルトです。

<length [0,∞]>

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

overflow clip edgeの角の形状は、 outer box-shadowと同じ累積オフセットの spread radiusでボックスのborder edgeから拡張された場合とまったく同じ方法で形作られます。 CSS Backgrounds 3 § 4.2 コーナーの形状および CSS Backgrounds 3 § 6.1.1 シャドウ形状、拡張、ノックアウトを参照し、 特に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-*値をビューポートに適用しなければなりません。 値が伝播される要素は、使用されるoverflow値がvisibleでなければなりません。

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

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

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

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

名前: scroll-behavior
値: auto | smooth
初期値: auto
適用対象: スクロールコンテナ
継承: いいえ
パーセンテージ: 該当なし
算出値: 指定値
正規順序: 文法ごと
アニメーション型: アニメーション不可

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

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

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

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

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

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

要素のボックス端にスクロールバーのためのスペースを確保する場合、確保されたスペースは内側のボーダー端と外側のパディング端の間に挿入されます。 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>にスクロールバーがない場合、両者は右上のパディング端の角で一致します。 しかしスクロールバーがある場合、 <aside>はスクロールバーに隣接した右側のパディングボックス端に完全に表示されます。 一方、背景画像はスクロールバーの下に隠れ、 スクロールバー拡張された右上の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を超えるため、仮定は正しかったことになり、d1には確かにスクロールバーが必要となります。

しかし、本来はスクロールバーが不要であると仮定して始めるべきです。 この場合、<article>の内容の高さはちょうど最大値の5emとなり、 仮定が正しいことが証明され、<article>には実際にスクロールバーが不要となります。

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

内側のボーダー端と外側のパディング端の間に UAがスクロールバー表示のために確保するスペースは scrollbar gutter (スクロールバーグラター)と呼ばれます。

scrollbar-gutterプロパティは、 scrollbar gutter(スクロールバーグラター)の有無を 著者が制御できるようにし、 overflowプロパティによるスクロールバーの制御とは別に設定できます。

名前: scrollbar-gutter
値: auto | stable && both-edges?
初期値: auto
適用対象: スクロールコンテナ
継承: いいえ
パーセンテージ: 該当なし
算出値: 指定キーワード
正規順序: 文法ごと
アニメーション型: 離散

このプロパティは、ボックスのscrollbar gutterインライン開始端またはインライン終了端に 配置することに影響します。

scrollbar gutter(スクロールバーグラター)が ブロック開始端ブロック終了端に 配置されるかどうかはこのレベルでは制御できません。 その決定方法は、scrollbar gutterインライン開始端インライン終了端に 配置する場合と同じです(scrollbar-gutterautoの場合)。

デフォルトでコンテンツボックス上に配置され、 scrollbar gutterが 作成されないスクロールバーは、オーバーレイスクロールバーと呼ばれます。 このようなスクロールバーは通常部分的に透明で、背後のコンテンツが見える場合があります。 表示やサイズは、ユーザーの操作状況によって異なることがあります。

常にscrollbar gutterに配置され、 存在する場合はスペースを消費するスクロールバーはクラシックスクロールバーと呼ばれます。 このようなスクロールバーは通常不透明です。

クラシックスクロールバーオーバーレイスクロールバーのどちらが使われる場合でも、 スクロールバーの表示やサイズ、開始端や終了端のどちらに表示されるかはUAの定義です。

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

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

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

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

auto
クラシックスクロールバーscrollbar gutteroverflowscroll、 またはoverflowautoで ボックスがオーバーフローしている場合に消費します。 オーバーレイスクロールバーはスペースを消費しません。
stable
scrollbar gutterクラシックスクロールバーの場合、 overflowhiddenscroll、 またはautoのいずれかで、 ボックスが実際にオーバーフローしているかどうかに関わらず常に存在します。 オーバーレイスクロールバーはスペースを消費しません。

注: これはスクロールバー自体が表示されるかどうかを変えるものではなく、 グラターの有無だけに影響します。

both-edges
もしscrollbar gutterが ボックスのインライン開始端またはインライン終了端のいずれかに存在する場合、 反対側にももう一つscrollbar gutterを 用意しなければなりません。

scrollbar gutterが存在するがスクロールバーがない場合、 またはスクロールバーが透明でグラターを完全に覆っていない場合、 scrollbar gutterの背景はパディングの拡張として描画されなければなりません。

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

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

5. 自動エリプシス

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

名前: text-overflow
値: clip | ellipsis
初期値: clip
適用対象: ブロックコンテナ
継承: いいえ
パーセンテージ: 該当なし
算出値: 指定キーワード
正規順序: 文法ごと
アニメーション型: 離散

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

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

clip
ブロックコンテナ要素からオーバーフローしたインライン内容をクリップします。文字が部分的にしか描画されない場合があります。
ellipsis
クリップされたインライン内容を表すために省略記号(U+2026)を描画します。 実装によっては、より言語・スクリプト・書字モードに適した省略記号や、 省略記号が利用できない場合は「...」で代用することもあります。

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

ellipsis値の場合、 実装は文字および アトミックインラインレベル要素を、 ラインのend端で省略記号が収まるように隠し、 省略記号は残ったインライン内容のend端に直近で配置されます。 ライン上の最初の文字や アトミックインラインレベル要素は 省略せずクリップしなければなりません。

双方向省略記号の例

これらの例は双方向(bidi)状況で、省略記号のためにどの文字が隠されるかを示します。 視覚的にラインの端にある文字が隠されます。

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>
まず、テキストがボックス外に描画されている例です。
CSS IS AWESOME, YES
<div style="text-overflow:clip; overflow:hidden">
CSS IS AWESOME, YES
</div>
次に、テキストがボックス外でクリップされる例です。
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の省略記号もに配置され、クリップされた内容を表します。

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

このセクションはtext-overflow:clip以外(非clipなtext-overflow)かつoverflow:scrollの要素に適用されます。

非clipなtext-overflowを持つ要素が、テキストのインライン進行方向でscrollのoverflowを持ち、 ブラウザがスクロール機構(例えば要素のスクロールバーやタッチによるスワイプスクロールなど)を提供する場合、 より良いユーザー体験のための追加実装詳細があります:

要素がスクロールされた場合(ユーザー操作や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. 変更点

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

2023年3月29日ワーキングドラフト以降の主な変更点:

以前の変更点も参照。

謝辞

特に下記の方々のフィードバックに感謝します: Rossen Atanassov, Tab Atkins, Bert Bos, Tantek Çelik, John Daggett, Daniel Glazman, Vincent Hardy, Ian Kilpatrick, 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ボックスアラインメントモジュール レベル3。2025年3月11日。WD。URL: https://www.w3.org/TR/css-align-3/
[CSS-BACKGROUNDS-3]
Elika Etemad; Brad Kemper. CSS背景と枠線モジュール レベル3。2024年3月11日。CRD。URL: https://www.w3.org/TR/css-backgrounds-3/
[CSS-BOX-4]
Elika Etemad. CSSボックスモデルモジュール レベル4。2024年8月4日。WD。URL: https://www.w3.org/TR/css-box-4/
[CSS-CASCADE-5]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSSカスケードと継承 レベル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コンテインメントモジュール レベル2。2022年9月17日。WD。URL: https://www.w3.org/TR/css-contain-2/
[CSS-DISPLAY-3]
Elika Etemad; Tab Atkins Jr.. CSSディスプレイモジュール レベル3。2023年3月30日。CR。URL: https://www.w3.org/TR/css-display-3/
[CSS-DISPLAY-4]
Elika Etemad; Tab Atkins Jr.. CSSディスプレイモジュール レベル4。2024年12月19日。FPWD。URL: https://www.w3.org/TR/css-display-4/
[CSS-GRID-2]
Tab Atkins Jr.; 他。CSSグリッドレイアウトモジュール レベル2。2025年3月26日。CRD。URL: https://www.w3.org/TR/css-grid-2/
[CSS-INLINE-3]
Elika Etemad. CSSインラインレイアウトモジュール レベル3。2024年12月18日。WD。URL: https://www.w3.org/TR/css-inline-3/
[CSS-LOGICAL-1]
Rossen Atanassov; Elika Etemad. CSS論理プロパティと値 レベル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マスキングモジュール レベル1。2021年8月5日。CRD。URL: https://www.w3.org/TR/css-masking-1/
[CSS-OVERFLOW-4]
David Baron; Florian Rivoal; Elika Etemad. CSSオーバーフローモジュール レベル4。2023年3月21日。WD。URL: https://www.w3.org/TR/css-overflow-4/
[CSS-SCROLL-SNAP-1]
Matt Rakow; 他。CSSスクロールスナップモジュール レベル1。2021年3月11日。CR。URL: https://www.w3.org/TR/css-scroll-snap-1/
[CSS-SCROLL-SNAP-2]
Elika Etemad; Tab Atkins Jr.; Adam Argyle. CSSスクロールスナップモジュール レベル2。2024年7月23日。FPWD。URL: https://www.w3.org/TR/css-scroll-snap-2/
[CSS-TEXT-DECOR-4]
Elika Etemad; Koji Ishii. CSSテキストデコレーションモジュール レベル4。2022年5月4日。WD。URL: https://www.w3.org/TR/css-text-decor-4/
[CSS-TRANSFORMS-2]
Tab Atkins Jr.; 他。CSSトランスフォームモジュール レベル2。2021年11月9日。WD。URL: https://www.w3.org/TR/css-transforms-2/
[CSS-UI-3]
Tantek Çelik; Florian Rivoal. CSS基本ユーザーインターフェースモジュール レベル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値と単位モジュール レベル3。2024年3月22日。CRD。URL: https://www.w3.org/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS値と単位モジュール レベル4。2024年3月12日。WD。URL: https://www.w3.org/TR/css-values-4/
[CSS-WRITING-MODES-4]
Elika Etemad; Koji Ishii. CSS書字モード レベル4。2019年7月30日。CR。URL: https://www.w3.org/TR/css-writing-modes-4/
[CSS2]
Bert Bos; 他。カスケーディング・スタイル・シート レベル2 改訂1(CSS 2.1)仕様書。2011年6月7日。REC。URL: https://www.w3.org/TR/CSS2/
[CSS3-FLEXBOX]
Tab Atkins Jr.; 他。CSSフレキシブルボックスレイアウトモジュール レベル1。2018年11月19日。CR。URL: https://www.w3.org/TR/css-flexbox-1/
[CSS3-GRID-LAYOUT]
Tab Atkins Jr.; 他。CSSグリッドレイアウトモジュール レベル1。2025年3月26日。CRD。URL: https://www.w3.org/TR/css-grid-1/
[CSS3-TRANSFORMS]
Simon Fraser; 他。CSSトランスフォームモジュール レベル1。2019年2月14日。CR。URL: https://www.w3.org/TR/css-transforms-1/
[CSSOM-VIEW]
Simon Fraser; Emilio Cobos Álvarez. CSSOMビュー・モジュール。2025年9月16日。WD。URL: https://www.w3.org/TR/cssom-view-1/
[HTML]
Anne van Kesteren; 他。HTML標準。リビングスタンダード。URL: https://html.spec.whatwg.org/multipage/
[RFC2119]
S. Bradner. RFCで要件レベルを示すキーワード。1997年3月。ベストカレントプラクティス。URL: https://datatracker.ietf.org/doc/html/rfc2119
[UAX29]
Josh Hadley. Unicodeテキスト分割。2025年8月17日。Unicode Standard Annex #29。URL: https://www.unicode.org/reports/tr29/tr29-47.html

参考情報

[CSS-CONTAIN-1]
Tab Atkins Jr.; Florian Rivoal. CSSコンテインメントモジュール レベル1。2024年6月25日。REC。URL: https://www.w3.org/TR/css-contain-1/
[CSS-SIZING-3]
Tab Atkins Jr.; Elika Etemad. CSSボックスサイズモジュール レベル3。2021年12月17日。WD。URL: https://www.w3.org/TR/css-sizing-3/
[CSS-TEXT-3]
Elika Etemad; Koji Ishii; Florian Rivoal. CSSテキストモジュール レベル3。2024年9月30日。CRD。URL: https://www.w3.org/TR/css-text-3/
[CSS-WRITING-MODES-3]
Elika Etemad; Koji Ishii. CSS書字モード レベル3。2019年12月10日。REC。URL: https://www.w3.org/TR/css-writing-modes-3/
[CSS1]
Håkon Wium Lie; Bert Bos. カスケーディング・スタイル・シート レベル1。2018年9月13日。REC。URL: https://www.w3.org/TR/CSS1/
[MEDIAQUERIES-5]
Dean Jackson; 他。メディアクエリ レベル5。2021年12月18日。WD。URL: https://www.w3.org/TR/mediaqueries-5/

プロパティ索引

名前 初期値 適用対象 継承 パーセンテージ アニメーション型 正規順序 算出値 論理プロパティグループ
overflow <'overflow-block'>{1,2} visible ブロックコンテナ [CSS2]、フレックスコンテナ [CSS3-FLEXBOX]、グリッドコンテナ [CSS3-GRID-LAYOUT] いいえ 該当なし 離散 文法ごと 各プロパティごとに参照
overflow-block visible | hidden | clip | scroll | auto visible ブロックコンテナ [CSS2]、フレックスコンテナ [CSS3-FLEXBOX]、グリッドコンテナ [CSS3-GRID-LAYOUT] いいえ 該当なし 離散 文法ごと 通常は指定値ですが、本文を参照 overflow
overflow-clip-margin <visual-box> || <length [0,∞]> 0px overflowが適用されるボックス いいえ 該当なし <visual-box>値が一致する場合は算出値ごと、それ以外は離散 文法ごと 算出された<length>と<visual-box>キーワード
overflow-inline visible | hidden | clip | scroll | auto visible ブロックコンテナ [CSS2]、フレックスコンテナ [CSS3-FLEXBOX]、グリッドコンテナ [CSS3-GRID-LAYOUT] いいえ 該当なし 離散 文法ごと 通常は指定値ですが、本文を参照 overflow
overflow-x visible | hidden | clip | scroll | auto visible ブロックコンテナ [CSS2]、フレックスコンテナ [CSS3-FLEXBOX]、グリッドコンテナ [CSS3-GRID-LAYOUT] いいえ 該当なし 離散 文法ごと 通常は指定値ですが、本文を参照 overflow
overflow-y visible | hidden | clip | scroll | auto visible ブロックコンテナ [CSS2]、フレックスコンテナ [CSS3-FLEXBOX]、グリッドコンテナ [CSS3-GRID-LAYOUT] いいえ 該当なし 離散 文法ごと 通常は指定値ですが、本文を参照 overflow
scroll-behavior auto | smooth auto スクロールコンテナ いいえ 該当なし アニメーション不可 文法ごと 指定値
scrollbar-gutter auto | stable && both-edges? auto スクロールコンテナ いいえ 該当なし 離散 文法ごと 指定キーワード
text-overflow clip | ellipsis clip ブロックコンテナ いいえ 該当なし 離散 文法ごと 指定キーワード

課題索引

このtransformの扱いの説明は十分に正確か?
これにはさらなるテストと調査が必要であり、このドラフトでは延期されます。
何がスクロール可能なオーバーフローをクリップするべきか/しないべきか評価が必要です。 スクロール可能なオーバーフロー[Issue #8607]
ベースラインアライメントなどが 初期スクロール位置またはスクロール原点位置に依存するかどうか確認してください。
スクロールオフセットの座標系は定義されていません。 下方向/右方向、ブロック軸/インライン軸の終端方向、またはスクロール原点から離れる方向で増加するかも未定義です。 各APIごとに座標モデルを定義するべきでしょうか?