CSS 文本修饰模块第 3 级

W3C 候选推荐草案

关于此文档的更多细节
此版本
https://w3org.cn/TR/2022/CRD-css-text-decor-3-20220505/
最新发布版本
https://w3org.cn/TR/css-text-decor-3/
编辑草案
https://drafts.csswg.org/css-text-decor-3/
历史版本
历史
https://w3org.cn/standards/history/css-text-decor-3
实现报告
https://wpt.fyi/results/css/css-text-decor
测试套件
http://test.csswg.org/suites/css-text-decor-3_dev/nightly-unstable/
反馈
CSS 工作组问题仓库
文档内联
编辑
Elika J. Etemad / fantasai (特邀专家)
(Google)
建议编辑此规范
GitHub 编辑器

摘要

本模块包含与文本装饰相关的 CSS 特性,例如下划线、文本阴影和强调标记。

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

关于本文档

本部分描述了本文档在发布时的状态。当前 W3C 出版物列表及本技术报告的最新版本可在 W3C 技术报告索引(https://w3org.cn/TR/)中找到。

本文档由 CSS 工作组推荐标准轨道发布为候选推荐标准草案。作为候选推荐标准发布并不意味着得到了 W3C 及其成员的背书。候选推荐标准草案整合了前一个候选推荐标准中的变更,工作组打算将其包含在后续的候选推荐标准快照中。

这是一份草案文档,可能会随时被其他文档更新、替换或废弃。将其作为非进行中工作引用是不恰当的。

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

本文档受 2021 年 11 月 2 日版 W3C 流程文档管辖。

本文档由在 W3C 专利政策下运作的组织制作。W3C 维护一份与该组织交付成果相关的 公开专利披露列表;该页面还包含披露专利的说明。任何知悉其认为包含 必要权利要求 的专利的个人,必须按照 W3C 专利政策第 6 节披露该信息。

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

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

1. 简介

本小节是非规范性的。

本模块涵盖文本装饰,即根据字体和排版规则排版后对文本字形进行装饰。(参见 [CSS-TEXT-3][CSS-FONTS-3]。)这些功能传统上不仅用于纯装饰目的,在某些情况下也用于表示强调、尊称,以及指示编辑修改,如插入、删除和拼写错误。

CSS 第 1 级和第 2 级仅定义了符合西方排版传统的非常基础的 线条装饰(下划线、上划线和删除线)。本模块的第 3 级增加了更改这些装饰的颜色、样式、位置和连续性的能力,并引入了 强调标记(传统上用于东亚排版)和 阴影(曾被提出但在第 2 级中被推迟)。

1.1. 模块交互

本模块替换并扩展了 [CSS2] 第 16 章中定义的文本装饰特性。

1.2. 值定义

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

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

1.3. 术语

本规范中使用的术语 字符(character)字母(letter)内容语言(content language) 的定义见 [CSS-TEXT-3]。本规范中使用的其他术语和概念见 [CSS2][CSS-WRITING-MODES-4]

2. 线条装饰:下划线、上划线和删除线

以下属性描述了添加到元素内容的线条装饰。当在 行内框(inline box) 上指定或传播到该框时,该 成为该装饰的 装饰框(decorating box),将装饰应用于其所有 片段(fragments)。然后,该装饰会进一步传播到任何拆分该行内元素的 流内(in-flow) 块级(block-level) 框(参见 CSS2.1 第 9.2.1.1 节)。当在建立 行内格式化上下文(inline formatting context)块容器(block container) 上指定或传播到该容器时,装饰会传播到包装所有 流内 行内级(inline-level) 子元素的 匿名(anonymous) 行内框。当在 ruby 容器 上指定或传播到该容器时,装饰仅传播到 ruby 基框。对于所有其他框类型,装饰会传播到所有流内子元素。

请注意,文本装饰不会传播到任何流外后代,也不会传播到原子行内级后代(如行内块和行内表格)的内容中。它们也不会传播到行内框的行内子元素,尽管装饰被应用于这些框。

下划线、上划线和删除线仅为 非替换(non-replaced) 行内框 绘制,并绘制在所有文本(包括空白、字母间距和单词间距)之上,但行首和行尾的间距(空白、字母间距和单词间距)除外。原子行内元素(Atomic inlines)(如图像和行内块)不进行装饰。装饰框 的外边距、边框和内边距总是被跳过,但后代 行内框 的外边距、边框和内边距不会被跳过。

请注意,CSS 2.1 要求总是跳过外边距、边框和内边距。在本级别中,默认情况下仅跳过 装饰框 的外边距、边框和内边距。将来 CSS2.1 可能会更新以匹配此默认值。此外,预计在第 4 级中将提供对装饰行首/行尾空格的控制,并将默认应用于 HTML insdel 元素。

用户代理(UA)可以在下划线和上划线穿过字形墨迹及字形轮廓两侧一定距离处中断它们;此行为在本级别中不可控制,但将在第 4 级中进一步定义。然而,删除线必须保持连续。

An alphabetic underline through Myanmar text skips around descenders and the vertical strokes of combining characters that drop below the alphabetic baseline.

跳过字形墨迹

当 UA 在字形边界处中断下划线或上划线时,该边界处的线条形状应遵循字形的形状。

请注意,本规范故意未规定“遵循字形形状”的具体方法,以便 UA 可以采取适当措施处理美学和性能考量。例如,出于性能原因,UA 可以在低于特定尺寸阈值时假设线条末端为方形;或者使用梯形末端来近似曲线,特别是在较细的线条装饰上。在美学考量方面,UA 还可以考虑当字形边界仅与部分线条粗细相交或倾斜接近水平时会发生什么——精确地遵循曲线可能会导致排版上尴尬的断续下划线。是否在字形的封闭区域内显示线条是另一个考量。
Take, for example, the word “goal” with an underline striking through the bottom loop of the “g”.
			            Depending on the position and thickness of the underline,
			            we might see the entire thickness of the underline, or only part of it within the “g”.
			            This example shows a masked-out underline in two positions.
			            In the left pair the underline passes through the center of the bowl of the “g”:
			            the full thickness of the underline shows through the center,
			            filling it.
			            In the right pair the underline is slightly lower,
			            and thus the portion of the underline within the “g” can only show a partial thickness.

隐藏碗形区域内的下划线部分会使字体看起来更整洁,而外部下划线的弯曲末端通过紧贴其外轮廓,暗示了下划线穿过字母的连续性。

相对定位一个后代会将其上应用的所有文本装饰与该后代的文本一起移动;它不会影响装饰在该行上的初始位置的计算。visibility 属性、text-shadow、滤镜和其他图形转换同样会影响应用到该框的所有文本装饰——包括从祖先框传播来的装饰——并且不会影响它们初始位置或厚度的计算。(在绘制在原子行内元素上或穿过非替换行内框的外边距/边框/内边距的线条装饰情况下,它们类似地与受影响的原子行内元素/非替换行内框关联,而不是与 装饰框 关联。)

在下面的样式表和文档片段中
blockquote { text-decoration: underline; color: blue; }
em { display: block; }
cite { color: fuchsia; }
<blockquote>
 <p>
  <span>
   Help, help!
   <em> I am under a hat! </em>

   <cite> —GwieF </cite>
  </span>
 </p>
</blockquote>

...blockquote 元素的下划线被传播到围绕 span 元素的匿名行内框,导致“Help, help!”文本变为蓝色,下方带有来自匿名行内框的蓝色下划线,其颜色取自 blockquote 元素。em 块中的 <em>text</em> 也带有下划线,因为它位于下划线传播到的流内块中。最后一行文本是紫红色,但其下方的下划线仍然是来自匿名行内元素的蓝色下划线。上述下划线示例的渲染示例 此图显示了示例中涉及的框。圆形的青色线表示包裹段落元素行内内容的匿名行内元素,圆形的蓝色线表示 span 元素,橙色线表示块。

注: 线条装饰通过框树传播,而不是通过继承传播,因此当在具有 display: contents 的元素上指定时,对后代没有影响。

2.1. 文本装饰线:text-decoration-line 属性

名称text-decoration-line
none | [ underline || overline || line-through || blink ]
初始值 none(无)
应用于 所有元素
可继承 无(但参见上面的正文)
百分比 不可用
计算值 指定的关键字
规范顺序 按语法
动画类型 离散 (discrete)

指定向元素添加哪些线条装饰(如果有)。值的含义如下:

none
既不产生也不抑制文本装饰。
underline
每一行文本都加下划线。
overline
每一行文本上方都有一条线(即与下划线相对的一侧)。
line-through
每行文本的中间都有一条水平线。
blink
文本闪烁(在可见和不可见之间交替)。符合标准的用户代理可以干脆不让文本闪烁。请注意,不闪烁文本是满足 WAI-UAAG 检查点 3.3 的一种技术。此值已弃用,建议使用动画 [CSS-ANIMATIONS-1]

注:垂直书写模式 中,text-underline-position 可以导致下划线和上划线切换侧面。这允许下划线的位置自动基于特定语言的首选项进行调整。

2.2. 文本装饰样式:text-decoration-style 属性

名称text-decoration-style
solid | double | dotted | dashed | wavy
初始值 solid
应用于 所有元素
可继承
百分比 不可用
计算值 指定关键字
规范顺序 按语法
动画类型 离散 (discrete)

此属性指定在元素上指定的文本装饰所绘制线条的样式。值的含义与 border-style 属性 [CSS-BACKGROUNDS-3] 的含义相同。wavy 表示波浪线。

所有源自特定元素的装饰的文本装饰样式必须保持一致,即使后代框具有不同的指定样式。

2.3. 文本装饰颜色:text-decoration-color 属性

名称text-decoration-color
<color>(颜色)
初始值 currentcolor
应用于 所有元素
可继承
百分比 不可用
计算值 计算出的颜色
规范顺序 按语法
动画类型 按计算值类型

此属性指定在具有 text-decoration-line 的元素上设置的文本装饰(下划线、上划线和删除线)的颜色。

所有源自特定元素的装饰的文本装饰颜色必须保持一致,即使后代框具有不同的指定颜色。

2.4. 文本装饰简写:text-decoration 属性

名称text-decoration
<'text-decoration-line'> || <'text-decoration-style'> || <'text-decoration-color'>
初始值 见各个属性
应用于 见各个属性
可继承 见各个属性
百分比 见各个属性
计算值 见各个属性
动画类型 见各个属性
规范顺序 按语法

此属性是用于在一次声明中设置 text-decoration-linetext-decoration-colortext-decoration-style 的简写属性。省略的值将设置为其初始值。

注: 省略了 text-decoration-colortext-decoration-style 值的 text-decoration 声明与 CSS 第 1 级和第 2 级向后兼容。

下面的示例在 CSS1 和 CSS2 用户代理中使用实线蓝色下划线,而在 CSS3 用户代理中使用海军蓝色虚线下划线,以对未访问的链接添加下划线。
:link {
  color: blue;
  text-decoration: underline;
  text-decoration: navy dotted underline; /* Ignored in CSS1/CSS2 UAs */
}

注: 该简写属性特意省略了 text-underline-position 属性,这是一个依赖于语言/书写系统的设置,基于内容进行键控,以便它可以独立于 text-decoration 简写属性的(不可继承的)样式设置进行级联和继承。

2.5. 文本下划线位置:text-underline-position 属性

名称text-underline-position
auto | [ under || [ left | right ] ]
初始值 auto
应用于 所有元素
可继承
百分比 不可用
计算值 指定的关键字
规范顺序 按语法
动画类型 离散 (discrete)

此属性设置元素上指定的下划线的位置。(它不会影响祖先元素指定的下划线。)如果仅指定了 leftright,则隐含 auto

下面的示例对现代中文、日文和韩文文本应用了水平和垂直文本中适当的下划线位置。
:root:lang(ja), [lang|=ja], :root:lang(ko), [lang|=ko] { text-underline-position: under right; }
:root:lang(zh), [lang|=zh] { text-underline-position: under left; }

值的含义如下:

auto
用户代理可以使用任何算法来确定下划线的位置;但它必须放置在字母基线处或下方。

注: 建议默认下划线位置靠近字母基线,除非这会穿过下标(或其他降低的)文本或覆盖诸如汉字或藏文等亚洲文字的字形,对于这些字形,字母下划线太高:在这种情况下,将下划线向下移动或与 em 框边缘对齐(如 under 所述)可能更合适。

In a typical Latin font, the underline is positioned slightly
				         below the alphabetic baseline, leaving a gap between the line
				         and the bottom of most Latin letters, but crossing through
				         descenders such as the stem of a 'p'.

典型的“字母”下划线位于字母基线下方

under
下划线位于元素文本内容的 下方(under)。在这种情况下,下划线通常不会穿过降部(descenders)。(这有时被称为“会计”下划线。)如果在垂直 排版模式 中偏好特定侧面,则此值可与 leftright 组合使用。
由于 text-underline-position 继承,且不被 text-decoration 简写属性重置,下面的示例切换文档以使用 under 下划线,这对于具有长且复杂降部的书写系统可能更合适。对于使用大量下标的数学或化学文本,它也经常很有用。
:root { text-underline-position: under; }

注: under 值并不能保证下划线不会与字形冲突,因为某些字体具有延伸到字体下降指标下方的降部或变音符号。

left
在垂直 排版模式 中,下划线与 under 的对齐方式相同,只是它始终与文本的左边缘对齐。如果这导致下划线绘制在文本的“上方”一侧,则上划线也会切换侧面并在“下方”一侧绘制。
right
在垂直 排版模式 中,下划线与 under 的对齐方式相同,只是它始终与文本的右边缘对齐。如果这导致下划线绘制在文本的“上方”一侧,则上划线也会切换侧面并在“下方”一侧绘制。
In mixed Japanese-Latin vertical text, 'text-underline-position: left'
					          places the underline on the left side of the text. In mixed Japanese-Latin vertical text, 'text-underline-position: right'
					          places the underline on the right side of the text.
left right

在垂直 排版模式 中,text-underline-positionleftright 值允许将下划线放置在文本的任一侧。(在水平 排版模式 中,这两个值都被视为 auto。)

线条装饰的确切位置和厚度在本级别中由 UA 定义。但是,对于下划线和上划线,UA 必须在每一行上使用来自单个 装饰框 的装饰,使用单一的厚度和位置。

绘制在不同字体大小和垂直位置下方的单个下划线必须是单线。 对比 绘制多个线段,每个线段具有适合被装饰文本的位置和厚度,是不正确的。

<u>A<sup>B</sup><big>C</big>D</u> 的正确和错误渲染

请注意,由于线条装饰可以跨越具有不同字体大小和垂直对齐方式的元素,因此线条装饰的最佳位置并不一定是 装饰框 所决定的理想位置。例如,如果元素包含字体大小明显更大的文本,则定位到小字体的上划线将有效地变成删除线。即使对于下划线,如果文本没有与字母基线对齐(例如,在垂直排版样式中,文本默认按其中心基线对齐 [CSS-WRITING-MODES-4]),下划线也会穿过较大字体的后代文本。因此,UA 对后代内容的考量将产生更好的排版。

由于垂直文本的中心基线对齐,小垂直文本上的左侧下划线会穿过具有较大字体大小的子元素的文本。下划线不允许断开,但将其位置进一步调整到左侧可以适当地容纳所有被下划线的文本。

UA 必须调整线条位置以匹配使用除 baseline [CSS2] 之外的 vertical-align 值或者通过 font-variant-position [CSS-FONTS-3] 下标/上标化的 装饰框 的移动指标,但不得为了响应如此设置样式的 装饰框 的后代而调整线条位置或厚度。这允许上标和下标被适当地装饰(下划线、删除线等),但防止它们扭曲或破坏其祖先上的此类装饰的定位。

An underline for just the superscript 'st' in '1st' is drawn just below the superscript,
		             whereas an underline for the entire text is drawn at the appropriate position for full-size text.

应用到 上标文本 的下划线示例与应用到 包含上标的文本 的下划线对比

某些字体格式(如 OpenType)可以提供有关线条装饰适当位置的信息。UA 应在适当的地方使用字体中的此类信息(如下划线厚度或适当的字母下划线位置)。

注: 通常,OpenType 字体指标给出了 字母 下划线的位置;在某些情况下(特别是在 CJK 字体中),它给出了 under left 下划线的位置。(在这种情况下,字体的下划线指标通常接触 em 框的底部边缘)。UA 可以但不需要纠正不正确的字体指标。

3. 强调标记

东亚文档传统上在每个字形旁边使用小符号来强调一段文本。例如

Example of emphasis in Japanese appearing over the text

应用于日文文本的重音强调(为清晰起见以蓝色显示)

text-emphasis 简写属性及其 text-emphasis-styletext-emphasis-color 长期属性可用于将此类标记应用于文本。独立继承的 text-emphasis-position 属性允许设置强调标记相对于文本的位置。

3.1. 强调标记样式:text-emphasis-style 属性

名称text-emphasis-style
none | [ [ filled | open ] || [ dot | circle | double-circle | triangle | sesame ] ] | <string>
初始值 none(无)
应用于 text
可继承
百分比 不可用
计算值 关键字 none、一对代表形状和填充的关键字,或字符串
规范顺序 按语法
动画类型 离散 (discrete)

此属性将强调标记应用于元素的文本。值的含义如下:

none(无)
无强调标记。
filled
形状填充为纯色。
开启
形状为空心。
dot
显示小圆点作为标记。实心点为 U+2022 '•',空心点为 U+25E6 '◦'。
circle
显示大圆圈作为标记。实心圆为 U+25CF '●',空心圆为 U+25CB '○'。
double-circle
显示双圆圈作为标记。实心双圆为 U+25C9 '◉',空心双圆为 U+25CE '◎'。
triangle
显示三角形作为标记。实心三角形为 U+25B2 '▲',空心三角形为 U+25B3 '△'。
sesame
显示芝麻点作为标记。实心芝麻点为 U+FE45 '﹅',空心芝麻点为 U+FE46 '﹆'。
<string>
显示给定的字符串作为标记。作者不应在 <string> 中指定多于一个 字符。UA 可能会截断或忽略包含多于一个字素簇的字符串。

如果指定了形状关键字,但未指定 filledopen,则假定为 filled。如果仅指定了 filledopen,形状关键字在水平 排版模式 中计算为 circle,在垂直 排版模式 中计算为 sesame

标记应使用元素的字体设置绘制,并添加 ruby 特性,且尺寸缩小 50%。然而,由于并非所有字体都具有所有这些字形,且某些字体在这些代码点上使用不适合强调标记的尺寸,UA 可能选择使用已知适合强调标记的字体,或者标记可能由 UA 合成。标记在垂直 排版模式 中必须保持直立:像 CJK 字符一样,它们不会旋转以匹配书写模式。在垂直 书写模式 的水平 排版模式 中,标记的取向在本级别中未定义(但如果出现明确的用例,可能会在未来级别中定义)。

注: 适合强调标记的字体的一个例子是 Adobe 的开源 Kenten Generic OpenType 字体,它是专门为强调标记设计的。

标记为每个 排版字符单元(typographic character unit) 绘制一次。然而,强调标记不会为以下情况绘制:

注: 对标记哪些字符的控制将在第 4 级中添加。(标点符号列表也可能进一步完善,特别是针对非 CJK 标点符号。)

3.2. 强调标记颜色:text-emphasis-color 属性

名称text-emphasis-color
<color>(颜色)
初始值 currentcolor
应用于 text
可继承
百分比 不可用
计算值 计算出的颜色
规范顺序 按语法
动画类型 按计算值类型

此属性指定强调标记的前景色。

注: currentcolor 关键字计算为自身,并解析为继承执行后 color 的值。这意味着默认情况下,text-emphasis-color 与文本 颜色 匹配,即使 color 在不同元素间发生变化。

3.3. 强调标记简写:text-emphasis 属性

名称text-emphasis
<'text-emphasis-style'> || <'text-emphasis-color'>
初始值 见各个属性
应用于 见各个属性
可继承 见各个属性
百分比 见各个属性
计算值 见各个属性
动画类型 见各个属性
规范顺序 按语法

此属性是用于在一次声明中设置 text-emphasis-styletext-emphasis-color 的简写属性。省略的值将设置为其初始值。

请注意,text-emphasis-position 未在此简写中重置。这是因为形状和颜色通常会变化,但对于特定语言,位置在整个文档中是一致的。因此,位置应独立继承。

3.4. 强调标记位置:text-emphasis-position 属性

名称text-emphasis-position
[ over | under ] && [ right | left ]?
初始值 over right
应用于 text
可继承
百分比 不可用
计算值 指定的关键字
规范顺序 按语法
动画类型 离散 (discrete)

此属性描述了强调标记绘制在哪里。如果省略了 [ right | left ],则默认为 right。这些值具有以下含义:

over
在水平 排版模式 中,在文本上方绘制标记。
under
在水平 排版模式 中,在文本下方绘制标记。
right
在垂直 排版模式 中,在文本右侧绘制标记。
left
在垂直 排版模式 中,在文本左侧绘制标记。

强调标记的绘制方式完全就像每个字符都分配了该标记作为其注音(ruby)注释文本,ruby 位置由 text-emphasis-position 给出,ruby 对齐方式为居中。请注意,如果该位置会与下划线或上划线装饰发生冲突,则可以调整该位置。

强调标记对行高的影响与 ruby 文本相同。

请注意,强调标记的首选位置取决于语言。例如,在日语中,首选位置是 over right。而在中文中,首选位置是 under right。下面的信息表总结了中文和日文中强调标记的首选位置
首选强调标记和 ruby 位置
语言首选位置图示
水平垂直
日语right Emphasis marks appear over each emphasized character in horizontal Japanese text. Emphasis marks appear on the right of each emphasized character in vertical Japanese text.
韩文
Mongolian
中文underright Emphasis marks appear below each emphasized character in horizontal Simplified Chinese text.

如果强调标记应用于在与强调标记相同位置绘制 ruby 的字符,则强调标记放置在 ruby 外侧。这包括 自动隐藏的 和空的 ruby 注释框

In this example, emphasis marks are applied to 4 characters, two of which have ruby.
		       The dots are placed above each character (aligned with the ruby) for the bare characters,
		       and above the ruby text for the annotated characters.

应用于 4 个字符的强调标记,其中 2 个也带有 ruby

一些编辑人员更喜欢在强调标记与 ruby 冲突时隐藏它们。在 HTML 中,这可以通过以下样式规则完成
ruby { text-emphasis: none; }

一些编辑人员更喜欢在 ruby 与强调标记冲突时隐藏它们。在 HTML 中,这可以通过以下模式完成

em { text-emphasis: dot; } /* Set text-emphasis for <em> elements */
em rt { display: none; }   /* Hide ruby inside <em> elements */

4. 文本阴影:text-shadow 属性

名称text-shadow
none | [ <color>? && <length>{2,3} ]#
初始值 none(无)
应用于 text
可继承
百分比 不可用
计算值 关键字 none 或一个列表,其中每一项由三个绝对长度加上一个计算颜色组成
规范顺序 按语法
动画类型 作为阴影列表

此属性接受一个逗号分隔的阴影效果列表,应用于元素的文本。值的解释方式与 box-shadow [CSS-BACKGROUNDS-3] 相同。(但请注意,不允许使用 spread 值和 inset 关键字。)每一层都会为元素的文本及其所有文本装饰(组合在一起)产生阴影。

阴影效果按从前到后的顺序应用:第一个阴影在最上面。因此,阴影可能会相互覆盖,但它们永远不会覆盖文本本身。阴影必须绘制在元素边框和/或背景(如果存在)与元素文本和文本装饰之间的堆叠层级中。UA 应避免在属于相同堆叠层级和堆叠上下文的相邻元素中将文本阴影绘制在文本上方。(这意味着阴影的确切堆叠层级可能取决于元素是否具有边框或背景:因此,文本阴影的确切堆叠行为由 UA 定义。)是否给定阴影层独立地为每个字形或装饰产生阴影,或者文本和/或装饰被展平后再产生阴影,这一点未定义。

box-shadow 不同,文本阴影不会被裁剪到被产生阴影的形状上,如果文本是部分透明的,阴影可能会透过来。与 box-shadow 一样,文本阴影不影响布局,也不会触发滚动或增加 可滚动溢出区域 的大小。

注: 这里定义的阴影绘制顺序与 1998 年 CSS2 推荐标准 中定义的相反。

text-shadow 属性同时应用于 ::first-line::first-letter 伪元素。

5. 绘制文本装饰

5.1. 文本装饰的绘制顺序

[CSS2] 一样,文本装饰在它们装饰的文本之上/下方立即绘制,顺序如下(最底层优先)

在线条装饰绘制在框装饰或原子行内元素之上时,它们绘制在非定位内容之上,并刚好位于任何已定位后代之下(CSS2.1 附录 E 中第 8 层正下方)。

5.2. 文本装饰的溢出

泄漏到 外的文本装饰被视为 墨迹溢出:它们不会扩展 可滚动溢出区域[css-overflow-3]

附录 A:致谢

如果没有以下人员的帮助,本规范将无法完成:Ayman Aldahleh, Bert Bos, Tantek Çelik, Stephen Deach, John Daggett, Martin Dürst, Laurie Anna Edlund, Ben Errez, Yaniv Feinberg, Arye Gittelman, Ian Hickson, Martin Heijdra, Richard Ishida, Masayasu Ishikawa, Michael Jochimsen, Eric LeVine, Ambrose Li, Håkon Wium Lie, Chris Lilley, Ken Lunde, Nat McCully, Shinyu Murakami, Paul Nelson, Chris Pratley, Marcin Sawicki, Arnold Schrijver, Rahul Sonnad, Michel Suignard, Takao Suzuki, Frank Tang, Chris Thrasher, Etan Wexler, Chris Wilson, Masafumi Yabe 和 Steve Zilles。

附录 B:默认用户代理样式表

本附录仅供参考,旨在帮助 UA 开发人员实现默认样式表,但 UA 开发人员可以自由忽略或更改。

/* typical styling of HTML */
blink {
  text-decoration-line: blink;
}
s, strike, del {
  text-decoration: line-through;
}
u, ins, :link, :visited {
  text-decoration: underline;
}
abbr[title], acronym[title] {
  text-decoration: dotted underline;
}

/* disable inheritance of text-emphasis marks to ruby text:
  emphasis marks should only apply to base text */
rt { text-emphasis: none; }

/* set language-appropriate default emphasis mark position */
:root:lang(zh), [lang|=zh] { text-emphasis-position: under right; }
[lang|=ja], [lang|=ko]     { text-emphasis-position: over right; }

/* set language-appropriate default underline position */
:root:lang(ja), [lang|=ja],
:root:lang(mn), [lang|=mn],
:root:lang(ko), [lang|=ko] { text-underline-position: right; }
:root:lang(zh), [lang|=zh] { text-underline-position: left;  }
/* auto is chosen (implied) above instead of under
   due to content-compatibility concerns */

如果您发现任何问题、建议添加的内容或更正,请发送信息至 www-style@w3.org,并在主题行中包含 [css-text-decor]

虽然 text-decoration-line: blink 无法使用其他现有属性完全再现,但作者可以使用以下 CSS 实现非常相似的效果
@keyframes blink {
  0% {
    visibility: hidden;
    animation-timing-function: step-end;
  }
  25%, 100% {
    visibility: visible;
  }
}
blink {
  animation: blink 1s infinite;
}

附录 C:更改

2019年8月候选推荐 以来的变化

变化包括

2018年7月候选推荐 以来的变化

变化包括

提供了一份 评论处理意见 (Disposition of Comments)

2013年8月候选推荐 以来的变化

重大变化包括

一致性

文档约定

一致性要求通过描述性断言和 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 邮件列表。

候选推荐标准 (CR) 退出标准

为了使本规范能够推进到提案推荐标准 (PR),必须至少有两个独立的、可互操作的每个功能的实现。每个功能可以由不同组的产品实现,不要求所有功能都由单个产品实现。为了实现此标准,我们定义以下术语

independent
每个实现必须由不同的方开发,并且不能共享、重用或派生自另一个合格实现所使用的代码。对本规范实现无影响的代码段不受此要求限制。
可互操作
通过官方 CSS 测试套件中的相应测试用例,或者如果实现不是 Web 浏览器,则通过等效测试。如果此类用户代理 (UA) 用于声明互操作性,则测试套件中的每个相关测试都应创建等效测试。此外,如果此类 UA 用于声明互操作性,则必须有一个或多个额外的 UA,它们也可以以相同的方式通过这些等效测试,以实现互操作性的目的。等效测试必须公开,以供同行评审。
实现
用户代理,即
  1. 实现了该规范。
  2. 对公众可用。该实现可以是出货产品或其他公开可用的版本(即测试版、预览发布版或“每日构建版”)。非出货产品发布版必须已实现该功能至少一个月,以证明其稳定性。
  3. 不是实验性的(即,专门为通过测试套件设计且不打算用于正常使用的版本)。

该规范将保持候选推荐标准状态至少六个月。

索引

本规范定义的术语

通过引用定义的术语

引用

规范性引用

[CSS-BACKGROUNDS-3]
Bert Bos; Elika Etemad; Brad Kemper. CSS Backgrounds and Borders Module Level 3. 2021年7月26日. CR. URL: https://w3org.cn/TR/css-backgrounds-3/
[CSS-BREAK-3]
Rossen Atanassov; Elika Etemad. CSS Fragmentation Module Level 3. 2018年12月4日. CR. URL: https://w3org.cn/TR/css-break-3/
[CSS-COLOR-4]
Tab Atkins Jr.; Chris Lilley; Lea Verou. CSS 颜色模块 Level 4. 2021 年 12 月 15 日. WD. URL: https://w3org.cn/TR/css-color-4/
[CSS-DISPLAY-3]
Tab Atkins Jr.; Elika Etemad. CSS Display Module Level 3. 2021年9月3日. CR. URL: https://w3org.cn/TR/css-display-3/
[CSS-FONTS-3]
John Daggett; Myles Maxfield; Chris Lilley. CSS 字体模块 Level 3. 2018年9月20日. REC. URL: https://w3org.cn/TR/css-fonts-3/
[CSS-FONTS-4]
John Daggett; Myles Maxfield; Chris Lilley. CSS 字体模块第 4 级. 2021 年 12 月 21 日. WD. URL: https://w3org.cn/TR/css-fonts-4/
[CSS-INLINE-3]
Dave Cramer; Elika Etemad; Steve Zilles. CSS Inline Layout Module Level 3. 2020年8月27日. WD. URL: https://w3org.cn/TR/css-inline-3/
[CSS-OVERFLOW-3]
David Baron; Elika Etemad; Florian Rivoal. CSS Overflow Module Level 3. 2021年12月23日. WD. URL: https://w3org.cn/TR/css-overflow-3/
[CSS-RUBY-1]
Elika Etemad; et al. CSS Ruby Annotation Layout Module Level 1. 2021年12月2日. WD. URL: https://w3org.cn/TR/css-ruby-1/
[CSS-TEXT-3]
Elika Etemad; Koji Ishii; Florian Rivoal. CSS Text Module Level 3. 2021年4月22日. CR. URL: https://w3org.cn/TR/css-text-3/
[CSS-TEXT-DECOR-4]
Elika Etemad; Koji Ishii. CSS Text Decoration Module Level 4. 2020年5月6日. WD. URL: https://w3org.cn/TR/css-text-decor-4/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS 值与单位模块 Level 3. 2019 年 6 月 6 日. CR. URL: https://w3org.cn/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS 值与单位模块 Level 4. 2021 年 12 月 16 日. 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. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 2011年6月7日. REC. URL: https://w3org.cn/TR/CSS21/
[RFC2119]
S. Bradner. RFC 中用于指示要求级别的关键词. 1997年3月. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[UAX15]
Ken Whistler. Unicode Normalization Forms. 2021年8月27日. Unicode Standard Annex #15. URL: https://www.unicode.org/reports/tr15/tr15-51.html

参考资料

[CSS-ANIMATIONS-1]
Dean Jackson; et al. CSS 动画 Level 1. 2018 年 10 月 11 日. WD. URL: https://w3org.cn/TR/css-animations-1/
[CSS-COLOR-3]
Tantek Çelik; Chris Lilley; David Baron. CSS 颜色模块第 3 级. 2022 年 1 月 18 日. REC. URL: https://w3org.cn/TR/css-color-3/
[HTML]
Anne van Kesteren; et al. HTML 标准. Living Standard. URL: https://html.whatwg.cn/multipage/

属性索引

名称初始值应用于继承百分比动画类型 (Animation type)规范顺序计算值
text-decoration <'text-decoration-line'> || <'text-decoration-style'> || <'text-decoration-color'>见各个属性见各个属性见各个属性见各个属性见各个属性按语法见各个属性
text-decoration-color <color>(颜色)currentcolor所有元素不可用按计算值类型按语法计算出的颜色
text-decoration-line none | [ underline || overline || line-through || blink ]none(无)所有元素无(但参见上面的正文)不可用离散 (discrete)按语法指定的关键字
text-decoration-style solid | double | dotted | dashed | wavysolid所有元素不可用离散 (discrete)按语法指定关键字
text-emphasis <'text-emphasis-style'> || <'text-emphasis-color'>见各个属性见各个属性见各个属性见各个属性见各个属性按语法见各个属性
text-emphasis-color <color>(颜色)currentcolortext不可用按计算值类型按语法计算出的颜色
text-emphasis-position [ over | under ] && [ right | left ]?over righttext不可用离散 (discrete)按语法指定的关键字
text-emphasis-style none | [ [ filled | open ] || [ dot | circle | double-circle | triangle | sesame ] ] | <string>none(无)text不可用离散 (discrete)按语法关键字 none,一对代表形状和填充的关键字,或字符串
text-shadow none | [ <color>? && <length>{2,3} ]#none(无)text不可用作为阴影列表按语法关键字 none 或列表,每项由三个绝对长度加上一个计算颜色组成
text-underline-position auto | [ under || [ left | right ] ]auto所有元素不可用离散 (discrete)按语法指定的关键字

问题索引

如果您发现任何问题、建议添加的内容或更正,请发送信息至 www-style@w3.org,并在主题行中包含 [css-text-decor]