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 BaronMozilla
建议编辑此规范:
GitHub 编辑器

摘要

本模块包含了与 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 流程中的术语,并不一定意味着该特性有被移除或延迟的风险。它表示工作组认为该特性在可互操作实现方面可能存在困难, 标记为风险项后,工作组可在进入建议标准阶段时直接移除该特性,无需先发布不含该特性的候选建议标准。

1. 引言

在 CSS Level 1 [CSS1] 中,向具有指定尺寸的元素中放入超出其容纳范围的内容通常被视为作者错误。 这样做会导致内容超出元素边界, 这很可能会导致内容与其他元素重叠。

CSS Level 2 [CSS2] 引入了 overflow 属性, 允许作者通过滚动来处理溢出, 这意味着这不再是作者错误。 同时也允许作者指定 通过裁剪来处理溢出, 当作者希望内容不被显示时,这种方式是合理的。

本规范引入了长期实际使用的 overflow-xoverflow-y 属性, 增加了 clip 值, 并对溢出处理进行了更完整的定义。

[关于 max-lines 的内容待补充]

注: 本规范还复述了 text-overflow 属性的定义, 该定义此前已在 [CSS-UI-3] 中给出, 本规范未做任何新增或修改, 目的是将 text-overflowblock-ellipsis 一并呈现。

1.1. 值定义

本规范遵循 CSS 属性定义约定(见 [CSS2]),并采用 值定义语法(见 [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 一词描述 超出盒子某一边界(即 content edgepadding edgeborder edgemargin edge)的内容。 该术语既可指导致溢出的元素或特性, 也可指这些特性所占据的非矩形区域, 更常见的是指包围该区域的最小矩形。 盒子的溢出根据其自身及所有包含该盒子的 包含块链 的后代的布局和样式计算。

在大多数情况下,overflow 可通过盒子自身的边界和属性, 加上其每个子元素的 overflow,计算得出。 但并非总是如此;例如, 当某些子元素使用 transform-style: preserve-3d [CSS3-TRANSFORMS] 时, 其后代中同样设置了 transform-style: preserve-3d 的元素也需一并考虑。

溢出有两种类型, UA 会根据不同目的使用:

2.1. 墨水溢出

盒子的 墨水溢出 是指该盒子及其内容在盒子边框外产生的视觉效果部分。 墨水溢出是指那些不会影响布局或扩展 可滚动溢出区域 的绘制效果的溢出, 如 盒阴影边框图片文本装饰、 悬挂字形(如负边距或字母升降超出 em 框)、轮廓线等。

由于 CSS 中某些效果(如 text-shadow [CSS-TEXT-3]box-shadow [CSS-BACKGROUNDS-3] 的模糊效果,理论上可无限扩展) 并未定义其视觉范围,因此 墨水溢出 的范围是未定义的。

墨水溢出区域是 盒子及其内容的 墨水溢出 所占据的非矩形区域, 墨水溢出矩形是 包含 墨水溢出区域的、与盒子轴线对齐的最小矩形。 注意 墨水溢出矩形 在盒子的坐标系下是矩形, 但在其他坐标系下由于变换可能不是矩形。[CSS3-TRANSFORMS]

任何 替换内容 的溢出始终属于 墨水溢出(而非 可滚动溢出)。

2.2. 可滚动溢出

盒子的 可滚动溢出 是指 超出该盒子内边距边界且需要提供滚动机制的内容集合。

可滚动溢出区域可滚动溢出所占据的非矩形区域,可滚动溢出矩形是 包含 可滚动溢出区域的、与盒子轴线对齐的最小矩形。

可滚动溢出区域是以下内容的并集:

此外,出于 Web 兼容性考虑 (因作者利用遗留漏洞将内容隐藏于视觉读者但未隐藏于搜索引擎或语音输出), UA 必须裁剪 负可滚动溢出区域中的内容(即表现为在 scroll origin 错误一侧没有 可滚动溢出)。

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

2.3. 滚动溢出

盒子的 overflow 可以是可见或被裁剪。 CSS 还允许盒子成为 滚动容器,允许用户将被裁剪的 可滚动溢出区域部分滚动到视野中。 滚动容器的可视视口(用于查看 可滚动溢出区域) 与其内边距盒重合, 称为 scrollport。 盒子的 最近 scrollport 是其最近 滚动容器祖先的 scrollport

滚动操作可由用户发起 (如操作滚动条、滑动触摸屏或使用键盘控制), 也可由脚本发起 (如通过 scrollIntoView()focus() API)。 可滚动溢出矩形scrollport 内的初始位置(在任何滚动操作生效前)称为 初始滚动位置初始滚动位置通常取决于 滚动容器书写模式, 并且除非另有规定, 与其 滚动原点位置一致。 但 align-contentjustify-content 属性 [CSS-ALIGN-3] 可用于改变 初始滚动位置, 详见 CSS Box Alignment 3 § 5.3 溢出与滚动位置

滚动位置可滚动溢出矩形在其 scrollport 内的特定对齐方式。 它关联一个 滚动偏移量,即其距离 滚动原点的距离。

滚动原点可滚动溢出矩形的锚点坐标, 可滚动溢出矩形即从此点扩展。 除非另有规定, 它是 block-start inline-start 角。 (例如,在 弹性容器中,是 main-start cross-start 角。) 在任一轴上超出 滚动原点的区域 被视为 负可滚动溢出区域: 此处渲染的内容对读者不可访问, 详见 § 2.2 可滚动溢出。 当 滚动容器滚动原点与其 scrollport 的对应角重合时, 该容器被认为滚动到了 滚动原点。 此 滚动位置滚动原点位置, 通常但不总是与 初始滚动位置一致。

例如, align-contentjustify-content 属性 [CSS-ALIGN-3] 以及 滚动捕捉 [CSS-SCROLL-SNAP-1] 可以使 初始滚动位置偏离 滚动原点位置

需检查诸如 基线对齐等是否依赖 初始滚动位置滚动原点位置

未定义 滚动偏移量的坐标系。 其值是向下/向右增加, 还是沿块/内联轴末端增加, 或是远离 滚动原点,均未定义。 是否应由各 API 单独定义其坐标模型?

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

注:滚动容器(或其祖先之一)是图形变换的目标时, 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]
是否继承:
百分比: N/A
计算值: 通常为指定值,详见正文
规范顺序: 按语法
动画类型: 离散
逻辑属性组: overflow

overflow-x 属性用于指定 水平轴(即盒子的左右两侧)上的 溢出处理方式, overflow-y 属性用于指定 垂直轴(即盒子的上下两侧)上的 溢出处理方式。

overflow-blockoverflow-inline 属性同样用于指定 溢出内联轴上的处理方式。

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

名称: overflow
值: <'overflow-block'>{1,2}
初始值: visible
适用对象: 块容器 [CSS2]、弹性容器 [CSS3-FLEXBOX]、网格容器 [CSS3-GRID-LAYOUT]
是否继承:
百分比: N/A
计算值: 详见各属性
动画类型: 离散
规范顺序: 按语法

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

各值含义如下:

visible
不对溢出做特殊处理,即盒子内容如果定位在盒子外部则会被渲染出来。该盒子不是 滚动容器
hidden
此值表示盒子内容会被裁剪到 内边距盒,UA 不应提供任何滚动界面来查看裁剪区域外的内容,也不允许用户通过直接操作(如触摸拖动或鼠标滚轮)进行滚动。但内容仍可通过编程方式滚动,例如使用 [CSSOM-VIEW] 中定义的机制,因此该盒子仍为 滚动容器
clip
此值表示盒子内容会被裁剪到 overflow clip edge,UA 不应提供任何滚动界面来查看裁剪区域外的内容。 此外,与 overflow: hidden 仍允许编程滚动不同,overflow: clip 完全禁止任何滚动机制, 因此该盒子不是 滚动容器

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

注: 作者如需盒子建立格式化上下文,可结合 display: flow-rootoverflow: clip 使用。

scroll
此值表示内容会被裁剪到 内边距盒,但可以滚动到视野中(因此该盒子是 滚动容器)。此外,如果 UA 使用屏幕上可见的滚动机制(如滚动条或平移器),无论内容是否被裁剪都应显示该机制,以避免滚动条在动态环境中出现和消失的问题。对于 print 媒介,溢出内容可能会被打印;但打印位置未定义。
auto
当盒子有 可滚动溢出时,行为如 scroll;否则如 hidden。因此,如果 UA 使用屏幕上可见的滚动机制(如滚动条或平移器),仅在有溢出时才显示该机制。

visible/clip 作为 overflow 的值时,如果 overflow-xoverflow-y 不是 visibleclip,则分别计算为 auto/hidden

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

UA 还必须支持 overlay 关键字, 作为 遗留值别名,等同于 auto

3.1.1. visibilityoverflow 的交互

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

3.1.2. border-radiusoverflow 的交互

CSS Backgrounds 3 § 4.3 角裁剪 所述, 由 overflow 建立的裁剪区域可以是圆角:

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

由于静态媒体(如打印)无法滚动, 作者应注意确保内容在此类媒体中可访问, 例如可通过 @media print, (update: none) { … } 调整布局, 使所有相关内容能同时可见。

在非交互式媒体中的 滚动容器, 若 overflow 的值为 autoscroll (但不是 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>

指定用于作为 overflow clip edge 原点的盒子边缘, 即当偏移为零时的基准边缘。

如未指定,默认使用 padding-box

<length [0,∞]>

指定的偏移量决定 overflow clip edge 从指定盒子边缘扩展的距离。 负值无效。 如未指定,默认值为零。

overflow clip edge 的圆角形状, 与 外部盒阴影的扩展半径一致, 以盒子的 border edge 为基准。 详见 CSS Backgrounds 3 § 4.2 角形状CSS Backgrounds 3 § 6.1.1 阴影形状、扩展与遮罩, 特别注意超出 border edge 的扩展公式。

注: 该属性对 overflow: hiddenoverflow: scroll 的盒子无效, 因为这些值不会使用 overflow clip edge

3.3. 溢出视口传递

当根元素的 overflow-* 属性值设置后, 且其 display 属性值不是 none 时, UA 必须将这些值应用到 视口。 但如果根元素是 [HTML] html 元素 (包括 HTML 的 XML 语法), 且其 overflow 属性值在两个轴上均为 visible, 且该元素有一个 body 子元素,其 display 属性值也不是 none, 则 UA 必须将第一个此类子元素的 overflow-* 属性值应用到视口。 被传递值的元素,其实际 overflow 属性值为 visible

注: 在 HTML htmlbody 元素上使用 containment 会禁用对 HTML body 元素的特殊处理。 详见 CSS Containment 1 § 2 强包含:contain 属性

注: 在根元素上设置 overflow: hidden 可能无法裁剪所有超出 初始包含块 的内容, 如果 ICB 比视口小(如在移动端),则可能出现此情况。

如果对视口应用了 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. 滚动条对尺寸的影响

为元素盒子边缘的滚动条预留空间时, 该空间插入在内边框边缘与外内边距边缘之间。 对于 背景定位区域背景绘制区域而言, 该预留空间视为 内边距盒的一部分。

下例文档片段中, 绝对定位元素和背景图片都定位在盒子的右上角。
<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, 看起来假设正确,确实需要滚动条。

但应先假定不需要滚动条, 此时 <article> 的内容高度正好为最大高度 5em, 证明假设正确,<article> 实际不应有滚动条。

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

内边框边缘与外内边距边缘之间,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-startinline-end 边的存在方式一致, 当 scrollbar-gutterauto 时。

默认放置在内容盒上的滚动条, 不会导致 滚动条槽 的出现, 称为 overlay scrollbars(覆盖型滚动条)。 此类滚动条通常半透明,可显示其下方内容。 外观和尺寸可能因用户交互方式而变化。

始终放置在 滚动条槽内、出现时占用空间的滚动条, 称为 classic scrollbars(经典滚动条)。 此类滚动条通常不透明。

无论使用 经典滚动条还是 覆盖型滚动条, 滚动条的外观、尺寸以及出现在哪一侧由 UA 决定。

注: 滚动条出现在哪一侧可能取决于操作系统习惯、 双向性或其他人体工学因素。

对于 经典滚动条滚动条槽的宽度(如存在,见下文) 与滚动条宽度一致。 对于 覆盖型滚动条, 不存在 滚动条槽

注: 已知有些场景需要为 覆盖型滚动条启用 滚动条槽, 但目前尚无满意设计,未来可通过扩展属性解决。 详见 CSS Overflow 4 § B 滚动条槽的可能扩展

该属性各值含义如下:

auto
经典滚动条overflowscroll, 或 overflowauto 且盒子溢出时, 会预留 滚动条槽空间。 覆盖型滚动条不占用空间。
stable
经典滚动条overflowhiddenscrollauto 时, 无论盒子是否实际溢出,都会预留 滚动条槽空间。 覆盖型滚动条不占用空间。

注: 此设置不会改变滚动条本身是否可见, 仅影响滚动条槽的存在。

both-edges
如果某一侧(inline-start 或 inline-end)本应有 滚动条槽, 则另一侧也必须有 滚动条槽

滚动条槽存在但滚动条未显示, 或滚动条为透明或未完全遮盖 滚动条槽时, 滚动条槽的背景应作为内边距的延伸进行绘制。

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 行盒边缘时的渲染方式, 且该块的 overflow 属性不是 visible

例如,当内容被禁止换行(如 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>
第一个:文本溢出盒子的效果。
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>
第三个:用省略号表示被裁剪的文本。
CSS IS AWESOME, YES
<div style="text-overflow:ellipsis; overflow:hidden">
NESTED
    <p>PARAGRAPH</p>
WON’T ELLIPSE.
</div>
第四个:嵌套段落演示匿名块盒等价性及不继承到嵌套元素。
NESTED

PARAGRAPH

WON’T ELLIPSE.

注: 省略号出现在哪一侧取决于块的 direction 属性。 例如,overflow:hidden 的从右到左块(direction: rtl) 会在 左侧裁剪内联内容, 因此省略号会显示在 左侧以表示被裁剪的内容。

省略号与滚动界面的交互

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

当元素的 text-overflow 非裁剪型且 overflow 为 scroll, 且浏览器提供滚动机制(如滚动条或触摸滑动), 实现会有额外细节以提升用户体验:

当元素被滚动(如用户操作或 DOM 操作), 会显示更多内容。 text-overflow 的值不应影响内容是否能显示更多。 如果设置了非裁剪型 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.

内容滚动时,实现可调整省略号的渲染(如对齐到盒子边缘而非行边缘)。

示例 CSS 和 HTML 效果:

CSS 很棒,尤其是当你可以滚动查看额外文本,而不是默认让它与其他文本重叠时。

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

附录 A. 隐私注意事项

本规范未引入新的隐私问题。

附录 B. 安全注意事项

本规范未引入新的安全问题。

附录 C. 变更记录

本附录为说明性内容。

2021-12-02 工作草案以来的变更

2020-06-03 工作草案以来的变更

2018-07-31 工作草案以来的变更

早于 2018-07-31 工作草案的变更

早于 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"> 与其他规范性文本区分,如下所示: 用户代理必须提供可访问的替代方案。

一致性类别

本规范定义了三类一致性对象:

样式表
CSS 样式表
渲染器
解释样式表语义并渲染使用样式表的文档的 UA
创作工具
编写样式表的 UA

如果样式表中使用本模块定义的语法的所有语句均符合通用 CSS 语法及本模块各特性的语法,则该样式表符合本规范。

渲染器符合本规范,需在解释样式表时,正确支持本规范定义的所有特性,正确解析并渲染文档。但由于设备限制导致 UA 无法正确渲染文档,并不视为不符合规范。(例如,UA 不要求在单色显示器上渲染颜色。)

创作工具符合本规范,需编写语法正确的样式表,符合通用 CSS 语法及本模块各特性的语法,并满足本模块描述的所有样式表一致性要求。

部分实现

为便于作者利用前向兼容解析规则分配回退值,CSS 渲染器必须将所有不具备可用支持级别的 at-规则、属性、属性值、关键字及其他语法结构视为无效(并按需忽略)。特别是,用户代理不得在多值属性声明中选择性忽略不支持的组件值而保留支持的值:如果任何值被视为无效(不支持的值必须如此),CSS 要求整个声明被忽略。

不稳定及专有特性的实现

为避免与未来稳定 CSS 特性冲突,CSS 工作组建议遵循最佳实践,实现不稳定特性和专有扩展

非实验性实现

一旦规范进入候选推荐阶段,允许非实验性实现,且实现者应发布任何已证明按规范正确实现的 CR 级特性的无前缀实现。

为建立和维护 CSS 在各实现间的互操作性,CSS 工作组要求非实验性 CSS 渲染器在发布任何 CSS 特性的无前缀实现前,向 W3C 提交实现报告(如有必要,还需提交用于该报告的测试用例)。提交给 W3C 的测试用例将由 CSS 工作组审核和修正。

关于提交测试用例和实现报告的更多信息,请访问 CSS 工作组网站:https://www.w3.org/Style/CSS/Test/。 如有疑问,请联系 public-css-testsuite@w3.org 邮件列表。

索引

本规范定义的术语

引用定义的术语

参考文献

规范性引用

[CSS-ALIGN-3]
Elika Etemad;Tab Atkins Jr.。CSS 盒对齐模块 3 级。2023年2月17日。WD。URL:https://www.w3.org/TR/css-align-3/
[CSS-BACKGROUNDS-3]
Bert Bos;Elika Etemad;Brad Kemper。CSS 背景与边框模块 3 级。2023年2月14日。CR。URL:https://www.w3.org/TR/css-backgrounds-3/
[CSS-BOX-4]
Elika Etemad。CSS 盒模型模块 4 级。2022年11月3日。WD。URL:https://www.w3.org/TR/css-box-4/
[CSS-BREAK-4]
Rossen Atanassov;Elika Etemad。CSS 分片模块 4 级。2018年12月18日。WD。URL:https://www.w3.org/TR/css-break-4/
[CSS-CASCADE-5]
Elika Etemad;Miriam Suzanne;Tab Atkins Jr.。CSS 层叠与继承 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]
Tab Atkins Jr.;Elika Etemad。CSS 显示模块 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 网格布局模块 2 级。2020年12月18日。CR。URL:https://www.w3.org/TR/css-grid-2/
[CSS-INLINE-3]
Dave Cramer;Elika Etemad。CSS 行内布局模块 3 级。2022年11月14日。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日。CR。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-PSEUDO-4]
Daniel Glazman;Elika Etemad;Alan Stearns。CSS 伪元素模块 4 级。2022年12月30日。WD。URL:https://www.w3.org/TR/css-pseudo-4/
[CSS-SCROLL-SNAP-1]
Matt Rakow 等。CSS 滚动捕捉模块 1 级。2021年3月11日。CR。URL:https://www.w3.org/TR/css-scroll-snap-1/
[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 级。2022年12月1日。CR。URL:https://www.w3.org/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.;Elika Etemad。CSS 值与单位模块 4 级。2022年10月19日。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 级规范。2011年6月7日。REC。URL:https://www.w3.org/TR/CSS21/
[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 级。2020年12月18日。CR。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 Pieters。CSSOM 视图模块。2016年3月17日。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]
Christopher Chapman。Unicode 文本分割。2022年8月26日。Unicode 标准附录 #29。URL:https://www.unicode.org/reports/tr29/tr29-41.html

说明性引用

[CSS-CONTAIN-1]
Tab Atkins Jr.;Florian Rivoal。CSS 包含模块 1 级。2022年10月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 级。2023年2月13日。CR。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] N/A 离散 按语法 见各属性
overflow-block visible | hidden | clip | scroll | auto visible 块容器 [CSS2]、弹性盒容器 [CSS3-FLEXBOX]、网格容器 [CSS3-GRID-LAYOUT] N/A 离散 按语法 通常为指定值,详见正文 overflow
overflow-clip-margin <visual-box> || <length [0,∞]> 0px 适用 overflow 的盒 n/a 若 <visual-box> 值相同则按计算值,否则离散 按语法 计算的 <length> 和 <visual-box> 关键字
overflow-inline visible | hidden | clip | scroll | auto visible 块容器 [CSS2]、弹性盒容器 [CSS3-FLEXBOX]、网格容器 [CSS3-GRID-LAYOUT] N/A 离散 按语法 通常为指定值,详见正文 overflow
overflow-x visible | hidden | clip | scroll | auto visible 块容器 [CSS2]、弹性盒容器 [CSS3-FLEXBOX]、网格容器 [CSS3-GRID-LAYOUT] N/A 离散 按语法 通常为指定值,详见正文 overflow
overflow-y visible | hidden | clip | scroll | auto visible 块容器 [CSS2]、弹性盒容器 [CSS3-FLEXBOX]、网格容器 [CSS3-GRID-LAYOUT] N/A 离散 按语法 通常为指定值,详见正文 overflow
scroll-behavior auto | smooth auto 滚动容器 n/a 不可动画 按语法 指定值
scrollbar-gutter auto | stable && both-edges? auto 滚动容器 n/a 离散 按语法 指定关键字
text-overflow clip | ellipsis clip 块容器 N/A 离散 按语法 指定关键字

问题索引

关于变换处理的描述是否足够准确?
此内容需要进一步测试和调查,因此在本草案中暂缓。
需要评估哪些内容应/不应裁剪可滚动溢出[Issue #8607]
需要检查诸如基线对齐是否依赖于初始滚动位置滚动原点位置
未定义滚动偏移的坐标系统。 未说明其是向下/向右增加、块/行轴末端增加,还是远离滚动原点增加。 是否应由每个 API 定义其坐标模型?