CSS 文本装饰模块第 3 级

W3C 候选推荐草案,

关于此文档的更多细节
此版本:
https://www.w3.org/TR/2022/CRD-css-text-decor-3-20220505/
最新发布版本:
https://www.w3.org/TR/css-text-decor-3/
编辑草案:
https://drafts.csswg.org/css-text-decor-3/
以前的版本:
历史:
https://www.w3.org/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/
反馈:
CSSWG 问题仓库
文档中的问题
编辑:
Elika J. Etemad / fantasai (受邀专家)
(谷歌)
建议对此规范进行编辑:
GitHub 编辑器

摘要

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

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

本文件状态

本节描述了此文档在发布时的状态。 当前 W3C 发布的列表和此技术报告的最新修订可以在 W3C 技术报告索引中找到,网址为 https://www.w3.org/TR/。

本文档由 CSS 工作组 发布为 候选推荐草案,使用 推荐 路线。 作为候选推荐草案发布并不意味着 W3C 和其成员对此的认可。 候选推荐草案集成了工作组打算在后续候选推荐快照中包含的来自之前候选推荐的变更。

这是一个草案文件,可能随时更新、替换或被其他文件取代。 引用此文档不应将其视为非进展工作。

请通过 在 GitHub 中提交问题(首选), 在标题中包含规范代码“css-text-decor”,例如: “[css-text-decor] …评论摘要…”。 所有问题和评论都会被 归档。 另外,反馈也可以发送到(已归档)的公共邮件列表 www-style@w3.org

本文件受 2021年11月2日 W3C 过程文件 管辖。

本文件由遵循 W3C 专利政策 的小组制作。 W3C 保持了 与小组交付物相关的任何专利披露的公开列表; 该页面还包括披露专利的说明。 个人如果实际知道某项专利,且该专利包含 基本权利要求,必须根据 W3C 专利政策第 6 节 披露信息。

以下功能处于风险中,并可能在 CR 期间被删除:

“处于风险中”是 W3C 过程中的术语,并不一定意味着该功能有被删除或延迟的危险。它意味着工作组认为该功能可能难以及时实现互操作性,因此将其标记为风险,可以在向建议推荐阶段过渡时,如有必要,工作组可以删除该功能,而无需首先发布没有该功能的新候选推荐。

1. 引言

本小节为非规范性内容。

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

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

1.1. 模块交互

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

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 要求始终跳过边距、边框和内边距。在此级别中,默认情况下仅跳过 装饰框 的边距、边框和内边距。 在未来,CSS2.1 可能会更新以匹配这一新默认设置。此外, 对于装饰前后空格的控制预计将在第 4 级中实现, 并将默认应用于 HTML insdel 元素。

用户代理 可以 在字形边界处中断下划线和上划线,其中线会穿过字形墨水,并在字形轮廓的两侧保持一定距离; 这种行为在本级别中不可控,但将在第 4 级中进一步定义。 然而,删除线必须保持连续。

缅甸文本下的字母下划线绕过了下行和降音符的垂直笔画。

跳过字形墨水

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

请注意,本规范故意不规定“遵循字形”形状的特定方法,以便用户代理可以采取适当的措施来处理美学和性能考虑。 例如,用户代理可以出于性能原因,假设在某个大小阈值以下的线条末端为方形; 或使用梯形末端近似曲线,尤其是在较细的线条装饰上。 在美学考虑方面,用户代理可能还会考虑当字形边界仅与线条厚度的一部分相交或与接近水平的线条倾斜时会发生什么——精确跟随曲线 可能导致排版上不协调的下划线残留物。 是否在字形的封闭区域内显示线条是另一个考虑因素。
例如,单词“goal”在“g”的底部循环中有一个下划线。
                        根据下划线的位置和厚度,我们可能会看到下划线的全部厚度,或者只有部分厚度出现在“g”内。
                        此示例显示了在两个位置屏蔽的下划线。
                        在左侧对,下划线穿过“g”圆肚的中心:下划线的完整厚度透过中心,填充它。
                        在右侧对,下划线稍微低一些,因此在“g”内只能显示部分厚度。

隐藏字母内部的下划线部分使字体看起来更干净,同时外部的下划线曲线末端通过拥抱字母的外轮廓来暗示下划线的连续性。

相对定位后代将与后代文本一起移动应用于它的所有文本装饰;这不会影响该行上装饰初始位置的计算。 可见性属性、文本阴影、 过滤器和其他图形变换也会影响应用于该框的所有文本装饰——包括从祖先框传播的装饰——并且不会影响其初始位置或厚度的计算。 (在绘制于原子行内或跨越未替换行内框的边距/边框/内边距的线条装饰的情况下, 它们类似地与受影响的原子行内/未替换行内框相关联,而不是与 装饰框 相关联。)

在以下样式表和文档片段中:
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> 也有下划线,因为它处于传播下划线的流动块中。最后一行文本是紫红色的,但它下面的下划线仍然是来自匿名行内元素的蓝色下划线。上述下划线示例的样本渲染 该图显示了参与上述示例的框。

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

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

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

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

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
适用对象: 所有元素
继承:
百分比: 不适用
计算值: 指定的关键字
规范顺序: 根据语法
动画类型: 离散

该属性指定应用于元素的文本装饰线条(如下划线、上划线和删除线)的样式。值的含义与border-style 属性相同 [CSS-BACKGROUNDS-3]wavy 表示波浪线。

文本装饰的样式在所有来源于给定元素的装饰上必须保持相同,即使子元素的样式有所不同。

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

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

该属性指定在元素上设置的文本装饰(下划线、上划线和删除线)的颜色。

文本装饰的颜色在所有来源于给定元素的装饰上必须保持相同,即使子元素的颜色有所不同。

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

名称: text-decoration
值: <'text-decoration-line'> || <'text-decoration-style'> || <'text-decoration-color'>
初始值: 见各个属性
适用对象: 见各个属性
继承: 见各个属性
百分比: 见各个属性
计算值: 见各个属性
动画类型: 见各个属性
规范顺序: 根据语法

该属性是设置text-decoration-linetext-decoration-colortext-decoration-style的简写形式。 缺省值将被设置为其初始值。

注意: 一个text-decoration声明如果省略了 text-decoration-colortext-decoration-style的值 在CSS级别1和2中是向后兼容的。

以下示例在CSS1和CSS2用户代理中用实心蓝色 下划线标记未访问的链接,而在CSS3用户代理中用海军蓝色虚线下划线标记:
:link {
  color: blue;
  text-decoration: underline;
  text-decoration: navy dotted underline; /* 在 CSS1/CSS2 用户代理中被忽略 */
}

注意: 该简写故意省略了text-underline-position属性, 这是一个依赖于语言/书写系统的设置,自动跟随内容,因此可以独立于(未继承的)text-decoration简写的样式设置进行级联和继承。

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

名称: text-underline-position
值: auto | [ under || [ left | right ] ]
初始值: auto
适用对象: 所有元素
继承:
百分比: 不适用
计算值: 指定的关键字
动画类型: 离散

该属性设置元素上指定的下划线的位置。 (它不影响由祖先元素指定的下划线。) 如果单独指定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
用户代理可以使用任何算法来确定下划线的位置;但必须放置在字母基线或其下方。

注意: 建议默认下划线位置应接近字母基线, 除非这将穿过下标(或其他下移的)文本 或在汉字或藏文等字形中绘制,因为字母下划线过高: 在这种情况下,将下划线向下移动 或根据under中描述的内容对齐到em框的边缘可能更合适。

在典型的拉丁字体中,下划线位于字母基线的稍下方,使下划线与大多数拉丁字母的底部之间留有间隙,但穿过像字母'p'的降部。

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

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。)

下划线的确切位置和厚度在此级别中由用户代理定义。 但是,对于下划线和上划线 用户代理必须在每行上使用统一的厚度和位置 来装饰来自单个decorating box的装饰。

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

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

注意,由于下划线装饰可以跨越具有不同字体大小和垂直对齐的元素, 因此线装饰的最佳位置不一定是由decorating box规定的理想位置。 例如,位于小字体下方的上划线 如果元素包含更大字体大小的文本,则实际上将变为横穿。 即使是下划线,如果文本未对齐到字母基线 (例如,在垂直排版样式中, 文本默认按其中央基线对齐[CSS-WRITING-MODES-4]) 下划线将穿过更大字体的后代文本。 用户代理对后代内容的考虑将因此导致更好的排版。

由于垂直文本的中央基线对齐,小垂直文本的左侧下划线将穿过较大字体大小的子文本底部。 下划线不允许断裂,但将其位置进一步向左调整 可以妥善容纳所有下划线文本。

用户代理必须调整线位置 以匹配decorating boxes在使用其他vertical-align值时所发生的位移,而不是必须根据带有此样式的decorating box的后代调整线位置或厚度。 这使得上标和下标能够正确装饰(下划线、划掉等) 但防止它们扭曲或破坏此类装饰在其祖先上的定位。

仅为上标的'st'下划线在上标下方绘制,而整个文本的下划线则在适当的全尺寸文本位置下绘制。

上标文本应用的下划线示例与应用于包含上标的文本的下划线示例

一些字体格式(例如OpenType)可以提供有关线装饰适当位置的信息。 用户代理应在适当情况下使用此类信息 (例如下划线厚度, 或适当的字母下划线位置) 从字体中获取。

注意: 通常,OpenType字体指标给出字母下划线的位置; 在某些情况下(尤其是在CJK字体中), 它给出左下划线的位置。 (在这种情况下,字体的下划线指标通常 接触到em框的底边)。 用户代理可以但不需要纠正不正确的字体指标。

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 ] ]
初始值: 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>中指定多个字符。用户代理可以截断或忽略由多个字形簇组成的字符串。

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

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

注意: 一个适合强调标记的好字体示例是Adobe的开源Kenten Generic OpenType Font,该字体专为强调标记而设计。

标记会在每个排版字符单元上绘制一次。 但是,强调标记会绘制在:

注意: 将在第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
在垂直排版模式中,绘制标记在文本的左侧。

强调标记的绘制方式就像每个字符被分配作为其注音文本的标记一样,注音位置由text-emphasis-position指定,注音对齐为居中。请注意,如果强调标记与下划线或上划线装饰发生冲突,则该位置可能会进行调整。

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

注意,强调标记的首选位置取决于语言。例如,在日语中,首选位置为over right。而在中文中,首选位置为under right。以下信息表总结了中文和日语的首选强调标记位置:
首选强调标记和注音位置
语言 首选位置 插图
水平 垂直
日语 over right 强调标记出现在水平日文文本中的每个强调字符上方。 强调标记出现在垂直日文文本中每个强调字符的右侧。
韩语
蒙古语
中文 under right 强调标记出现在水平简体中文文本中每个强调字符的下方。

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

在这个例子中,强调标记应用于4个字符,其中两个字符有注音。点标记在每个字符上方(与注音对齐)为裸字符,而在注音字符的上方为标记。

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

一些编辑器在强调标记与注音发生冲突时更喜欢隐藏强调标记。在HTML中,可以使用以下样式规则做到这一点:
ruby { text-emphasis: none; }

一些其他编辑器更喜欢在强调标记与注音发生冲突时隐藏注音。在HTML中,可以使用以下模式做到这一点:

em { text-emphasis: dot; } /* 设置<em>元素的文本强调 */
em rt { display: none; }   /* 隐藏<em>元素中的注音 */

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

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

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

阴影效果按前后顺序应用:第一个阴影在最上层。阴影可能会相互覆盖,但从不覆盖文本本身。阴影必须在元素的边框和/或背景(如果存在)与元素的文本和文本装饰之间的堆叠级别绘制。用户代理(UAs)应避免在相同堆叠级别和堆叠上下文的相邻元素的文本上绘制文本阴影。(这可能意味着阴影的确切堆叠级别取决于元素是否具有边框或背景:因此,文本阴影的确切堆叠行为由用户代理定义。)是否阴影层对每个字形或装饰独立绘制,或者文本和/或装饰是扁平化后再进行阴影处理是未定义的。

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开发者实现默认样式表,但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:变更

2019年8月候选建议书以来的更改

更改包括:

2018年7月候选建议书以来的更改

更改包括:

可用意见处理

2013年8月候选建议书以来的更改

重要更改包括:

符合性

文档约定

符合性要求通过描述性断言和RFC 2119术语的组合来表达。 规范部分中的关键词“MUST”、“MUST NOT”、“REQUIRED”、“SHALL”、“SHALL NOT”、“SHOULD”、“SHOULD NOT”、“RECOMMENDED”、“MAY”和“OPTIONAL”应按照RFC 2119中的说明进行解释。 然而,为了可读性,本文档中的这些词并不总是以大写字母出现。

本规范的所有文本都是规范性的,除非显式标记为非规范性、示例和注释。 [RFC2119]

本规范中的示例以“例如”开头,或通过class="example"与规范文本分开,如下所示:

这是一个信息性示例。

信息性注释以“注释”开头,并通过class="note"与规范文本分开,如下所示:

注释,这是一个信息性注释。

建议是规范性部分,样式上引起特别注意,并通过<strong class="advisement">与其他规范文本分开,如下所示:用户代理(UA)必须提供可访问的替代方案。

符合性类别

本规范的符合性定义为三类符合性:

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

如果其所有使用本模块中定义的语法的语句都根据通用CSS语法和本模块中定义的每个功能的各自语法是有效的,则样式表符合本规范。

如果渲染器除了按照适当的规范解释样式表外,还支持本规范定义的所有功能,并且能够正确解析它们并相应地呈现文档,则渲染器符合本规范。 但是,由于设备限制而导致UA无法正确呈现文档并不意味着UA不符合规范。 (例如,UA不需要在单色显示器上呈现颜色。)

如果创作工具编写的样式表在语法上根据通用CSS语法和本模块中每个功能的各自语法是正确的,并且满足本模块中描述的样式表的所有其他符合性要求,则创作工具符合本规范。

部分实现

为了使作者能够利用向前兼容的解析规则来分配回退值,CSS渲染器必须将任何没有可用支持级别的at-rules、属性、属性值、关键字和其他语法结构视为无效(并且按需忽略)。 特别是,用户代理不得选择性地忽略不受支持的组件值并在单个多值属性声明中尊重受支持的值:如果考虑到任何值是无效的(因为不支持的值必须是),CSS要求整个声明被忽略。

不稳定和专有特性的实现

为了避免与未来稳定的CSS特性发生冲突,CSS工作组建议遵循最佳实践以实现不稳定的功能和专有扩展到CSS。

非实验性实现

一旦规范进入候选推荐阶段,就可以进行非实验性实现,实施者应发布任何他们能够证明根据规范正确实现的CR级功能的未加前缀的实现。

为了建立和维护CSS在实现之间的互操作性,CSS工作组请求非实验性CSS渲染器在发布任何CSS功能的未加前缀的实现之前,向W3C提交一份实现报告(如有必要,还需提交用于该实现报告的测试用例)。 提交给W3C的测试用例需经过CSS工作组的审查和更正。

有关提交测试用例和实现报告的更多信息,可以在CSS工作组的网站上找到,网址为https://www.w3.org/Style/CSS/Test/。 问题应直接发送到public-css-testsuite@w3.org邮件列表。

CR退出标准

为了将本规范推进至提议推荐,必须对每个功能有至少两个独立的、可互操作的实现。 每个功能可以由不同的产品集实现,没有要求所有功能都由单一产品实现。 出于此标准的目的,我们定义以下术语:

独立
每个实现必须由不同的方开发,不能与另一符合条件的实现共享、重用或衍生代码。 与本规范的实现无关的代码部分不受此要求的限制。
互操作
通过官方CSS测试套件中相应的测试用例,或者如果实现不是Web浏览器,则通过等效测试。 测试套件中的每个相关测试应创建一个等效测试,如果这样的用户代理(UA)被用于声称互操作性。 此外,如果这样的UA被用于声称互操作性,则必须还有一个或多个其他UA可以以相同方式通过这些等效测试,以确保互操作性。 这些等效测试必须为同行评审的目的而公开。
实现
一个用户代理,其:
  1. 实现了该规范。
  2. 向公众开放。 该实现可以是运输产品或其他公开可用版本(即,测试版、预览版本或“夜间构建”)。 非运输产品发布必须在实现功能至少一个月的时间内实施功能,以证明稳定性。
  3. 不是实验性的(即,专门设计用于通过测试套件的版本,并且不打算继续正常使用)。

该规范将在候选推荐阶段至少保留六个月。

索引

本规范定义的术语

通过引用定义的术语

参考文献

规范性参考文献

[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-3]
Rossen Atanassov; Elika Etemad. CSS 片段化模块第 3 级. 2018 年 12 月 4 日. CR. URL: https://www.w3.org/TR/css-break-3/
[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-RUBY-1]
Elika Etemad; 等. CSS 朱比注释布局模块第 1 级. 2021 年 12 月 2 日. WD. URL: https://www.w3.org/TR/css-ruby-1/
[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-TEXT-DECOR-4]
Elika Etemad; Koji Ishii. CSS 文本装饰模块第 4 级. 2020 年 5 月 6 日. WD. URL: https://www.w3.org/TR/css-text-decor-4/
[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 (CSS 2.1) 规范. 2011 年 6 月 7 日. REC. URL: https://www.w3.org/TR/CSS21/
[RFC2119]
S. Bradner. RFC 中使用的关键字以指示要求级别. 1997 年 3 月. 最佳当前实践. URL: https://datatracker.ietf.org/doc/html/rfc2119
[UAX15]
Ken Whistler. Unicode 规范化形式. 2021 年 8 月 27 日. Unicode 标准附件 #15. URL: https://www.unicode.org/reports/tr15/tr15-51.html

信息性参考文献

[CSS-ANIMATIONS-1]
Dean Jackson; 等. CSS 动画第 1 级. 2018 年 10 月 11 日. WD. URL: https://www.w3.org/TR/css-animations-1/
[CSS-COLOR-3]
Tantek Çelik; Chris Lilley; David Baron. CSS 颜色模块第 3 级. 2022 年 1 月 18 日. REC. URL: https://www.w3.org/TR/css-color-3/
[HTML]
Anne van Kesteren; 等. HTML 标准. 现行标准. URL: https://html.spec.whatwg.org/multipage/

属性索引

名称 初始值 适用对象 继承 百分比 动画类型 规范顺序 计算值
text-decoration <'text-decoration-line'> || <'text-decoration-style'> || <'text-decoration-color'> 见各个属性 见各个属性 见各个属性 见各个属性 见各个属性 按语法 见各个属性
text-decoration-color <color> currentcolor 所有元素 n/a 按计算值类型 按语法 计算颜色
text-decoration-line none | [ underline || overline || line-through || blink ] none 所有元素 否(但见上文) n/a 离散 按语法 指定的关键字
text-decoration-style solid | double | dotted | dashed | wavy solid 所有元素 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-style none | [ [ filled | open ] || [ dot | circle | double-circle | triangle | sesame ] ] | <string> none 文本 n/a 离散 按语法 关键字 none、代表形状和填充的一对关键字或字符串
text-shadow none | [ <color>? && <length>{2,3} ]# none 文本 n/a 作为阴影列表 按语法 关键字 none 或 一个列表,每个项目由三个绝对长度加上计算颜色组成
text-underline-position auto | [ under || [ left | right ] ] auto 所有元素 n/a 离散 按语法 指定的关键字

问题索引

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