CSS 文本装饰模块 4 级

W3C 工作草案

更多关于本文档的信息
此版本:
https://www.w3.org/TR/2022/WD-css-text-decor-4-20220504/
最新发布版本:
https://www.w3.org/TR/css-text-decor-4/
编辑草稿:
https://drafts.csswg.org/css-text-decor-4/
历史版本:
历史记录:
https://www.w3.org/standards/history/css-text-decor-4
反馈:
CSSWG 问题库
跟踪器
规范内反馈
编辑者:
Elika J. Etemad / fantasai特邀专家
Google
建议修改此规范:
GitHub 编辑器

摘要

本模块包含与 CSS 文本装饰相关的特性,如下划线、文字阴影和着重号等。

CSS 是一种用于描述结构化文档(如 HTML 和 XML)在屏幕、纸张等上如何呈现的语言。

本文档状态

本节描述了本文档在发布时的状态。当前 W3C 出版物列表以及本技术报告的最新修订版可见于 W3C 技术报告索引 https://www.w3.org/TR/。

本文档由CSS 工作组推荐标准流程作为工作草案发布。 作为工作草案发布不代表 W3C 及其成员的认可。

这是一份草稿文档,可能随时被更新、替换或废弃。除非作为在研成果,否则不宜引用此文档。

请通过在 GitHub 提交 issue(推荐)反馈意见,标题中请包含规范代码 “css-text-decor”,示例:“[css-text-decor] …评论摘要…”。 所有问题和评论都会被存档。也可以发送至(存档)公共邮件列表 www-style@w3.org 反馈。

本文件受2021 年 11 月 2 日 W3C 流程文件管理。

本文件由遵循W3C 专利政策的工作组制作。 W3C 维护了与该工作组成果相关的专利披露公开列表; 该页面还包括专利披露方法的说明。知悉存在专利且认为其包含必要声明的个人,须依照W3C 专利政策第 6 节进行信息披露。

1. 引言

本小节为非规范性内容。

本模块涵盖文本装饰,即在根据字体和排版规则排版后,对文本字形进行装饰。 (参见 [CSS-TEXT-3][CSS-FONTS-3]。) 这些特性通常不仅用于纯粹的装饰目的,在某些情况下还用于表示强调、敬语,以及标示编辑更改(如插入、删除和拼写错误)。

CSS Level 1 和 Level 2 仅定义了非常基础的线条装饰(下划线、上划线和删除线), 主要适用于西方排版传统。 本模块的 Level 3 增加了更改这些装饰的颜色、样式、位置和连续性的能力, 还引入了着重号(传统上用于东亚排版), 以及阴影(原本在 Level 2 中提议后推迟实现)。 Level 4 则为这些装饰提供了更多控制选项。

1.1. 模块交互

本模块替代并扩展了 [CSS-TEXT-DECOR-3] 中定义的文本装饰特性。

本模块中的所有属性 都可以应用于 ::first-line::first-letter 伪元素

1.2. 值定义

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

除了在定义中列出的属性专用值以外, 本规范中定义的所有属性 还可接受 CSS-全局关键字 作为属性值。 为了可读性,没有在每个属性下重复列出。

1.3. 术语

本规范中使用的 排版字符单元字符)、排版字母单元字母), 以及 内容语言 等术语,均在 [CSS-TEXT-3] 中定义。 本规范中使用的其他术语和概念, 则定义于 [CSS2][CSS-WRITING-MODES-4]

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

下列属性描述了添加到元素内容上的线条装饰。 当在 内联盒 上指定或继承这些属性时, 该 会成为该装饰的 装饰盒, 并将装饰应用于其所有 盒片段。 装饰随后会进一步传播到任何分割该内联的 流内 块级盒(参见 CSS2.1 第 9.2.1.1 节)。 当在建立 内联格式化上下文块容器 上指定或继承时, 装饰会传播到包裹所有 流内 内联级子元素的匿名内联盒。 当在 ruby 容器 上指定或继承时, 装饰仅会传播到 ruby 基础。 其他盒类型则传播到所有 流内 子元素。

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

下划线、上划线和删除线只会绘制在 非替换内联盒 上, 并且会跨越所有文本(包括空白、字符间距和单词间距), 但不包括行首和行末的空白(空格、字符间距和单词间距)。 原子内联(如图片和内联块)不会被装饰。 装饰盒的外边距、边框和内边距总是被跳过, 但后代 内联盒的外边距、边框和内边距不会被跳过。

注意,CSS 2.1 要求始终跳过外边距、边框和内边距。 在 Level 3 及以后,默认情况下 只跳过 装饰盒的外边距、边框和内边距。 未来 CSS2.1 可能会更新以匹配这一新默认值。

相对定位后代元素会使应用于其上的所有文本装饰随文本一起移动; 但不会影响装饰在该行上初始位置的计算。 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>text</em> 在 em 块中同样有下划线,因为它在流内块中,且下划线被传播。最后一行文本为紫红色(fuchsia),但其下的下划线依然是匿名内联元素的蓝色下划线。Sample rendering of the above underline example 此图展示了示例中涉及的盒模型: 圆角青色线表示包裹段落内联内容的匿名内联元素,圆角蓝色线表示 span 元素,橙色线表示块级元素。

注意: 线条装饰是通过盒树而非继承进行传播, 因此在 display: contents 的元素上指定时,对后代无影响。

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

名称: text-decoration-line
值: none | [ underline || overline || line-through || blink ] | spelling-error | grammar-error
初始值: none
适用元素: 所有元素
是否继承: 否(见上文说明)
百分比: 不适用
计算值: 指定关键字
规范顺序: 按语法顺序
动画类型: 离散型

该属性是 text-decoration 简写属性的子属性, 用于指定元素添加哪些线条装饰。 除 text-decoration-line 之外的值会使元素生成相应的文本装饰,并按上文描述进行应用和传播。

注意: 除非希望线条的颜色、样式和粗细由更低层的层叠声明设置, 否则建议使用 text-decoration 简写,而不是该长属性

各值含义如下:

none
不产生也不抑制文本装饰。
underline
每行文本下方有一条下划线。
overline
每行文本上方有一条上划线(即下划线的对侧)。
line-through
每行文本中间有一道删除线。
blink
文本会闪烁(在可见与不可见之间交替)。 合规的用户代理可以不让文本闪烁。 注意,不让文本闪烁是达成 WAI-UAAG 检查点 3.3 的一种方式。 此值已废弃,建议使用动画 [CSS3-ANIMATIONS] 实现。
spelling-error
该值表示用户代理用于高亮拼写错误的文本装饰类型。 其外观由 UA 定义,可能与平台相关。通常渲染为红色波浪线下划线。
grammar-error
该值表示用户代理用于高亮语法错误的文本装饰类型。 其外观由 UA 定义,可能与平台相关。通常渲染为绿色波浪线下划线。

注意:垂直书写模式下,text-underline-position 可以导致下划线和上划线切换位置。 这使下划线位置能自动根据语言偏好调整。

由于 spelling-errorgrammar-error 装饰完全由 UA 定义, UA 可以 忽略 text-decoration 的其他子属性, 以及通常影响线条装饰外观的其他属性 (如 text-underline-positioncolorstrokefill) 在渲染这些装饰时。 但如果采纳这些属性能在 UA 选定的渲染下有意义且可行, UA 应当 将其作为默认样式的修饰应用。

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

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

该属性是 text-decoration 简写属性的子属性, 用于设置元素上 text-decoration-line 所指定的下划线、上划线和删除线的绘制样式, 并影响所有从该元素起始的装饰,即使后代盒指定了不同样式也无效。

各值的含义与 border-style 属性 [CSS-BACKGROUNDS-3] 相同。wavy 表示波浪线。

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

名称: text-decoration-color
值: <color>
初始值: currentcolor
适用元素: 所有元素
是否继承:
百分比: 不适用
计算值: 计算颜色
规范顺序: 按语法顺序
动画类型: 按计算值类型

该属性是 text-decoration 简写属性的子属性, 用于设置元素上 text-decoration-line 所指定的下划线、上划线和删除线的颜色, 并影响所有从该元素起始的装饰,即使后代盒指定了不同颜色也无效。

2.4. 文本装饰线粗细:text-decoration-thickness 属性

名称: text-decoration-thickness
值: auto | from-font | <length> | <percentage>
初始值: auto
适用元素: 所有元素
是否继承:
百分比: 不适用
计算值: 指定关键字或绝对长度
规范顺序: 按语法顺序
动画类型: 按计算值

该属性是 text-decoration 简写属性的子属性, 用于设置元素上 text-decoration-line 所指定的下划线、上划线和删除线的笔画粗细, 并影响所有从该元素起始的装饰,即使后代盒指定了不同粗细也无效。

各值含义如下:

auto
UA 自动选择合适的文本装饰线粗细;见下文。
from-font
第一个可用字体有首选下划线宽度相关度量, 则使用该宽度,否则与 auto 行为一致。
<length>
指定文本装饰线的粗细为固定长度。 UA 必须将实际值下限限定为一个设备像素。

注意: 长度值继承为固定值,不随字体缩放。

<percentage>

指定文本装饰线的粗细为 1em 的百分比。 UA 必须将实际值下限限定为一个设备像素。

注意: 百分比值继承为相对值,因此会随字体变化而缩放。

2.4.1. 文本装饰线自动粗细

某些字体格式(如 OpenType)可提供关于线条装饰适当粗细的信息。 UA 应在选择 auto 粗细时, 在适当情况下优先采用字体提供的信息。

2.5. 线条装饰的位置与粗细确定

本节内容摘自 Text Decoration Level 3 的早期草稿。 仍处于评审阶段,需要与 text-underline-offsettext-decoration-thickness 集成。

由于线条装饰可能跨越具有不同字体大小和垂直对齐方式的元素,最优的装饰线位置不一定是由 装饰盒 理想位置决定的。 实际上,它是根据每一行上由该 装饰盒 装饰的所有文本(即 被考虑文本)来计算的。 但是,由于 text-decoration-skip 被跳过的 装饰盒 后代、 text-decoration-skip: ink 的后代内联元素, 以及不参与 装饰盒 内联格式化上下文的任何后代,都不计入 被考虑文本 范围。

然后,线条装饰位置按每一行分别计算如下 (将 over 位置的下划线视为 over 线, 将 under 位置的上划线视为 under 线):

over 线
over EM-box 的最高边缘 对齐 被考虑文本 的装饰线。
字母型下划线
字母型下划线位置通过获取每个 被考虑文本 区段与字母基线的理想偏移,然后取平均值,再用最低的字母基线实际定位。 (若主基线非字母型,不同 baseline 对齐的盒可能基线不同。) 为防止上标和下标影响位置,非初始值 vertical-align 的内联元素视为拥有与父元素一致的下划线理想位置。
非字母型 under 线
under EM-box 的最低边缘 对齐 被考虑文本 的装饰线。
删除线
删除线的定位方式本质上与字母型下划线类似,但遇到后代有不同 font-size 时会重新计算位置。 (这样能确保文本在字体大小变化时依然能“被划掉”。) 对于每个具有相同 font-size被考虑文本 区段, 从其字体度量平均计算理想位置。 为防止上标和下标影响位置,非初始值 vertical-align 的内联元素视为拥有与父元素一致的下划线理想位置。 各被修饰片段的线条在其理想位置绘制。

为简化起见,删除线应在每个元素的首选/平均位置绘制。 这可能导致跳变现象,但似乎没有一种方法能在所有情况下都正确,且所有尝试都过于复杂。 若元素有不同 font-size 但无 被考虑文本,删除线应取何位置?

CSS 未定义线条装饰的粗细。 在确定文本装饰线粗细时,UA 可以考虑后代的字体大小、字重和字形,以提供合适的平均粗细。

下图展示了下划线的平均计算方式:

在第一个有下划线的文本片段 '1st a' 中,'st' 是上标,'1st' 和 'a' 均为小号字体。第二个渲染中,'a' 使用大号字体。第三个渲染中,'1st' 和 'a' 都为大号字体。

在这三个带下划线的文本片段中,随着大号字体占比增大,下划线绘制得逐渐更低更粗。

同样示例中,删除线在第二个片段则不是对两种字体平均处理,而是分成两段:

但无论哪种情况,由于上标导致的垂直对齐变动,都不影响线条实际位置。

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

名称: text-decoration
值: <'text-decoration-line'> || <'text-decoration-thickness'> || <'text-decoration-style'> || <'text-decoration-color'>
初始值: 见各自属性
适用元素: 见各自属性
是否继承: 见各自属性
百分比: 见各自属性
计算值: 见各自属性
动画类型: 见各自属性
规范顺序: 按语法顺序

该属性是同时设置 text-decoration-linetext-decoration-thicknesstext-decoration-styletext-decoration-color 的简写属性。 省略的值会被设为各自的初始值。

下例演示了在 CSS1 和 CSS2 UA 下为未访问链接添加实线蓝色下划线,在 CSS3 UA 下为其添加海军蓝点状下划线:
:link {
  color: blue;
  text-decoration: underline;
  text-decoration: navy dotted underline; /* 在 CSS1/CSS2 UA 被忽略 */
}

注意: 该简写属性特意省略了 text-underline-position 属性, 因其为与语言/书写系统相关的内容设置,需独立于(非继承的)text-decoration 简写属性进行层叠与继承。

2.7. 下划线位置:text-underline-position 属性

名称: text-underline-position
值: auto | [ from-font | under ] || [ left | right ]
初始值: auto
适用元素: 所有元素
是否继承:
百分比: 不适用
计算值: 指定关键字
规范顺序: 按语法顺序
动画类型: 离散型

该属性不是 text-decoration 简写属性的子属性, 用于设置下划线相对于文本的位置, 并定义其零点,以便后续通过 text-underline-offset 调整。 它影响所有从该元素起始的装饰,即使后代盒指定不同位置也无效。 不影响祖先元素指定的下划线。

下例分别为现代中日韩文本在横排与竖排下使用合适的下划线位置:
: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; }

若单独指定 leftright,则隐含 auto。 各值含义如下:

auto
UA 可以采用任意算法确定下划线位置,但下划线必须位于字母基线或其下方。

注意: 建议默认的下划线位置靠近字母基线,除非此位置会穿过下标(或其他降低的文本)或与亚洲文字(如汉字或藏文)字形冲突, 此时可将下划线下移或对齐 em 框边缘(如 under 所述)更合适。

在典型拉丁字体中,下划线略低于字母基线,字母底部与线之间留有间隙,但会穿过如 p 的下行部。

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

from-font
第一个可用字体 有首选下划线偏移度量,则用该值,否则同 auto
under
下划线位于元素文本内容的下方。 此时下划线通常不会穿过下行部(有时称为“会计”下划线)。 该值可与 leftright 结合,用于垂直排版模式指定一侧。
由于 text-underline-position 会继承,且不会被 text-decoration 简写属性重置,下例将文档切换为 under 下划线,适合有长复杂下行部的书写系统,也常用于包含大量下标的数学或化学文本。
:root { text-underline-position: under; }

注意: under 并不保证下划线绝不与字形冲突, 因为某些字体的下行部或变音符可能超出字体下降线。

left
在垂直排版模式下,下划线对齐方式同 under,但总是对齐文本左侧。 若导致下划线绘制在文本“上方”,则上划线也会切换至“下方”。
right
在垂直排版模式下,下划线对齐方式同 under,但总是对齐文本右侧。 若导致下划线绘制在文本“上方”,则上划线也会切换至“下方”。
在中日文-拉丁文混排的竖排文本中,'text-underline-position: left' 将下划线放在文本左侧。 在中日文-拉丁文混排的竖排文本中,'text-underline-position: right' 将下划线放在文本右侧。
left right

在垂直排版模式下,text-underline-positionleftright 可将下划线放在文本任意一侧。(在横排排版模式下,这两个值都等同于 auto。)

2.8. 下划线偏移:text-underline-offset 属性

名称: text-underline-offset
值: auto | <length> | <percentage>
初始值: auto
适用元素: 所有元素
是否继承:
百分比: 不适用
计算值: 指定关键字或绝对长度
规范顺序: 按语法顺序
动画类型: 按计算值

该属性不是 text-decoration 简写属性的子属性, 用于设置下划线相对于其零点的偏移量。 正值表示远离文本,负值表示靠近文本。 它影响所有从该元素起始的装饰,即使后代盒指定不同位置也无效。 不影响祖先元素指定的下划线。

各值含义如下:

auto

UA 自动选择合适的下划线偏移。

但若 text-underline-position 的计算值为 from-font 且 UA 能从字体中提取合适度量,则该偏移为零。

<length>

以固定长度指定下划线偏移。

注意: 长度值继承为固定值,不随字体缩放。

<percentage>

1em 的百分比指定下划线偏移。

注意: 百分比值继承为相对值,因此会随字体变化而缩放。

text-decoration-line 属性值为 spelling-errorgrammar-error 时, UA 可以忽略 text-underline-position 的值。

2.8.1. 下划线偏移原点(零点)

零点 取决于 text-underline-position 的值,详见下表。

text-underline-positiontext-underline-offset 的交互
text-underline-position 零点 正方向
auto 字母基线 under
from-font 字体度量中指定的位置,若无则回退为字母基线 under
under 文本下边缘 under
left 文本下(左)边缘 under
right 文本上(右)边缘 over

下划线对齐于指定位置的外侧(其粗细仅向正方向扩展)。

为适应后代内容而自动调整的位置会被保留; text-underline-offset 的值是在此基础上的额外偏移。

2.8.2. 使用字体度量自动定位

某些字体格式(如 OpenType)可提供线条装饰适当位置的信息。 UA 应在选择 auto 偏移时优先采用字体度量信息, 并且当 from-font 用于 text-underline-position 时必须采用此信息。

注意: 通常,OpenType 字体度量给出的是 alphabetic 下划线的位置; 某些情况下(尤其是 CJK 字体), 给出的是 under left 下划线的位置。 (此时字体下划线度量通常贴合 em 框底边。) UA 可以但不要求修正不准确的字体度量。

2.9. 文本装饰线一致性

线条装饰的确切位置和粗细取决于上述 text-underline-positiontext-underline-offsettext-decoration-thickness 的取值, 其他情况由 UA 自行定义。 但对于下划线和上划线,UA 必须在每一行上为同一个装饰盒派生的装饰线使用统一的粗细和位置。

A single underline drawn under varying font sizes and vertical positions must be a single line. vs. Drawing multiple line segments, each with the position and thickness appropriate to the decorated text, is incorrect.

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

注意,线条装饰可能跨越具有不同字体大小和垂直对齐方式的元素,最优的装饰线位置不一定是由装饰盒理想位置决定。 例如,若上划线靠小号字体定位,若该元素包含大号字体文本,实际会变为删除线。 即便是下划线,若文本未对齐字母基线 (如垂直排版默认对齐中央基线 [CSS-WRITING-MODES-4]), 下划线也会穿过较大字号的后代文本。 UA 考虑后代内容能获得更好的排版效果。

由于垂直文本采用中央基线对齐, 小号竖排文本的左侧下划线会穿过大号子元素文本。 下划线不得断开,但进一步左移可妥善包容所有被下划线装饰的文本。

UA 必须 调整线条位置以匹配通过 vertical-align(非 baseline [CSS2])或通过 font-variant-position [CSS-FONTS-3] 上标/下标变换而偏移的装饰盒的度量, 但不得装饰盒后代采用上述方式而调整线条位置或粗细 (即使 UA 可以为如上文所述仅字号不同的后代而调整位置)。 这保证了上标/下标文本可正常装饰(有下划线、删除线等), 但不会影响祖先装饰线的位置或断裂。

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.

仅为上标 st 添加下划线 vs. 为包含上标的文本整体添加下划线的示例

2.10. 文本装饰线连续性:text-decoration-skip 简写及其子属性

CSSWG 决议将跳过功能拆分为各自独立属性 (如 text-decoration-skip-ink), 以改善层叠行为。 参见讨论决议。 本节为粗略草稿,尚未经过 CSSWG 评审。

名称: text-decoration-skip
值: none | auto
初始值: 见各自属性
适用元素: 所有元素
是否继承:
百分比: 不适用
计算值: 见各自属性
规范顺序: 按语法顺序
动画类型: 离散型

text-decoration-skip 及其子属性 (text-decoration-skip-selftext-decoration-skip-boxtext-decoration-skip-insettext-decoration-skip-spacestext-decoration-skip-ink) 控制装饰线因自身或祖先为装饰盒时的中断行为。 none 会将所有子属性设为 noneauto 则将所有子属性设为初始值。

这样的 none 定义是否兼容 Web? 是否还需增加 ink 值以兼容 Web?

注意,这些属性会继承,后代元素可有不同设置。

HTML 默认 UA 样式表增加如下内容:

ins, del { text-decoration-skip: none; }

text-decoration-line 属性值为 spelling-errorgrammar-error 时, UA 可忽略这些属性中的任意一项或全部。

2.10.1. 跳过空白:text-decoration-skip-self 属性

名称: text-decoration-skip-self
值: none | objects
初始值: objects
适用元素: 所有元素
是否继承:
百分比: 不适用
计算值: 指定关键字
规范顺序: 按语法顺序
动画类型: 离散型

CSSWG 决议将 text-decoration-skip 拆分为子属性, 但该值集尚未经 CSSWG 评审。

该属性指定祖先绘制的文本装饰线是否会传播到本元素或跨越本元素绘制。 各值含义如下:

none
不跳过:祖先装饰盒的装饰线会按需传播到或跨越该盒。
objects
若本元素为原子内联(如图片或 inline-block),则跳过本元素(其整个外边距盒)。

2.10.2. 跳过空白:text-decoration-skip-box 属性

名称: text-decoration-skip-box
值: none | all
初始值: none
适用元素: 所有元素
是否继承:
百分比: 不适用
计算值: 指定关键字
规范顺序: 按语法顺序
动画类型: 离散型

CSSWG 决议将 text-decoration-skip 拆分为子属性, 但该值集尚未经 CSSWG 评审。

该属性指定作用于本元素的文本装饰线要跳过盒区域的哪些部分。 仅控制祖先绘制的文本装饰线。 各值含义如下:

none
不跳过:祖先装饰盒的装饰线会从外边距边到外边距边绘制。
all
在绘制祖先装饰盒的文本装饰线时, 跳过该盒本身的外边距、边框和内边距区域,只在内容区绘制装饰线。

该值仅对祖先施加的装饰线有效; 装饰盒 永远不会绘制在自己盒装饰上。

2.10.3. 内嵌边缘:text-decoration-skip-inset 属性

名称: text-decoration-skip-inset
值: none | auto
初始值: none
适用元素: 所有元素
是否继承:
百分比: 不适用
计算值: 指定关键字
规范顺序: 按语法顺序
动画类型: 离散型

CSSWG 决议将 text-decoration-skip 拆分为子属性, 但该值集尚未经 CSSWG 评审。

该属性指定作用于本元素的文本装饰线要跳过盒区域的哪些部分。 它控制该元素自身绘制的所有文本装饰线, 但不控制祖先绘制的任何文本装饰线。 各值含义如下:

none
不跳过:文本装饰线从盒边到盒边绘制。
auto
UA 必须将线条的起止点从 装饰盒 内容边缘向内缩进一点, 例如两个并列下划线元素不会看起来像一条连续下划线。 缩进量由用户代理决定(如半个线条厚度),但不能为零。 (在中文中尤为重要,下划线是一种标点形式。)

在一串中文字符下方,下划线在相邻下划线元素之间有间隙。

text-decoration-skip-inset: auto 用于 <u>石井</u><u>艾俐俐</u>

该属性或许应为独立属性而非 text-decoration-skip 组的一部分。 另见 Issue 4557,关于显式控制线条长度。

2.10.4. 跳过空白:text-decoration-skip-spaces 属性

名称: text-decoration-skip-spaces
值: none | all | [ start || end ]
初始值: start end
适用元素: 所有元素
是否继承:
百分比: 不适用
计算值: 指定关键字
规范顺序: 按语法顺序
动画类型: 离散型

初始值是否应为 none 以兼容 Web? 如果不是,至少应在 UA 默认样式表中为 INS 和 DEL 指定 none。 另见 Issue 4653

该属性指定文本装饰是否跳过空白字符。 它控制本元素绘制的所有文本装饰线, 也控制祖先绘制的所有文本装饰线。 各值含义如下:

none
空白符不会被跳过,将与其他字符一样被装饰。
all
跳过所有 空白符, 以及任何相邻的 letter-spacingword-spacing
start
跳过所有 空白符, 以及任何相邻的 letter-spacingword-spacing, 当这些位于行首时。
end
跳过所有 空白符, 以及任何相邻的 letter-spacingword-spacing, 当这些位于行尾时。

就本属性而言, 空白符 是指任何具有 Unicode White_Space 属性的排版字符单元 [UAX44](除了 U+202F 窄不换行空格), 或任何词分隔符

2.10.5. 跳过字形:text-decoration-skip-ink 属性

名称: text-decoration-skip-ink
值: auto | none | all
初始值: auto
适用元素: 所有元素
是否继承:
百分比: 不适用
计算值: 指定关键字
规范顺序: 按语法顺序
动画类型: 离散型

该属性控制当装饰线穿过字形时,上划线和下划线的绘制方式。 它影响所有从本元素起始的装饰,即使后代盒指定了不同样式也无效。

启用时,装饰线会在字形处跳断:即装饰线在本应穿过字形的地方中断,让文本形状显现出来。 UA 还必须在字形轮廓两侧稍作跳断。

缅甸文本的字母型下划线会跳过下行部和组合字符下方的竖线。

跳过字形墨水

表意文字书写系统在 auto 时并不希望跳过。 如何定义该行为? 是否还有其他脚本也不希望跳断? 需要规范文本描述 auto 的工作方式。 参见 电话会议纪要alreq#86csswg#1288

该属性仅适用于上划线和下划线;删除线始终为连续线。

auto
UA 可以 在装饰线穿过字形墨水及轮廓两侧一定距离时中断下划线和上划线。 UA 在决定是否对给定文本范围应用跳墨行为时,应当考虑文本书写系统(见下方备注)。
all
UA 必须 在装饰线穿过字形墨水及轮廓两侧一定距离时中断下划线和上划线。
none
UA 必须 绘制连续的下划线和上划线,穿过字形时不出现中断。
注意:实现经验表明,当带下划线文本包含表意文字时,跳墨行为往往产生不理想效果, 因为下划线位置(取决于字体和 UA)常与几乎所有字形冲突,导致仅零星线段可见。

原则上,作者可通过 text-underline-position: under(或 text-underline-offset)将下划线移至不与字形冲突的位置, 但即便 UA 支持且作者知晓,实际应用并不总是可行。 尤其在页面包含用户生成内容时,设计者未必知晓是否含 CJK 内容。 混合脚本内容下,为 CJK 调整的下划线位置反而可能导致非 CJK 文本观感不佳。

因此,当 auto 生效时,实现跳墨的 UA 应当 在 CJK 场景下避免跳墨。 (作者如确实希望 CJK 内容跳墨可显式用 always 值。)

主要是指不应对 Unicode Script 属性为 Han、Hiragana、Katakana、Bopomofo 或 Hangul 的字符跳墨, 以及 Script 属性为 Inherited 或 Common 且其 ScriptExtensions 属性包含 CJK 脚本的字符。

此外,Script 属性为 Common 和 Inherited 的字符(多为通用标点和符号)也应考虑, 因这些可能作为 CJK 脚本内容的一部分出现,需整段一致处理。 UA 应当[UAX24]“Unicode Script Property”的 5.1、5.2 节,将文本分成脚本区间。 应用相关启发式或类似分析后,UA 应当 禁止所有 CJK 脚本区间的跳墨。

是否还有其他(非 CJK)脚本应默认禁止跳墨 (在 auto 时)? 如彝文?阿拉伯文? (参见 Issue 1288 相关讨论。)

2.10.6. 断开形状

当 UA 在字形边界处中断下划线或上划线时, 线条在该边界的形状应当跟随字形轮廓。

注意,本规范有意未强制规定“跟随字形轮廓”的具体方法, 以便 UA 可灵活兼顾美观与性能。 例如, UA 可在尺寸阈值以下采用方形线端以提升性能; 或对较细装饰线采用梯形线端以拟合曲线。 在美观方面, UA 还需考虑若字形边界只截断线条一部分厚度或与水平呈斜角时,是否严格跟曲线反而导致不自然的线端残影。 是否在字形封闭区域内显示线条也是一项考虑。
如单词“goal”下划线穿过 g 的下环。根据下划线位置和粗细,g 内部可见整条或部分下划线。左图下划线穿过 g 的环中央,整个厚度都显示出来。右图下划线更低,只显示部分厚度。

在字母内部隐藏下划线部分让排版更美观,而外部曲线端则暗示线条连续穿过字母,与轮廓贴合。

3. 着重号的附加控制

东亚文献传统上会在每个字旁边加小符号以突出一段文本。例如:

日文着重号示例,出现在文本上方

日文文本上的重音着重号(为便于观察用蓝色显示)

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
适用对象: 文本
是否继承:
百分比: 不适用
计算值: 关键字 none、表示形状和填充的一对关键字,或字符串
规范顺序: 按语法
动画类型: 离散型

该属性为元素文本应用着重号。值的含义如下:

none
无着重号。
filled
形状为实心。
open
形状为空心。
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 Font,该字体专为着重号设计。

每个排版字符单元绘制一次着重号。 但以下情况绘制着重号:

注: 对于哪些字符被标记,Level 4 将会增加控制能力。 (标点列表也可能进一步细化,尤其是非 CJK 标点。)

3.2. 着重号颜色:text-emphasis-color 属性

名称: text-emphasis-color
值: <color>
初始值: currentcolor
适用对象: 文本
是否继承:
百分比: 不适用
计算值: 计算后颜色
规范顺序: 按语法
动画类型: 按计算值类型

该属性指定着重号的前景色。

注: currentcolor 关键字计算为自身,并在继承后解析为 color 的值。 这意味着 text-emphasis-color 默认与文本 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
适用对象: 文本
是否继承:
百分比: 不适用
计算值: 指定关键字
规范顺序: 按语法
动画类型: 离散型

该属性描述着重号的绘制位置。 如果省略 [ right | left ],则默认 right。 各值含义如下:

over
在横排排版模式下绘制在文本上方。
under
在横排排版模式下绘制在文本下方。
right
在竖排排版模式下绘制在文本右侧。
left
在竖排排版模式下绘制在文本左侧。

着重号的绘制方式与每个字符作为 ruby 注释文本,并以 text-emphasis-position 指定 ruby 位置且居中对齐时完全一致。 注意,如该位置与下划线或上划线冲突,位置可做调整。

着重号对行高的影响与 ruby 文本相同。

注意,不同语言的着重号首选位置不同。如日文首选 over right,中文则首选 under right。 下表总结了中日文的首选着重号位置:
中日文首选着重号和 ruby 位置
语言 首选位置 示意图
横排 竖排
日文 over right 横排日文每个被强调字符上方都有着重号。 竖排日文每个被强调字符右侧都有着重号。
韩文
蒙古文
中文 under right 横排简体中文每个被强调字符下方都有着重号。

如对同时有 ruby 且在相同位置的字符应用着重号,着重号绘制在 ruby 之外。这包括 自动隐藏 和空的 ruby 注释

本例为 4 个字符加着重号,其中 2 个有 ruby。裸字符的点在上方(与 ruby 对齐),有 ruby 的点在 ruby 文本上方。

4 个字符中有 ruby 的 2 个也加了着重号

有些编辑器更倾向于当着重号与 ruby 冲突时隐藏着重号。 在 HTML 中可使用如下样式规则:
ruby { text-emphasis: none; }

也有编辑器更倾向于当冲突时隐藏 ruby。在 HTML 中可这样:

em { text-emphasis: dot; } /* 为 <em> 元素设置着重号 */
em rt { display: none; }   /* 隐藏 <em> 内的 ruby */

3.5. 着重号跳过:text-emphasis-skip 属性

本节处于头脑风暴阶段。 尽管不同出版物对行为有不同需求,但尚不确定是否确实需要此属性。

名称: text-emphasis-skip
值: spaces || punctuation || symbols || narrow
初始值: spaces punctuation
适用对象: 文本
是否继承:
百分比: 不适用
计算值: 指定关键字
规范顺序: 按语法
动画类型: 离散型

该属性描述哪些字符会绘制着重号。 各值含义如下:

spaces
跳过词分隔符或其他属于 Unicode 分隔符类别 (Z*) 的字符。 (但注意,与组合字符组合的空格绘制着重号。)
punctuation
跳过标点符号。 本定义中的标点包括属于 Unicode P* 类别的字符,但不含下述 符号(见下文)。
symbols
跳过符号。 此定义中的符号包括所有属于 Unicode S* 通用类别排版字符单元,以及 NFKD 归一化等价于 Unicode Po 类别下表字符的字符
# U+0023 号码标志
% U+0025 百分号
U+2030 千分号
U+2031 万分号
٪ U+066A 阿拉伯百分号
؉ U+0609 阿拉伯-印度千分号
؊ U+060A 阿拉伯-印度万分号
& U+0026 和号
U+204A 提洛尼安符号 ET
@ U+0040 商业 at
§ U+00A7 节号
U+00B6 段落标记
U+204B 反向段落标记
U+2053 波浪连接号
〽️ U+303D 变换标记
narrow
跳过 Unicode 数据库 East_Asian_Width 属性 [UAX11] [UAX44] 不为 F(全角)或 W(宽)的字符。

属于 Unicode 控制码和未分配字符类别(Cc、Cf、Cn)的字符,无论本属性为何值,都会被跳过。

该语法要求 UA 实现可为空格绘制着重号。 是否有此用例?如果没有,是否应修改语法禁止为空格绘制着重号?

另见关于初始值的 讨论

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

名称: text-shadow
值: none | <shadow>#
初始值: none
适用对象: 文本
是否继承:
百分比: 不适用
计算值: 要么是关键字 none,要么是一个列表,每项包含四个绝对长度和一个计算颜色,以及可选的 inset 关键字
规范顺序: 按语法
动画类型: 作为阴影列表

该属性接受以逗号分隔的阴影效果列表,应用于元素文本。 各值的解释与 box-shadow [CSS-BACKGROUNDS-3] 一致。 每一层阴影都会为元素文本及其所有文本装饰(合成后)加阴影。 阴影效果按从前到后绘制:第一个阴影在最上层。 阴影之间可相互覆盖。

box-shadow 不同, 扩展距离严格解释为从字形轮廓任何点外扩, 因此类似于模糊半径,会产生圆角而非尖角。 负扩展值无效。

是否应让圆角形状未定义?[Issue #7250]

外部文字阴影 (未指定 inset 关键字) 会为文本(包括任何文本描边 [FILL-STROKE-3])加阴影,仿佛被裁剪并悬浮在画布上。 与 box-shadow 不同,外部文字阴影不会裁剪至被投影形状的范围,若文本有半透明效果则阴影可透出。

内部文字阴影 (指定 inset 关键字) 会为画布及任何文本描边 [FILL-STROKE-3] 加阴影,仿佛文本被裁剪并下沉于画布下方。 因此阴影仅绘制在描边的内边缘。

外部文字阴影 必须绘制在元素边框/背景(如有)与文本及文本装饰之间。 内部文字阴影必须覆盖文本及其装饰。 UA 应避免将文字阴影绘制在同一堆叠级别、同一堆叠上下文的相邻元素文本之上。 (这意味着阴影的具体堆叠级别可能取决于元素是否有边框或背景:阴影的具体堆叠行为由 UA 自行定义。)

与描边的堆叠关系?[Issue #7251]

如同 box-shadow,文字阴影不会影响布局,也不会触发滚动或增加可滚动溢出区域的大小。

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 开发者实现默认样式表, 但 UA 开发者可自由忽略或更改。

/* 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;
}

/* 禁止着重号继承到 ruby 文本:
   着重号应仅应用于基文本 */
rt { text-emphasis: none; }

/* 设置适合语言的默认着重号位置 */
:root:lang(zh), [lang|=zh] { text-emphasis-position: under right; }
[lang|=ja], [lang|=ko]     { text-emphasis-position: over right; }

/* 设置适合语言的默认下划线位置 */
: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(隐含)而非 under,出于内容兼容性考虑 */

如有建议、问题或修正, 请发送邮件至 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:变更记录

自 2020 年 5 月 6 日工作草案以来的变更

2020 年 5 月 6 日工作草案以来的重大变更:

自 Level 3 以来的新增内容

Level 3以来新增的特性:

6. 隐私与安全注意事项

本规范未引入新的隐私或安全注意事项。

一致性

文档约定

一致性要求通过描述性断言和 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 必须提供可访问性替代方案。

一致性类别

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

样式表
CSS 样式表
渲染器
UA,即解释样式表并渲染使用它们的文档的用户代理。
创作工具
UA,即编写样式表的工具。

样式表符合本规范,需其所有使用本模块定义语法的声明均符合通用 CSS 语法和本模块各特性的语法。

渲染器符合本规范,需除按相关规范解释样式表外,还需正确解析并渲染本规范所有特性。但因设备限制 UA 无法正确渲染文档并不属于不一致。例如在黑白显示器上不要求渲染颜色。

创作工具符合本规范,需其生成的样式表在语法上符合通用 CSS 语法和本模块特性语法,且满足本模块所有样式表一致性要求。

部分实现

为便于作者利用向前兼容解析规则指定回退值,CSS 渲染器必须将所有不支持的 at-规则、属性、属性值、关键字及其他语法结构视为无效(并适当忽略)。尤其,UA 不得在多值声明中选择性忽略不支持的值并保留支持的值:若有任何值无效(不支持的值必须为无效),CSS 要求整个声明被忽略。

不稳定与专有特性的实现

为避免与未来稳定 CSS 特性冲突,CSSWG 推荐遵循最佳实践来实现不稳定特性与专有扩展

非实验性实现

当规范进入候选推荐阶段(CR),即可进行非实验性实现,且实现者应发布通过规范性验证的无前缀实现。

为确保 CSS 在不同实现间的互操作性,CSS 工作组要求非实验性 CSS 渲染器在发布任何 CR 级特性无前缀实现前,提交实现报告(如有必要,还应提交用于该报告的测试用例)给 W3C。提交的测试用例由 CSS 工作组审核和修正。

关于提交测试用例和实现报告的更多信息,可在 CSS 工作组网站 https://www.w3.org/Style/CSS/Test/ 查询。问题可发至 public-css-testsuite@w3.org 邮件列表。

索引

本规范定义的术语

引用中定义的术语

参考文献

规范性引用

[CSS-BACKGROUNDS-3]
Bert Bos;Elika Etemad;Brad Kemper。CSS 背景与边框模块 3 级。2021年7月26日。CR。URL:https://www.w3.org/TR/css-backgrounds-3/
[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-COLOR-4]
Tab Atkins Jr.;Chris Lilley;Lea Verou。CSS 色彩模块 4 级。2021年12月15日。WD。URL:https://www.w3.org/TR/css-color-4/
[CSS-DISPLAY-3]
Tab Atkins Jr.;Elika Etemad。CSS 显示模块 3 级。2021年9月3日。CR。URL:https://www.w3.org/TR/css-display-3/
[CSS-FONTS-3]
John Daggett;Myles Maxfield;Chris Lilley。CSS 字体模块 3 级。2018年9月20日。REC。URL:https://www.w3.org/TR/css-fonts-3/
[CSS-FONTS-4]
John Daggett;Myles Maxfield;Chris Lilley。CSS 字体模块 4 级。2021年12月21日。WD。URL:https://www.w3.org/TR/css-fonts-4/
[CSS-INLINE-3]
Dave Cramer;Elika Etemad;Steve Zilles。CSS 内联布局模块 3 级。2020年8月27日。WD。URL:https://www.w3.org/TR/css-inline-3/
[CSS-OVERFLOW-3]
David Baron;Elika Etemad;Florian Rivoal。CSS 溢出模块 3 级。2021年12月23日。WD。URL:https://www.w3.org/TR/css-overflow-3/
[CSS-POSITION-3]
Elika Etemad;Tab Atkins Jr.。CSS 定位布局模块 3 级。2021年12月16日。WD。URL:https://www.w3.org/TR/css-position-3/
[CSS-PSEUDO-4]
Daniel Glazman;Elika Etemad;Alan Stearns。CSS 伪元素模块 4 级。2020年12月31日。WD。URL:https://www.w3.org/TR/css-pseudo-4/
[CSS-RUBY-1]
Elika Etemad 及其他。CSS Ruby 注释布局模块 1 级。2021年12月2日。WD。URL:https://www.w3.org/TR/css-ruby-1/
[CSS-SYNTAX-3]
Tab Atkins Jr.;Simon Sapin。CSS 语法模块 3 级。2021年12月24日。CR。URL:https://www.w3.org/TR/css-syntax-3/
[CSS-TEXT-3]
Elika Etemad;Koji Ishii;Florian Rivoal。CSS 文本模块 3 级。2021年4月22日。CR。URL:https://www.w3.org/TR/css-text-3/
[CSS-VALUES-3]
Tab Atkins Jr.;Elika Etemad。CSS 值与单位模块 3 级。2019年6月6日。CR。URL:https://www.w3.org/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.;Elika Etemad。CSS 值与单位模块 4 级。2021年12月16日。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/
[FILL-STROKE-3]
Elika Etemad;Tab Atkins Jr.。CSS 填充与描边模块 3 级。2017年4月13日。WD。URL:https://www.w3.org/TR/fill-stroke-3/
[RFC2119]
S. Bradner。在RFC中表示需求级别的关键词。1997年3月。最佳现行实践。URL:https://datatracker.ietf.org/doc/html/rfc2119
[SELECTORS-4]
Elika Etemad;Tab Atkins Jr.。选择器 4 级。2018年11月21日。WD。URL:https://www.w3.org/TR/selectors-4/
[UAX11]
Ken Lunde 小林劍󠄁。东亚宽度。2021年8月23日。Unicode 标准附录 #11。URL:https://www.unicode.org/reports/tr11/tr11-39.html
[UAX15]
Ken Whistler。Unicode 归一化形式。2021年8月27日。Unicode 标准附录 #15。URL:https://www.unicode.org/reports/tr15/tr15-51.html
[UAX24]
Ken Whistler。Unicode 脚本属性。2021年8月27日。Unicode 标准附录 #24。URL:https://www.unicode.org/reports/tr24/tr24-32.html
[UAX44]
Ken Whistler;Laurențiu Iancu。Unicode 字符数据库。2021年8月30日。Unicode 标准附录 #44。URL:https://www.unicode.org/reports/tr44/tr44-28.html

补充性参考文献

[CSS-CASCADE-6]
Elika Etemad;Miriam Suzanne;Tab Atkins Jr.。CSS 层叠与继承 6 级。2021年12月21日。WD。URL:https://www.w3.org/TR/css-cascade-6/
[CSS-TEXT-DECOR-3]
Elika Etemad;Koji Ishii。CSS 文本装饰模块 3 级。2019年8月13日。CR。URL:https://www.w3.org/TR/css-text-decor-3/
[CSS3-ANIMATIONS]
Dean Jackson 等。CSS 动画 1 级。2018年10月11日。WD。URL:https://www.w3.org/TR/css-animations-1/

属性索引

名称 初始值 适用对象 继承 % 百分比 动画类型 规范顺序 计算值
text-decoration <'text-decoration-line'> || <'text-decoration-thickness'> || <'text-decoration-style'> || <'text-decoration-color'> 见各单独属性 见各单独属性 见各单独属性 见各单独属性 见各单独属性 按语法 见各单独属性
text-decoration-color <color> currentcolor 所有元素 n/a 按计算值类型 按语法 计算颜色
text-decoration-line none | [ underline || overline || line-through || blink ] | spelling-error | grammar-error none 所有元素 否(但见上文说明) n/a 离散 按语法 指定关键词
text-decoration-skip none | auto 见各单独属性 所有元素 N/A 离散 按语法 见各单独属性
text-decoration-skip-box none | all none 所有元素 N/A 离散 按语法 指定关键词
text-decoration-skip-ink auto | none | all auto 所有元素 N/A 离散 按语法 指定关键词
text-decoration-skip-inset none | auto none 所有元素 N/A 离散 按语法 指定关键词
text-decoration-skip-self none | objects objects 所有元素 N/A 离散 按语法 指定关键词
text-decoration-skip-spaces none | all | [ start || end ] start end 所有元素 N/A 离散 按语法 指定关键词
text-decoration-style solid | double | dotted | dashed | wavy solid 所有元素 n/a 离散 按语法 指定关键词
text-decoration-thickness auto | from-font | <length> | <percentage> auto 所有元素 N/A 按计算值 按语法 指定关键词或绝对长度
text-emphasis <'text-emphasis-style'> || <'text-emphasis-color'> 见各单独属性 见各单独属性 见各单独属性 见各单独属性 见各单独属性 按语法 见各单独属性
text-emphasis-color <color> currentcolor 文本 n/a 按计算值类型 按语法 计算颜色
text-emphasis-position [ over | under ] && [ right | left ]? over right 文本 n/a 离散 按语法 指定关键词
text-emphasis-skip spaces || punctuation || symbols || narrow spaces punctuation 文本 N/A 离散 按语法 指定关键词
text-emphasis-style none | [ [ filled | open ] || [ dot | circle | double-circle | triangle | sesame ] ] | <string> none 文本 n/a 离散 按语法 关键词 none,一对代表形状和填充的关键词,或字符串
text-shadow none | <shadow># none 文本 n/a 作为 shadow 列表 按语法 关键词 none 或 列表,每项由四个绝对长度 加上计算颜色 还可选一个 inset 关键词组成
text-underline-offset auto | <length> | <percentage> auto 所有元素 N/A 按计算值 按语法 指定关键词或绝对长度
text-underline-position auto | [ from-font | under ] || [ left | right ] auto 所有元素 n/a 离散 按语法 指定关键词

问题索引

本节内容来自 Text Decoration Level 3 的早期草案。 仍在审查中,需要与 text-underline-offsettext-decoration-thickness 集成。
为简化起见,删除线应在各元素的首选/平均位置上方绘制。 这可能会导致一些不理想的跳动效果, 但似乎没有任何办法能在所有情况下都正确地避免这种情况, 并且所有尝试都令人担忧地复杂。 对于没有 considered text 但字体大小不同的元素,删除线应采用什么位置?
CSSWG 决定将跳过功能拆分为类似 text-decoration-skip-ink 的各个属性, 以改善其层叠行为。 参见 讨论决议。 本节为草稿,尚未被 CSSWG 审核。
这个 none 定义与 Web 兼容吗? 我们还需要为 Web 兼容添加 ink 值吗?
CSSWG 决定将 text-decoration-skip 拆分为子属性, 但该值集尚未被 CSSWG 审核。
CSSWG 决定将 text-decoration-skip 拆分为子属性, 但该值集尚未被 CSSWG 审核。
CSSWG 决定将 text-decoration-skip 拆分为子属性, 但该值集尚未被 CSSWG 审核。
这或许应该是一个独立属性,而不是 text-decoration-skip 集的一部分。 另见 Issue 4557, 关于显式控制线长。
初始值是否应为 none 以兼容 Web? 如果不是,至少 INS 和 DEL 应在 UA 默认样式表中被指定为 none。 另见 Issue 4653
表意文字脚本在 auto 时不希望跳过。 我们如何定义这种行为? 是否有更多脚本也不希望跳过? 需要一些规范性文本来描述 auto 的工作方式。 参见 电话会议纪要alreq#86csswg#1288
还有其他(非 CJK)脚本默认情况下(auto 生效时)希望禁用墨水跳过吗? 也许彝文?阿拉伯文? (另见 Issue 1288 中的讨论。)
另见 关于大小/位置连续性的讨论
本节仍在头脑风暴阶段。 目前还不清楚这个属性是否确实需要,尽管不同出版物之间有期望行为的差异。
该语法要求 UA 实现空格的标记绘制。 是否有实际用例需要这样做? 如果没有,是否应修改语法以不允许为空格绘制标记?
另见 关于初始值的讨论
保留拐角形状未定义?[Issue #7250]
与描边的堆叠关系?[Issue #7251]
如发现任何问题、建议或纠正, 请发送邮件至 www-style@w3.org 并在主题中包含 [css-text-decor]