CSS 溢出模块第 3 级

W3C 工作草案,

关于此文档的更多细节
此版本
https://w3org.cn/TR/2025/WD-css-overflow-3-20251007/
最新发布版本
https://w3org.cn/TR/css-overflow-3/
编辑草案
https://drafts.csswg.org/css-overflow-3/
历史版本
历史
https://w3org.cn/standards/history/css-overflow-3/
反馈
CSS 工作组问题仓库
文档内联
编辑
Elika J. Etemad / fantasai (Apple)
Florian Rivoal (代表 Bloomberg)
前任编辑
L. David Baron (Mozilla)
建议编辑此规范
GitHub 编辑器

摘要

本模块包含 CSS 中与视觉媒体中可滚动溢出处理相关的特性。本级别专注于为现有的溢出特性完成精确的规范,包括 overflow 属性及其子属性;以及 text-overflow 属性。同时还定义了为支持 [CSS-CONTAIN-1][CSS-CONTAIN-2] 而引入的一些附加特性:overflow: clipoverflow-clip-margin 属性。

CSS 是一种用于描述结构化文档(如 HTML 和 XML)在屏幕、纸张等介质上渲染方式的语言。

关于本文档

本节描述了本文件发布时的状态。当前 W3C 出版物列表及本技术报告的最新修订版可在 W3C 标准和草案索引中找到。

本文件由 CSS 工作组推荐标准轨道发布为工作草案。发布为工作草案并不意味着 W3C 及其成员的认可。

这是一个草案文档,可能随时会被其他文档更新、替换或废弃。将其作为进展中的工作之外的任何内容进行引用是不恰当的。

请通过 在 GitHub 提交 issue(首选),在标题中包含规范代码 “css-overflow”,如:“[css-overflow] …评论摘要…”。所有 issue 和评论均已 存档。或者,也可以将反馈发送至(已存档)公开邮件列表 www-style@w3.org

本文件受 2025 年 8 月 18 日 W3C 流程文件的管辖。

本文档由在一个受 W3C 专利政策约束下运作的组织制作。W3C 维护着一份与该组织交付成果相关的专利披露公开列表;该页面还包含了披露专利的说明。任何个人如果确实获知其认为包含必要权利要求 (Essential Claim) 的专利,必须根据 W3C 专利政策第 6 节披露该信息。

overflow 及其子属性的描述被认为比以往的工作草案或 [CSS2] 更加完整和正确,但仍有一些问题尚未解决。overflow: clipoverflow-clip-margin 相对较新,缺乏实施经验。text-overflow 很稳定,与其在 [CSS-UI-3] 中的早期定义保持一致。<虽然 line-clamp 及其子属性的设计尚未完全通过实施经验验证,但已被认为大致完成。本规范的早期版本包含了通过碎片化创建新盒子来处理溢出的实验性新想法。这些想法并未被放弃,只是 推迟到了第 4 级。一旦本级别完成稳定,碎片化溢出的工作将恢复进行。

以下功能存在风险,可能会在 CR 期间被删除:

“风险(At-risk)”是 W3C 流程中的术语,并不一定意味着该特性面临被删除或推迟的危险。这表示工作组认为该特性可能难以及时实现互操作,将其标记为此类允许工作组在转向“建议推荐标准(Proposed Rec)”阶段时,在必要的情况下删除该特性,而无需先发布一个不包含该特性的新“候选推荐标准(Candidate Rec)”。

1. 简介

在 CSS 第 1 级 [CSS1] 中,放置的内容超过指定尺寸的元素所能容纳的内容通常是一个编写错误。这样做会导致内容延伸到元素边界之外,从而可能导致该内容与其它元素重叠。

CSS Level 2 [CSS2] 引入了 overflow 属性,允许作者通过滚动处理溢出,这意味着它不再是一个创作错误。它还允许作者指定通过裁剪来处理溢出,当作者意图是不显示内容时,这是合理的。

本规范引入了长期存在的事实标准 overflow-xoverflow-y 属性,添加了一个 clip 值,并更完整地定义了溢出处理。

[省略关于 max-lines 的部分。]

注意:本规范还重新载入了之前在 [CSS-UI-3] 中定义的 text-overflow 属性的定义,没有任何添加或修改,以便将 text-overflowblock-ellipsis 一并展示。

1.1. 值定义

本规范遵循 [CSS2] 中的 CSS 属性定义约定,并使用 [CSS-VALUES-3] 中的 值定义语法。本规范中未定义的值类型在 CSS Values & Units [CSS-VALUES-3] 中定义。与其他 CSS 模块的组合可能会扩展这些值类型的定义。

除了定义中列出的属性特定值外,本规范中定义的所有属性也都接受 CSS 全局关键字 作为其属性值。为了可读性,未明确重复列出。

1.2. 模块交互

本模块替换(取代)并扩展了 [CSS2]11.1 溢出和裁剪 节以及 [CSS-UI-3]5.2 溢出省略号:text-overflow 属性 节中定义的特性。

2. 溢出概念与术语

CSS 使用术语 overflow(溢出) 来描述盒子内容延伸到盒子边缘(即其内容边缘内边距边缘边框边缘外边距边缘)之外的情况。该术语可以解释为导致此溢出的元素或特性、这些特性所占据的非矩形区域,或者更常见地,指界定该区域的最小矩形。盒子的溢出是基于盒子本身及其所有包含块链(containing block chain)中包含该盒子的后代的布局和样式计算得出的。

在大多数情况下,任何盒子的 overflow(溢出) 都可以根据该盒子本身的边界和属性,加上其每个子元素的 overflow 来计算。然而,情况并非总是如此;例如,当某些子元素使用 transform-style: preserve-3d [CSS3-TRANSFORMS] 时,也必须检查其任何具有 transform-style: preserve-3d 的后代。

有两种不同类型的溢出,由用户代理 (UA) 用于不同的目的。

2.1. 墨迹溢出 (Ink Overflow)

盒子的 墨迹溢出 (ink overflow) 是指该盒子及其内容中在盒子边框外产生视觉效果的部分。墨迹溢出是指定义为不影响布局或不以其他方式延伸 可滚动溢出区域 的绘制效果的溢出,例如 盒阴影 (box shadows)边框图像 (border images)文本装饰 (text decoration)、悬垂的字形(带有负侧边距,或上升部/下降部延伸到 em 框之外)、轮廓 (outlines) 等。

由于 CSS 中的某些效果(例如 text-shadow [CSS-TEXT-3]box-shadow [CSS-BACKGROUNDS-3] 中的模糊效果,它们理论上是无限的)没有定义它们覆盖的视觉范围,因此 墨迹溢出 的范围是未定义的。

墨迹溢出区域 (ink overflow area) 是由盒子及其内容的 墨迹溢出 所占据的非矩形区域,而 墨迹溢出矩形 (ink overflow rectangle) 是轴与盒子轴对齐且包含 墨迹溢出区域 的最小矩形。注意,墨迹溢出矩形 在盒子的坐标系中是一个矩形,但由于变换,在其他坐标系中可能是非矩形的。 [CSS3-TRANSFORMS]

替换内容的任何溢出始终是 墨迹溢出(而不是 可滚动溢出)。

2.2. 可滚动溢出 (Scrollable Overflow)

盒子的 可滚动溢出 (scrollable overflow) 是指盒子填充边缘之外需要提供滚动机制的内容集合。

可滚动溢出区域 (scrollable overflow area) 是由 可滚动溢出 所占据的非矩形区域,而 可滚动溢出矩形 (scrollable overflow rectangle) 是轴与盒子轴对齐且包含 可滚动溢出区域 的最小矩形。

可滚动溢出区域 是以下各项的并集:

此外,由于 Web 兼容性限制(由作者利用遗留错误偷偷向视觉阅读器隐藏内容,但不向搜索引擎和/或语音输出隐藏内容引起),UA 必须裁剪 不可达的可滚动溢出区域 中的任何内容。

注意: 内容分布属性 可以 改变不可达的可滚动溢出区域,以确保 滚动容器对齐主体 在对齐后是可达的。 [CSS-ALIGN-3]

注意: 可滚动溢出矩形 在盒子自身的坐标系中始终是一个矩形,但由于变换 [CSS3-TRANSFORMS],在其他坐标系中可能是非矩形的。这意味着滚动条有时会在并不真正需要时出现。

2.3. 滚动溢出 (Scrolling Overflow)

盒子的 溢出 可以是可见的或裁剪的。CSS 还允许盒子成为 滚动容器 (scroll container),允许将其 可滚动溢出区域 的裁剪部分滚动到视野中。 滚动容器 的视觉“视口”(通过它可以看到 可滚动溢出区域)与其内边距框重合,被称为 滚动端口 (scrollport)。盒子的 最近滚动端口 (nearest scrollport) 是其最近 滚动容器 祖先的 滚动端口

滚动操作可以由用户发起(例如,通过操作滚动条、在触摸屏上滑动或使用键盘控制),也可以由脚本发起(例如,通过 scrollIntoView()focus() API)。 可滚动溢出矩形 在任何滚动操作生效之前在 滚动端口 内的初始位置是 初始滚动位置 (initial scroll position)初始滚动位置 通常取决于 滚动容器书写模式 (writing mode),并且除非另有说明,否则与其 滚动原点位置 (scroll origin position) 重合。例如,scroll-initial-target 属性可用于改变 初始滚动位置[CSS-SCROLL-SNAP-2]

滚动位置 (scroll position)可滚动溢出矩形 在其 滚动端口 内的一种特定对齐方式。它与 滚动偏移量 (scroll offset) 相关联,即其与 滚动原点 (scroll origin) 的距离。

滚动原点 (scroll origin)可滚动溢出矩形 的锚坐标,可滚动溢出矩形 从该点向外扩展。除非另有说明,它是 可滚动溢出矩形块起始 (block-start) 行内起始 (inline-start) 角。(例如,在 弹性容器 (flex container) 中,它是 主轴起始 (main-start) 交叉轴起始 (cross-start) 角。)除非进行其他调整(例如 通过内容对齐 [css-align-3]),否则在任一轴上超过 滚动原点 的区域都被视为 不可达的可滚动溢出区域 (unreachable scrollable overflow region):此处渲染的内容对读者是不可访问的,请参阅 § 2.2 可滚动溢出。当 滚动容器滚动原点 与其 滚动端口 的相应角重合时,称其已滚动到其 滚动原点。此 滚动位置,即 滚动原点位置 (scroll origin position),通常(但不总是)与 初始滚动位置 重合。

例如,滚动捕捉 (scroll snapping) [CSS-SCROLL-SNAP-1] 可以将 初始滚动位置滚动原点位置 移开。

检查 基线对齐 等事物是否取决于 初始滚动位置滚动原点位置

这没有为 滚动偏移量 定义坐标系。它们是向下/向右增加、向块/行内轴末端增加,还是远离 滚动原点 增加,均未定义。每个 API 是否都应定义其坐标模型?

滚动页面 画布 (canvas) 的根视口使用 主要书写模式 (principal writing mode) 来确定其 滚动原点初始滚动位置

注意:如果 滚动容器(或其祖先之一)是图形变换的目标,UA 在将用户输入映射到滚动操作时可能需要考虑此变换。例如,在用户通过直接拖动内容进行滚动的触摸屏上,预计会考虑变换以使滚动方向与手势匹配。另一方面,其他用户输入(例如 Page Down 键或一维滚动轮)在忽略变换时可能被更自然地解释。为每个滚动机制选择适当的行为是 UA 的责任。

3. 滚动与裁剪溢出

3.1. 管理溢出:overflow-xoverflow-yoverflow 属性

这些属性指定盒子的 溢出 是否被裁剪,如果被裁剪,它是否是 滚动容器

名称overflow-xoverflow-yoverflow-blockoverflow-inline
visible | hidden | clip | scroll | auto
初始值 visible
应用于 块容器 [CSS2]、弹性容器 [CSS3-FLEXBOX]、网格容器 [CSS3-GRID-LAYOUT]
可继承
百分比 不适用
计算值 通常为指定值,但请参阅正文
规范顺序 按语法
动画类型 离散 (discrete)
逻辑属性组 overflow

overflow-x 属性指定水平轴上的 溢出 处理(即盒子左右两侧的溢出),overflow-y 属性指定垂直轴上的 溢出 处理(即盒子顶部和底部的溢出)。

overflow-blockoverflow-inline 属性同样分别指定 溢出块轴行内轴 上的处理。

这四个属性与 overflow 简写属性 一起形成一个 逻辑属性组,并按照 CSS 逻辑属性 1 § 4 流相关盒模型属性 中定义的方式进行交互。

名称overflow
<'overflow-block'>{1,2}
初始值 visible
应用于 块容器 [CSS2]、弹性容器 [CSS3-FLEXBOX] 和网格容器 [CSS3-GRID-LAYOUT]
可继承
百分比 不适用
计算值 见各个属性
动画类型 离散 (discrete)
规范顺序 按语法

overflow 属性是一个 简写属性,它依次设置 overflow-xoverflow-y 的指定值。如果省略第二个值,则从第一个值复制。

值的含义如下:

visible
没有特殊的溢出处理,即盒子的内容如果放置在盒子外,则在盒子外渲染。该盒子不是 滚动容器
该组件可以在本包或其他任何使用包的其他组件中被引用;它不能在使用包中被不同的组件覆盖。
此值表示盒子的内容被裁剪到其 内边距框 (padding box),并且 UA 不得提供任何滚动用户界面来查看裁剪区域外的内容,也不允许通过用户的直接干预(例如在触摸屏上拖动或使用鼠标滚动轮)进行滚动。但是,内容必须仍然可以通过编程方式滚动,例如使用 [CSSOM-VIEW] 中定义的机制,因此该盒子仍然是一个 滚动容器
clip
此值表示盒子的内容被裁剪到其 溢出裁剪边缘 (overflow clip edge),并且 UA 不应提供任何滚动用户界面来查看裁剪区域外的内容。此外,与仍然允许编程滚动的 overflow: hidden 不同,overflow: clip 禁止通过任何机制进行任何滚动,因此该盒子不是一个 滚动容器

hidden 不同,此值 **不会** 导致元素建立新的格式化上下文。

注意:同时希望盒子建立格式化上下文的作者可以将 display: flow-rootoverflow: clip 一起使用。

scroll
此值表示内容被裁剪到 内边距框,但可以滚动到视野中(因此该盒子是一个 滚动容器)。此外,如果用户代理使用了屏幕上可见的滚动机制(例如滚动条或平移器),则无论其内容是否被裁剪,都应显示该机制。这避免了在动态环境中滚动条出现和消失的任何问题。当目标媒体是 print 时,溢出的内容可能会被打印;在哪里打印未定义。
auto
类似于盒子具有 可滚动溢出 时的 scroll;否则类似于 hidden。因此,如果用户代理使用了屏幕上可见的滚动机制(例如滚动条或平移器),则只有在存在溢出时才会显示该机制。

scrollautohidden 值被称为 overflow可滚动值 (scrollable values)visibleclip 值被称为 不可滚动值 (non-scrollable values)

如果 overflow-xoverflow-y 之一既不是 visible 也不是 clip,则 overflowvisible/clip 值分别计算为 auto/hidden。在 替换元素 上,计算出的 hidden 值进一步解析为 clip使用值 (used value)

如果 块盒子overflow 的计算值既不是 visible,也不是 clip,也不是两者的组合,它就会为其内容 建立一个独立的格式化上下文

用户代理还必须支持 overlay 关键字,作为 auto遗留值别名

3.1.1. visibilityoverflow 的交互

如果 visibility 属性的计算值是 hidden(或当其产生与 hidden 相同效果时的 collapse),且 overflowscrollauto,则

3.1.2. border-radiusoverflow 的交互

正如 CSS 背景 3 § 4.3 角裁剪 中提到的,由 overflow 建立的裁剪区域可以是圆角的。

3.1.3. 打印和其他静态媒体中的溢出

由于在静态媒体(例如打印)中无法滚动,作者应小心使内容在这些媒体中可访问,例如通过使用 @media print, (update: none) { … } 来调整布局,以便所有相关内容同时可见。

在具有 overflow 值为 autoscroll(但不是 hidden)的非交互媒体中的 滚动容器 上,UA 可以显示任何可滚动溢出的指示,例如通过显示滚动条或省略号。

注意:并非所有 分页媒体 (paged media) 都是非交互的:例如,电子书阅读器对内容进行分页,但它们是交互式的。

3.2. 扩展裁剪边界:overflow-clip-margin 属性

名称overflow-clip-margin
<visual-box> || <length [0,∞]>
初始值 0px
应用于 overflow 所应用的盒子
可继承
百分比 不可用
计算值 计算出的 <length> 和一个 <visual-box> 关键字
规范顺序 按语法
动画类型 如果 <visual-box> 值匹配,则按计算值;否则为离散的

此属性定义盒子的 溢出裁剪边缘 (overflow clip edge),即盒子的内容在被定义为裁剪到 溢出裁剪边缘 的效果(例如上方的 overflow: clip)进行裁剪之前,究竟可以在边界外绘制多远。

值定义如下

<visual-box>

指定要用作 溢出裁剪边缘 原点的盒子边缘,即当指定的偏移量为零时。

如果省略,默认为 padding-box

<length [0,∞]>

指定的偏移量决定了 溢出裁剪边缘 从指定盒子边缘扩展了多少。负值无效。如果省略,默认为零。

溢出裁剪边缘 在角处的整形方式与扩展半径为从盒子 边框边缘 的相同累积偏移量的 外部盒阴影 (outer box-shadow) 完全相同。请参阅 CSS 背景 3 § 4.2 角整形CSS 背景 3 § 6.1.1 阴影形状、扩展和挖空,特别注意超出 边框边缘 的外延公式。

注意:此属性对具有 overflow: hiddenoverflow: scroll 的盒子没有影响,这些值并未定义为使用 溢出裁剪边缘

3.3. 溢出视口传播

当根元素的 display 值不是 none 时,UA 必须将设置在根元素上的 overflow-* 值应用于 视口。然而,当根元素是一个 [HTML] html 元素(包括 HTML 的 XML 语法),其 overflow 值为 visible(在两个轴上),并且该元素有一个子元素 body,其 display 值也不为 none 时,用户代理必须改为将该第一个此类子元素的 overflow-* 值应用于视口。从中传播值的元素随后必须具有 visible 的使用 overflow 值。

注意:在 HTML htmlbody 元素上使用 包含 (containment) 会禁用对 HTML body 元素的这种特殊处理。详情请参阅 CSS 包含 1 § 2 强包含:contain 属性

注意:如果在移动设备上 ICB 小于视口,根元素上的 overflow: hidden 可能无法裁剪 初始包含块 (Initial Containing Block) 外的所有内容。

如果 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
滚动容器即时 (instant) 方式滚动。
平滑
滚动容器使用用户代理定义的计时函数在用户代理定义的一段时间内以 平滑 (smooth) 方式滚动。用户代理应遵循平台约定(如果有)。

用户代理可以忽略此属性。

4. 滚动条与布局

4.1. 滚动条对尺寸的影响

当为放置在元素盒子边缘的滚动条预留空间时,预留空间被插入到内部边框边缘和外部内边距边缘之间。然而,对于 背景定位区域背景绘制区域,此预留空间被视为 内边距框 的一部分。

在以下文档片段中,绝对定位元素和背景图像都定位在盒子的右上角。
<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> 将完全可见,位于靠近滚动条的右侧内边距框边缘;而背景图像将被塞在滚动条下方,位于滚动条扩展的 背景定位区域 的右上角。

当盒子按内在尺寸大小时,此预留空间被添加到其内容的大小中。否则,它会从分配给 内容区域 的空间中扣除。在滚动条的存在会影响尺寸的范围内,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> 的高度(包括单行文本和两次 2em 的外边距)加起来是 5em 外加滚动条。由于这大于 5em(允许的最大高度),看来我们做出了正确的假设,d1 确实需要滚动条。

然而,我们应该从假设不需要滚动条开始。在这种情况下,<article> 的内容高度正好是 5em 的最大高度,证明该假设是正确的,<article> 确实不应该有滚动条。

4.2. 为滚动条保留空间:scrollbar-gutter 属性

用户代理可能为显示滚动条而预留的内部边框边缘和外部内边距边缘之间的空间称为 滚动条槽 (scrollbar gutter)

scrollbar-gutter 属性让作者能够控制 滚动条槽 的存在,这与 overflow 属性提供的控制滚动条存在的能力是分开的。

名称scrollbar-gutter
auto | stable && both-edges?
初始值 auto
应用于 滚动容器
可继承
百分比 不可用
计算值 指定的关键字
规范顺序 按语法
动画类型 离散 (discrete)

此属性影响放置在盒子 行内起始 (inline start) 边缘或 行内结束 (inline end) 边缘上的 滚动条槽 的存在。

放置在盒子 块起始 (block start) 边缘和 块结束 (block end) 边缘上的 滚动条槽 的存在在此级别中无法控制,其确定方式与 scrollbar-gutterauto 时放置在盒子 行内起始 边缘或 行内结束 边缘上的 滚动条槽 的确定方式相同。

默认放置在内容框上方且不会导致创建 滚动条槽 的滚动条称为 覆盖滚动条 (overlay scrollbars)。此类滚动条通常是部分透明的,如果其下方有内容,则会显示出来。它们的外观和大小可能会根据用户是否以及如何与它们交互而变化。

始终放置在 滚动条槽 中,并在存在时消耗空间的滚动条称为 经典滚动条 (classic scrollbars)。此类滚动条通常是不透明的。

无论使用的是 经典滚动条 还是 覆盖滚动条,滚动条的外观和大小,以及滚动条是出现在盒子的起始边缘还是结束边缘,均由 UA 定义。

注意:滚动条出现在哪一侧可能取决于操作系统约定、双向性 (bidirectionality) 或其他人体工程学考虑。

经典滚动条 的情况下,滚动条槽 的宽度(如果存在,请参见下文)与滚动条的宽度相同。在 覆盖滚动条 的情况下,不存在 滚动条槽

注意:存在已知的用例可以通过为 覆盖滚动条 启用 滚动条槽 来解决,但目前尚未就令人满意的设计达成一致。这可以通过本属性的未来扩展来解决。请参阅 CSS 溢出 4 § B scrollbar-gutter 的可能扩展

此属性的值具有以下含义:

auto
overflowscroll,或者当 overflowauto 且盒子正在溢出时,经典滚动条 通过创建 滚动条槽 来消耗空间。覆盖滚动条 不消耗空间。
稳定 (stable)
overflowhiddenscrollauto 时,无论盒子是否确实在溢出,经典滚动条滚动条槽 都会存在。覆盖滚动条 不消耗空间。

注意:这不会改变滚动条本身是否可见,只有槽的存在受到影响。

both-edges(两个边缘)
如果在盒子的行内起始边缘或行内结束边缘上存在 滚动条槽,则另一个 滚动条槽 也必须存在于相对的边缘上。

滚动条槽 存在但滚动条不存在,或者滚动条是透明的或未完全遮盖 滚动条槽 时,滚动条槽 的背景必须作为内边距的延伸来绘制。

对于 overflow 属性,当 scrollbar-gutter 设置在根元素上时,用户代理必须改为将其应用于视口,而根元素自身的使用值为 scrollbar-gutter: auto。然而,与 overflow 属性不同,用户代理不得将 scrollbar-gutter 从 HTML body 元素传播出去。

注意:下表总结了 overflowscrollbar-gutter 的交互,显示了在何种情况下为 经典滚动条滚动条槽 预留了空间。
应该存在 经典滚动条滚动条槽 吗?
overflow scrollbar-gutter 溢出不溢出
scroll auto
稳定 (stable)
auto auto
稳定 (stable)
该组件可以在本包或其他任何使用包的其他组件中被引用;它不能在使用包中被不同的组件覆盖。 auto
稳定 (stable)
visible, clipauto
稳定 (stable)

5. 自动省略号

5.1. 溢出省略号:text-overflow 属性

名称text-overflow
clip | ellipsis
初始值 clip
应用于 块容器
可继承
百分比 不适用
计算值 指定关键字
规范顺序 按语法
动画类型 离散 (discrete)

此属性指定当行内内容在其行内容器元素(“块”)的行内进展方向上溢出其 末端 (end) 行框边缘时,且该块具有非 visibleoverflow 属性时的渲染方式。

文本溢出的情况例如:当文本被阻止换行时(例如由于 white-space: nowrap 或单个单词太长而无法适应)。值具有以下含义:

clip
剪裁溢出其块容器元素的行内内容。字符可能仅被部分渲染。
ellipsis
渲染省略号字符(U+2026)来表示被剪裁的行内内容。实现可以根据语言、脚本或书写模式替换为更合适的省略号字符;如果省略号字符不可用,也可以使用三个点 "..."。

为提高可读性,本属性定义中使用术语“字符”,在实现层面是指“字素簇” [UAX29]

对于 ellipsis 值,实现必须根据需要隐藏行 末端 (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>
First, a box with text drawing outside of it.
CSS IS AWESOME, YES
<div style="text-overflow:clip; overflow:hidden">
CSS IS AWESOME, YES
</div>
Second, a similar box with the text clipped outside the box.
CSS IS AWESOME, YES
<div style="text-overflow:ellipsis; overflow:hidden">
CSS IS AWESOME, YES
</div>
Third, a similar box with an ellipsis representing the clipped text.
CSS IS AWESOME, YES
<div style="text-overflow:ellipsis; overflow:hidden">
NESTED
 <p>PARAGRAPH</p>
WON’T ELLIPSE.
</div>
Fourth, a box with a nested paragraph demonstrating anonymous block boxes equivalency and non-inheritance into a nested element.
NESTED

PARAGRAPH

WON’T ELLIPSE.

注意:放置省略号的行侧取决于块的 direction (方向)。例如,一个溢出隐藏的从右到左 (direction: rtl) 的块会在 左侧 裁剪行内内容,因此会将文本溢出省略号放置在 左侧 以表示该被裁剪的内容。

省略号与滚动接口的交互

本节适用于非 text-overflow:clip(非剪裁式 text-overflow)且具有 overflow:scroll 的元素。

当具有非剪裁式 text-overflow 的元素在文本的行内进阶维度上具有滚动溢出,并且浏览器提供了滚动机制(例如元素上的滚动条,或触控界面的滑动滚动等)时,存在一些提供更好用户体验的额外实现细节。

当元素被滚动时(例如由用户操作或 DOM 操作),会显示更多元素内容。text-overflow 的值不应影响是否显示更多元素内容。如果设置了非剪裁式 text-overflow,则随着更多内容滚动到视口中,实现应显示任何适合的额外内容,仅截断否则会被剪裁的内容(或为省略号/字符串腾出空间所需的内容),直到元素滚动到足以显示内容边缘为止,此时应显示该内容而不是省略号/字符串。

此示例在具有滚动溢出的元素上使用 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 很棒,尤其是当你可以通过滚动查看额外文本,而不是默认让它们与其它文本重叠时。

当内容正在滚动时,实现可以调整其省略号的渲染(例如对齐到盒子边缘而不是行边缘)。

附录 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]

本规范中的示例均以“例如”一词引入,或者通过 class="example" 与规范性文本隔开,如下所示

这是一个说明性示例。

说明性注释以“Note”一词开头,并使用 class="note" 与规范性文本隔开,如下所示

注意,这是一个说明性注释。

建议(Advisements)是规范性章节,旨在引起特别注意,并使用 <strong class="advisement"> 与其他规范性文本区分开来,如下所示: 用户代理必须提供可访问的替代方案。

一致性类别

本规范为三类一致性定义了一致性要求。

样式表
一份 CSS 样式表
渲染器
一种 用户代理 (UA),它解释样式表的语义并渲染使用它们的文档。
创作工具
一种 用户代理 (UA),用于编写样式表。

如果样式表包含的所有使用本模块定义语法的语句,根据通用 CSS 语法及本模块定义的各功能语法均有效,则该样式表符合本规范。

如果渲染器除了按相应规范解释样式表外,还通过正确解析本规范定义的所有功能并相应地渲染文档来支持这些功能,则该渲染器符合本规范。然而,由于设备限制导致 UA 无法正确渲染文档,并不意味着该 UA 不符合规范。(例如,UA 无需在单色显示器上渲染颜色。)

如果创作工具编写的样式表根据通用 CSS 语法及本模块中各功能的语法是句法正确的,并符合本模块中描述的所有其他样式表一致性要求,则该创作工具符合本规范。

部分实现

为了使作者能够利用前向兼容的解析规则来指定后备值,CSS 渲染器 **必须** 将其无法使用支持级别的任何 @规则、属性、属性值、关键字和其他语法结构视为无效(并 适当忽略)。特别地,用户代理 **不得** 在单一多值属性声明中选择性地忽略不支持的组件值而保留支持的值:如果任何值被视为无效(因为不支持的值必须如此),CSS 要求忽略整个声明。

不稳定和专有特性的实现

为了避免与未来稳定的 CSS 功能发生冲突,CSS 工作组建议在实施不稳定功能和私有扩展遵循最佳实践

非实验性实现

一旦规范达到候选推荐阶段,非实验性实现即可成为可能,实现者应发布他们能够证明根据规范正确实现的任何 CR 级别特性的无前缀实现。

为建立并保持 CSS 在不同实现间的互操作性,CSS 工作组请求非实验性的 CSS 渲染器在发布任何 CSS 功能的无前缀实现之前,向 W3C 提交一份实现报告(并在必要时提交用于该实现报告的测试用例)。提交给 W3C 的测试用例需经 CSS 工作组审阅和修正。

有关提交测试用例和实现报告的详细信息,请访问 CSS 工作组网站 https://w3org.cn/Style/CSS/Test/。问题可发送至 public-css-testsuite@w3.org 邮件列表。

索引

本规范定义的术语

通过引用定义的术语

引用

规范性引用

[CSS-ALIGN-3]
Elika Etemad; Tab Atkins Jr.. CSS 盒子对齐模块 Level 3. 2025 年 3 月 11 日. 工作草案 (WD). URL: https://w3org.cn/TR/css-align-3/
[CSS-BACKGROUNDS-3]
Elika Etemad; Brad Kemper. CSS 背景与边框模块 3 级 (CSS Backgrounds and Borders Module Level 3). 2024年3月11日. CRD. URL: https://w3org.cn/TR/css-backgrounds-3/
[CSS-BOX-4]
Elika Etemad. CSS 盒模型模块 Level 4. 2024 年 8 月 4 日. WD. URL: https://w3org.cn/TR/css-box-4/
[CSS-CASCADE-5]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSS Cascading and Inheritance Level 5. 2022年1月13日. CR. URL: https://w3org.cn/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://w3org.cn/TR/css-contain-2/
[CSS-DISPLAY-3]
Elika Etemad; Tab Atkins Jr.. CSS Display Module Level 3. 2023年3月30日. CR. URL: https://w3org.cn/TR/css-display-3/
[CSS-DISPLAY-4]
Elika Etemad; Tab Atkins Jr.. CSS 显示模块 Level 4. 2024 年 12 月 19 日. FPWD. URL: https://w3org.cn/TR/css-display-4/
[CSS-GRID-2]
Tab Atkins Jr.; 等. CSS 网格布局模块 Level 2. 2025 年 3 月 26 日. CRD. URL: https://w3org.cn/TR/css-grid-2/
[CSS-INLINE-3]
Elika Etemad. CSS 内联布局模块 Level 3. 2024 年 12 月 18 日. 工作草案 (WD). URL: https://w3org.cn/TR/css-inline-3/
[CSS-LOGICAL-1]
Rossen Atanassov; Elika Etemad. CSS Logical Properties and Values Level 1. 2018年8月27日. WD. URL: https://w3org.cn/TR/css-logical-1/
[CSS-MASKING-1]
Dirk Schulze; Brian Birtles; Tab Atkins Jr.. CSS 遮罩模块 Level 1. 2021 年 8 月 5 日. CRD. URL: https://w3org.cn/TR/css-masking-1/
[CSS-OVERFLOW-4]
David Baron; Florian Rivoal; Elika Etemad. CSS Overflow Module Level 4. 2023年3月21日. WD. URL: https://w3org.cn/TR/css-overflow-4/
[CSS-SCROLL-SNAP-1]
Matt Rakow; et al. CSS Scroll Snap Module Level 1. 2021年3月11日. CR. URL: https://w3org.cn/TR/css-scroll-snap-1/
[CSS-SCROLL-SNAP-2]
Elika Etemad; Tab Atkins Jr.; Adam Argyle. CSS 滚动捕捉模块 Level 2. 2024 年 7 月 23 日. FPWD. URL: https://w3org.cn/TR/css-scroll-snap-2/
[CSS-TEXT-DECOR-4]
Elika Etemad; Koji Ishii. CSS Text Decoration Module Level 4. 2022年5月4日. WD. URL: https://w3org.cn/TR/css-text-decor-4/
[CSS-TRANSFORMS-2]
Tab Atkins Jr.; et al. CSS Transforms Module Level 2. 2021年11月9日. WD. URL: https://w3org.cn/TR/css-transforms-2/
[CSS-UI-3]
Tantek Çelik; Florian Rivoal. CSS 基础用户界面模块 Level 3 (CSS3 UI)。2018 年 6 月 21 日。REC。URL: https://w3org.cn/TR/css-ui-3/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS 值与单位模块 3 级 (CSS Values and Units Module Level 3). 2024年3月22日. CRD. URL: https://w3org.cn/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS 值与单位模块 4 级 (CSS Values and Units Module Level 4). 2024年3月12日. WD. URL: https://w3org.cn/TR/css-values-4/
[CSS-WRITING-MODES-4]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 4. 2019年7月30日. CR. URL: https://w3org.cn/TR/css-writing-modes-4/
[CSS2]
Bert Bos; et al. 层叠样式表 2 级修订版 1 (CSS 2.1) 规范 (Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification). 2011年6月7日. REC. URL: https://w3org.cn/TR/CSS2/
[CSS3-FLEXBOX]
Tab Atkins Jr.; et al. CSS Flexible Box Layout Module Level 1. 2018年11月19日. CR. URL: https://w3org.cn/TR/css-flexbox-1/
[CSS3-GRID-LAYOUT]
Tab Atkins Jr.; 等. CSS 网格布局模块 Level 1. 2025 年 3 月 26 日. CRD. URL: https://w3org.cn/TR/css-grid-1/
[CSS3-TRANSFORMS]
Simon Fraser; et al. CSS Transforms Module Level 1. 2019年2月14日. CR. URL: https://w3org.cn/TR/css-transforms-1/
[CSSOM-VIEW]
Simon Fraser; Emilio Cobos Álvarez. CSSOM 视图模块. 2025 年 9 月 16 日. WD. URL: https://w3org.cn/TR/cssom-view-1/
[HTML]
Anne van Kesteren; et al. HTML 标准. Living Standard. URL: https://html.whatwg.cn/multipage/
[RFC2119]
S. Bradner. RFC 中用于指示要求级别的关键词. 1997年3月. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[UAX29]
Josh Hadley. Unicode Text Segmentation. 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 Containment Module Level 1. 2024年6月25日. REC. URL: https://w3org.cn/TR/css-contain-1/
[CSS-SIZING-3]
Tab Atkins Jr.; Elika Etemad. CSS Box Sizing Module Level 3. 2021年12月17日. WD. URL: https://w3org.cn/TR/css-sizing-3/
[CSS-TEXT-3]
Elika Etemad; Koji Ishii; Florian Rivoal. CSS 文本模块 Level 3. 2024 年 9 月 30 日. CRD. URL: https://w3org.cn/TR/css-text-3/
[CSS-WRITING-MODES-3]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 3. 2019年12月10日. REC. URL: https://w3org.cn/TR/css-writing-modes-3/
[CSS1]
Håkon Wium Lie; Bert Bos. 层叠样式表,Level 1. 2018 年 9 月 13 日. REC. URL: https://w3org.cn/TR/CSS1/
[MEDIAQUERIES-5]
Dean Jackson; 等人. Media Queries Level 5. 2021年12月18日. WD. URL: https://w3org.cn/TR/mediaqueries-5/

属性索引

名称初始值应用于继承百分比动画类型 (Animation type)规范顺序计算值逻辑属性组
overflow <'overflow-block'>{1,2}visible块容器 [CSS2]、弹性容器 [CSS3-FLEXBOX] 和网格容器 [CSS3-GRID-LAYOUT]不适用离散 (discrete)按语法见各个属性
overflow-block visible | hidden | clip | scroll | autovisible块容器 [CSS2]、弹性容器 [CSS3-FLEXBOX]、网格容器 [CSS3-GRID-LAYOUT]不适用离散 (discrete)按语法通常为指定值,但请参阅正文overflow
overflow-clip-margin <visual-box> || <length [0,∞]>0px应用溢出属性的盒子不可用如果 <visual-box> 值匹配,则按计算值;否则为离散值按语法计算出的 <length> 和 <visual-box> 关键字
overflow-inline visible | hidden | clip | scroll | autovisible块容器 [CSS2]、弹性容器 [CSS3-FLEXBOX]、网格容器 [CSS3-GRID-LAYOUT]不适用离散 (discrete)按语法通常为指定值,但请参阅正文overflow
overflow-x visible | hidden | clip | scroll | autovisible块容器 [CSS2]、弹性容器 [CSS3-FLEXBOX]、网格容器 [CSS3-GRID-LAYOUT]不适用离散 (discrete)按语法通常为指定值,但请参阅正文overflow
overflow-y visible | hidden | clip | scroll | autovisible块容器 [CSS2]、弹性容器 [CSS3-FLEXBOX]、网格容器 [CSS3-GRID-LAYOUT]不适用离散 (discrete)按语法通常为指定值,但请参阅正文overflow
scroll-behavior auto | smoothauto滚动容器不可用不可动画按语法指定的值
scrollbar-gutter auto | stable && both-edges?auto滚动容器不可用离散 (discrete)按语法指定的关键字
text-overflow clip | ellipsisclip块容器不适用离散 (discrete)按语法指定关键字

问题索引

关于变换 (transforms) 处理的描述是否足够准确?
这需要进一步测试和调查,因此在本草案中被推迟。
需要评估哪些内容应该/不应该剪裁可滚动溢出[问题 #8607]
检查诸如基线对齐之类的特性是否依赖于初始滚动位置滚动原点位置
本规范未定义滚动偏移量的坐标系。滚动偏移量是向下/向右增加,还是向块/行内轴末端增加,或者远离滚动原点增加,这些均未定义。是否每个 API 都应定义其坐标模型?