CSS 伪元素模块 第 4 级

W3C 工作草案,

关于本文档的更多细节
该版本:
https://www.w3.org/TR/2025/WD-css-pseudo-4-20250627/
最新发布版本:
https://www.w3.org/TR/css-pseudo-4/
编辑草案:
https://drafts.csswg.org/css-pseudo-4/
以前的版本:
历史记录:
https://www.w3.org/standards/history/css-pseudo-4/
测试套件:
http://test.csswg.org/suites/css-pseudo-4_dev/nightly-unstable/
https://wpt.fyi/results/css/css-pseudo/
反馈:
CSSWG 问题存储库
文档内联
编辑者:
Elika J. Etemad / fantasaiApple
Adobe Systems Inc.
前任编辑者:
Daniel GlazmanDisruptive Innovations
建议为本规范编辑内容:
GitHub 编辑页面
问题列表:
在编辑者草案中跟踪
测试套件:
https://wpt.fyi/results/css/css-pseudo/

摘要

本 CSS 模块定义了伪元素,即表示 CSS 渲染树部分的抽象元素,可以被选择和样式化。

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

本文档状态

本节描述了本文件在发布时的状态。当前 W3C 发布的所有文档列表以及本技术报告的最新修订版,请参见 W3C 标准与草案索引 https://www.w3.org/TR/。

本文件由 CSS 工作组 作为工作草案在推荐路线发布。作为工作草案发布,并不意味着 W3C 及其成员的认可。

本文件为草稿文档,可能随时被更新、替换或废止。除作为正在进行的工作外,不应引用本文件。

请通过在 GitHub 提交 issue(推荐)反馈意见,并在标题中包含规范代码“css-pseudo”,格式如下:“[css-pseudo] …评论摘要…”。所有 issues 和评论均已存档。您也可以通过(已存档)公共邮件列表 www-style@w3.org 反馈。

本文件受 2023年11月3日 W3C 流程文件 管辖。

本文件由遵循 W3C 专利政策 的工作组制作。W3C 维护了一个与本组交付物相关的专利披露公开列表;该页面还包含披露专利的说明。任何实际知晓自己认为包含必要权利要求专利的个人,必须根据 W3C 专利政策第6节 披露相关信息。

以下功能属于风险项,在 CR(候选推荐)阶段可能会被移除:

“风险项”是 W3C 流程中的术语,并不一定意味着该功能有被移除或延迟的危险。这表示工作组认为该功能在实现互操作性方面可能遇到困难,因此将其标记为风险项。如果在转为建议推荐阶段时有必要,工作组可以直接移除该功能,而无需先发布不包含该功能的新候选推荐文档。

1. 介绍

本节为参考性内容。

伪元素代表文档中由文档语言未显式创建的抽象元素。由于它们不受限于文档树结构,可以用于选择和样式化那些不一定对应于文档树结构的文档部分。例如,::first-line 伪元素可以选中某元素在文本换行后首个格式化行中的内容,从而使该行可以与段落的其余部分采用不同样式。

每个伪元素都关联一个起始元素,其语法形式为 ::伪元素名。本模块定义了 CSS 中存在的伪元素及其样式化方式。关于伪元素的一般信息以及其语法和与其它选择器的交互,请参见 [SELECTORS-4]

注:提醒,除非明确允许,否则伪元素不可以链式组合。例如,::marker::before 是不允许的,但 ::before::marker 是允许的。

2. 排版伪元素

2.1. 第一行文本: ::first-line伪元素

::first-line 伪元素 代表其首个格式化行的内容,并属于其 起始元素

测试
下述规则表示:“将每个 p 元素首行的字母全部大写”:
p::first-line { text-transform: uppercase }

选择器 p::first-line 不会匹配任何真实的文档元素。它实际匹配的是浏览器在每个 p 元素开头自动插入的一个伪元素。

注:首行的长度会受到许多因素影响,比如页面宽度、字体大小等。

例如,给定如下普通的 HTML [HTML5] 段落:
<P>This is a somewhat long HTML paragraph
that will be broken into several lines.
The first line will be styled
by the ‘::first-line’ pseudo-element.
The other lines will be treated
as ordinary lines in the paragraph.</P>

根据元素的宽度,其行可能被如下断开:

THIS IS A SOMEWHAT LONG HTML PARAGRAPH THAT
will be broken into several lines. The first
line will be styled by the ‘::first-line’
pseudo-element. The other lines will be 
treated as ordinary lines in the paragraph.

或者也可能如下断开:

THIS IS A SOMEWHAT LONG
HTML paragraph that will
be broken into several
lines. The first line will
be styled by the
‘::first-line’ pseudo-
element. The other lines
will be treated as ordinary
lines in the paragraph.

2.1.1. 找到第一条格式化的线

在 CSS 中,::first-line 伪元素只有附加在块容器上时才会生效:

注: 首个格式化行可以是空行。 例如,p 元素 <p><br>First… 的首行并不包含字母。因此,“First” 不在首个格式化行上,也不会被 p::first-line 影响。

注: 不参与块格式化上下文块容器 的首行不能作为其祖先元素的首个格式化行。 因此,在 <DIV><P STYLE="display: inline-block">Hello<BR>Goodbye</P> etcetera</DIV> 中,DIV 的首个格式化行不是“Hello”这一行,而是包含整个内联块的行。

当一个首个格式化行被多个 ::first-line 伪元素表示时,它们按照其 起始元素 的顺序嵌套。 该行的内联级内容——包括其 根内联盒片段——被嵌套在最内层的 ::first-line 伪元素内。

请看如下标记:
<DIV>
  <P>First paragraph</P>
  <P>Second paragraph</P>
</DIV>

如果我们用虚构标签序列来表示这些元素的 ::first-line 伪元素,会是如下形式:

<DIV>
  <P><DIV::first-line><P::first-line>First paragraph</P::first-line></DIV::first-line></P>
  <P><P::first-line>Second paragraph</P::first-line></P>
</DIV>

2.1.2. 样式化 ::first-line 伪元素

::first-line 伪元素生成的盒模型行为类似于 内联级盒, 但有一些限制。下列 CSS 属性适用于 ::first-line 伪元素:

用户代理也可以应用其它属性,但以下属性除外:

注:::first-line 上设置 line-height 会继承到包裹首行内容的 根内联盒片段,因此可以增大或减小首行盒子的高度。

2.1.3. 继承和 ::first-line 伪元素

在 CSS 继承过程中, 子元素中出现在首行上的片段 会从::first-line伪元素 继承所有标准的可继承属性 (不包括前面排除的那些属性)。 对于所有其他属性,包括所有自定义属性 [CSS-VARIABLES-1], 则继承自非伪元素的父元素。 (子元素中未出现在首行的部分始终从非伪父元素继承。)

在常见的情况(标准的继承 CSS 属性)下,可以通过写出 虚构标签序列 来理解 ::first-line 伪元素的继承。例如前面的示例,在第一次渲染时,虚构的标签序列可能是:
<P><p::first-line>This is a somewhat long HTML paragraph
that</p::first-line> will be broken into several lines.
The first line will be styled
by the ‘::first-line’ pseudo-element.
The other lines will be treated
as ordinary lines in the paragraph.</p>

而在第二次渲染中:

<p><p::first-line>This is a somewhat long</p::first-line> HTML paragraph
that will be broken into several lines.
The first line will be styled
by the ‘::first-line’ pseudo-element.
The other lines will be treated
as ordinary lines in the paragraph.</p>
如果伪元素打破了一个实际元素的结构,通常可以通过虚构的标签序列来描述这种效果,该序列会关闭并重新打开该元素。例如我们在之前的示例中标记了一个包含第一句话的 span 元素:
<p><span>This is a somewhat long HTML paragraph
that will be broken into several lines.</span>
The first line will be styled
by the ‘::first-line’ pseudo-element.
The other lines will be treated
as ordinary lines in the paragraph.</p>

第一次渲染的效果类似于以下虚构的标签序列:

<p><p::first-line><span>This is a somewhat long HTML paragraph
that</span></p::first-line><span> will be broken into several lines.</span>
The first line will be styled
by the ‘::first-line’ pseudo-element.
The other lines will be treated
as ordinary lines in the paragraph.</p>

2.2. 首字文本:::first-letter 伪元素及其 ::prefix::suffix 子元素

测试
首字下沉,包括其前的引号。

::first-letter 伪元素 表示其源元素首字母)的首个格式化行上的第一个字母、数字或符号 (Unicode 类别 L*N*S*排版字符单元, 以及与其关联的标点符号。 这些文本统称为首字母文本::first-letter伪元素可用于实现“首字放大”或“首字下沉”效果, 这些都是常见的排版效果。

例如,以下规则使用initial-letter 属性(参见 [CSS-INLINE-3])为每个二级标题后的段落创建一个两行高的下沉首字母:
h2 + p::first-letter { initial-letter: 3; }

注: 首字 实际上可以是数字,比如“67 million dollars is a lot of money.” 中的 “6”。

为了能够分别设置 首字 本身及其相邻标点的样式,相关的前置标点通过 ::prefix 子伪元素 表示(即 ::first-letter::prefix);相关的后置标点通过 ::suffix 子伪元素 表示(即 ::first-letter::suffix)。参见下文§ 2.2.1 首字母与相关标点

2.2.1. 首字母与相关标点

CSS Text 3 § 1.4 字符与字母所述, 印刷字符单元 可以包含多个 Unicode 码点。例如,组合字符必须与其基字符保持在一起。某些语言对特定字母组合还有额外规则。例如在荷兰语中,如果元素开头是 "ij",则这两个字母都应算作 ::first-letter 伪元素的一部分。[UAX29] 选择首字时,用户代理应根据 ::first-letter 伪元素的 包含块内容语言,对 印刷字符单元 的定义做出调整以契合首字传统。

前后标点也必须作为首字文本的一部分包含在 ::first-letter 伪元素中,具体如下:

非正式地说,这里的首字文本模式可近似(忽略 Zs 的排除项)用“正则表达式”表示: (P (Zs|P)*)? (L|N|S) ((Zs|P−(Ps|Pd))* (P−(Ps|Pd))? ([P] [Zs P]*)? [L N S] ([Zs [P--[Ps Pd]]]* [P--[Ps Pd]])?,其中 Unicode 类别缩写代表属于该类别的所有印刷字符单元
P P Zs L N S P − (Ps ∪ Pd) P − (Ps ∪ Pd) Zs

有关印刷字符单元及其 Unicode 属性的更多信息,请参见 CSS Text 3 § 1.4 字符与字母CSS Text 3 § E 字符与属性[CSS-TEXT-3]

2.2.2. 查找首字母文本

::first-line 一样, ::first-letter 伪元素 只有附加在 块容器 上时才会生效。 它的 首字文本 是其 起始元素首个格式化行首个参与内联格式化上下文的内容, 前提是其前没有其他流内内容(如图片或内联表格)。

在此过程中,任何 marker 盒 都会被忽略,视为脱离文档流。 但如果元素有流内 ::before::after 内容, 则 首字文本 会从包含这些生成内容的元素内容中选取。

例:在应用规则 p::before {content: "Note: "} 后, 选择器 p::first-letter 会匹配 “Note” 中的 "N"。

如果不存在符合条件的文本,则没有 首字文本,也不会生成 ::first-letter 伪元素。

注:首个格式化行 为空时, ::first-letter 不会匹配任何内容。例如,在如下 HTML 片段中: <p><br>First... 首行没有任何字母,因此 ::first-letter 不会匹配任何内容,尤其不会匹配 “First” 的 “F”,因为它在第二行。

注:::first-line 类似, 不参与 块格式化上下文块容器首字文本 不能作为祖先元素的 首字文本。 因此,在 <DIV><P STYLE="display: inline-block">Hello<BR>Goodbye</P> etcetera</DIV> 结构中,DIV首字 不是 “H”,实际上该 DIV 没有 首字

首字文本中换行到下一行的部分不再属于 ::first-letter 伪元素 的一部分。

2.2.3. 首字母伪元素的继承和框架树结构

::first-letter 伪元素立即包裹其代表的首字母文本,即使该文本位于子元素中。当 首字母文本 由多个 ::first-letter 伪元素表示时,它们的嵌套顺序与其源元素的嵌套顺序相同。继承行为与之相符。

考虑以下标记:
<div>
  <p><span>The first few words</span>
  and the rest of the paragraph.
</div>

如果我们假设虚构的标签序列来表示元素的::first-letter伪元素,它可能是这样的:

<div>
  <p><span><div::first-letter><p::first-letter>T</…></…>he first few words</span>
  and the rest of the paragraph.
</div>

如果存在 ::first-letter::prefix::first-letter::suffix 伪元素, 它们会嵌套在最内层的 ::first-letter 内部, 其它方面的解释与 ::first-letter 本身类似。

考虑以下标记:
<div>
  <p><span>“The first few words</span>
  and the rest of the quotation.
</div> 

如果我们假设虚构的标签序列来表示这些元素的::first-letter伪元素,它可能是这样的:

<div>
  <p><span><div::first-letter><p::first-letter><div::first-letter::prefix><p::first-letter::prefix></…></…>T</…></…>he first few words</span>
  and the rest of the paragraph.
</div>

如果组成首字文本的字符并不全部在同一个元素中(如 ‘T<p>‘<em>T... 结构中), 用户代理可以选择只在其中一个元素、所有相关元素上创建 ::first-letter 伪元素(以及 ::prefix::suffix 子元素,如有), 也可以选择不创建伪元素。 此外,如果 首字文本 不在行首(例如由于双向重排,或由于 列表项 标记 设置为 list-style-position: inside), 用户代理同样可以选择不创建伪元素。

::first-letter 伪元素被包含于任意 ::first-line 伪元素内, 因此会(可能是间接地)从 ::first-line 继承属性, 就像同一行上的任何 内联盒 一样。

2.2.4. 首字母伪元素的样式

在 CSS 中,::first-letter 伪元素 (以及其 ::prefix::suffix 子元素) 类似于 内联盒。 以下属性适用于 ::first-letter::first-letter::prefix::first-letter::suffix 伪元素:

用户代理也可以应用其他属性。 但无论如何,应用这些未列出的属性都不得改变该 ::first-letter 所代表的 首字文本

注: 在以往 CSS 级别中,用户代理被允许基于字母形状选择行高、宽度和高度以近似字体大小;并在布局时考虑字形轮廓。这种宽泛定义的“魔法”实现已被有意移除,因为它未能很好地服务于首字下沉与抬头字的实际需求,反而带来了兼容性问题。参见 initial-letter[CSS-INLINE-3]),用于明确实现首字下沉和抬头字。

3. 高亮伪元素

3.1. 选择高亮内容:::selection::search-text::target-text::spelling-error::grammar-error::highlight() 伪元素

测试

高亮伪元素 表示文档中被赋予特定状态的部分,这些部分通常会使用不同的样式来向用户指示其状态。例如,文档中被选中的部分通常会高亮显示(如更换前景色和背景色,或使用色彩覆盖),以表明其已被选中。以下定义了这些高亮伪元素

::selection
::selection 伪元素代表文档中作为某些未来用户代理操作(如复制或粘贴)的目标或对象而被选中的部分。 它适用于例如可编辑文本字段中已选中的文本,这些文本可能被复制或被粘贴新内容所替换。
测试
::search-text
::search-text 伪元素表示由用户代理的页面内查找功能定位到的文本。 由于并非所有用户代理都会以 高亮伪元素 可表达的方式为匹配到的文本设置样式, 因此该伪元素为可选实现。

:current 伪类 (但不是 ::current())可以与 ::search-text 结合, 以表示当前聚焦的匹配项。 :past:future 伪类 保留用于将来类似的用途。 任何这些伪类与 ::search-text 的不受支持的组合 必须 被视为无效。

::target-text
::target-text 伪元素表示被文档 URL 的 片段直接定位的文本(如果有)。

注:URL 片段定位到某个元素时,可以使用 :target 伪元素来选中该元素, 但 ::target-text 不会匹配任何内容。 它只匹配被 [片段] 直接定位的文本本身。

测试
::spelling-error
::spelling-error 伪元素表示被用户代理标记为拼写错误的文本部分。
测试
::grammar-error
::grammar-error 伪元素表示被用户代理标记为语法错误的文本部分。
测试
::highlight(<custom-ident>)
::highlight() 函数型伪元素,表示与指定自定义高亮名称相关联的文档部分。 其中参数 <custom-ident> 是必需的。 详情见 [CSS-HIGHLIGHT-API-1]

高亮伪元素 并不一定属于元素树结构, 它们可以任意跨越元素边界,而无需遵循元素的嵌套层级。

3.2. 高亮样式

高亮伪元素 只能由有限的、不影响布局且可在高度动态环境下高效应用的属性进行样式设置——并且(为确保互操作性)这些属性在要求的区域内的渲染不依赖于 高亮覆盖层(UA 决定的)确切边界。

以下属性适用于 高亮伪元素

还有其它属性需要包含在此列表吗?

注: 过去(以及本文撰写时),只有 colorbackground-color 能够实现互操作性地支持。

注: color 属性会同时设置文本及其所有行装饰(下划线、上划线、删除线)和强调标记(text-emphasis),这些样式由 起始元素及其祖先和后代应用于文本。

对于上文未列出的属性,但需要用于解析可用属性值时,这些属性的计算值会从起始元素复制,而忽略在高亮伪元素本身上指定的值。例如:

如果对于某个 高亮伪元素, 在作者源中指定了颜色, 则这些颜色必须按指定应用;也就是说,UA 不得对其做额外处理(如半透明色洗)。 但如果在 作者源中没有颜色,UA 可以进行额外的颜色处理。

注: 这样做是为了确保不同用户代理解析作者样式表时都能保持色彩对比度一致。

-webkit-text-fill-color 等带厂商前缀的属性不适用于 高亮伪元素

3.3. 默认 UA 样式

以下内容是默认 UA 样式表的推荐补充:

/* Represent default spelling/grammar error styling in an adjustable way */
:root::spelling-error { text-decoration: spelling-error; }
:root::grammar-error  { text-decoration: grammar-error; }

某些高亮伪元素应当具备配对的默认高亮颜色——由用户代理提供的默认 colorbackground-color,两者要么一起被使用,要么一起被覆盖,详见§ 3.3.1 配对默认值。 对于 ::selection,它们应当分别对应 HighlightTextHighlight; 而对于 ::target-text,应分别对应 MarkTextMark

UA 可能应用额外的效果以增强高亮内容的呈现, 例如,调暗非高亮文本的内容, 或基于用户交互或时间来逐步取消高亮样式。 这些效果不受 CSS 控制。

当前正在讨论中 的 UA 对高亮内容的显示调整 在某些情况下 CSS 控制, 参见 Issue 6853

3.3.1. 配对默认值

出于兼容性原因,配对的默认高亮颜色 仅当 colorbackground-color 都没有从 作者源 获得 级联值(或从作者源继承其值)时才可被使用。 当高亮色为 revertrevert-layer 时,回退级联后确定的 级联值来源即为准。

注: 由于该规则出于兼容性考虑,因此不适用于其它类似属性,如 fill-colorstroke-color

例如,给定如下标记:
<p>Highlight this <em>and this</em>.</p>

作者只要在 <em> 元素上使用如下任何规则,都会抑制 background-color::selection 上的默认值:

em::selection { color: initial; }
em::selection { color: inherit; }
em::selection { color: unset; }
em::selection { color: green; }
p::selection { color: green; }
测试

3.4. 高亮区域

对于每种高亮类型(参见§ 3.1 选择高亮内容:::selection、::search-text、::target-text、::spelling-error、::grammar-error 和 ::highlight() 伪元素),文档中都存在一个唯一的高亮覆盖层,其活动部分由相应的高亮伪元素表示。每个盒子拥有与其直接包含的文本或替换内容关联的覆盖层区域。

参见 F2F 会议纪要dbaron 的邮件Daniel 的讨论Gecko 说明Opera 说明Webkit 说明

不确定这是否是描述实际工作方式的正确方式。

3.5. 层叠与每个元素的高亮样式

每个元素会绘制其自身高亮覆盖层(highlight overlays)的活动部分,这些覆盖层会应用该元素作为高亮伪元素时指定的样式(即该元素为起始元素)。当多个样式冲突时,最终样式由级联规则决定。

当任何受支持属性没有被级联赋值,或被赋值为 inheritunset 时,其指定值将通过继承来自其高亮伪元素的父元素的起始元素。无论该属性是否本身可继承(inherited property),都适用此规则。

此外,对于起始于根元素高亮伪元素color 的继承值为 currentColor,而非初始值

所有自定义属性都从起始元素继承,无论该自定义属性是否注册为可继承属性。

测试
例如,若应用如下规则:
p::selection      { color: yellow; background: green; }
p > em::selection { color: orange; }
em::selection     { color:    red; }

到如下标记:

<p>Highlight this <em>and this</em>.</p>

选区高亮会全程为绿色,<em> 元素外的文本为黄色,元素内的文本为橙色。

测试

作者如果希望实现多重选区样式,应在全局使用 :root::selection,这样可以方便地在后代元素中覆盖。仅使用 ::selection 会匹配树中所有元素,从而覆盖祖先的更具体样式。

例如,作者指定如下样式:
::selection          { background: blue; }
p.warning::selection { background:  red; }

且文档包含

<p class="warning">Some <strong>very important information</strong></p>

则“very important information”上的高亮为蓝色,因为 <strong> 元素的 ::selection 也命中了 ::selection { background: blue; } 规则。(注意:当选择器缺省时,等价于 *。)要实现预期效果(p.warning 内为红色,其它为蓝色),应写为:

:root::selection     { background: blue; }
p.warning::selection { background:  red; }
测试

下例演示了自定义属性的继承:

例如,作者指定如下样式:
:root {
   --background-color: green;
   --decoration-thickness: 10px;
   --decoration-color: purple;
 }
 ::selection {
   --decoration-thickness: 1px;
   --decoration-color: green;
 }
 div::selection {
   --decoration-color: blue;
   background-color: var(--background-color, red);
   text-decoration-line: underline;
   text-decoration-style: line;
   text-decoration-thickness: var(--decoration-thickness, 5px);
   text-decoration-color: var(--decoration-color, red);
 }

通用的 ::selection 仅定义了自定义属性,没有影响外观的属性,因此会采用用户代理默认样式。div 的选区高亮会将所选内容背景设为绿色,下划线为 10px 厚蓝色。由于 --background-color--decoration-thickness 未在 div::selection 伪元素上声明,它们会从起始 div 元素继承,而该元素又从根元素继承这些自定义属性。但 --decoration-color 已在 div::selection 上声明,因此不会用起始元素的值。

注: 这种行为使得用自定义属性控制选区样式时能兼容现有实现。

3.6. 高亮绘制

Tests

3.6.1. 背景

每个高亮伪元素会在对应的高亮覆盖层区域上绘制其背景,绘制时机位于所有定位后代之下(即 CSS2.2§E.2 步骤8之前)。 ::selection 覆盖层绘制在 ::target-text 覆盖层之上,后者又在 ::spelling-error 覆盖层之上,依次是 ::grammar-error 覆盖层和 ::highlight 覆盖层。 ::search-text 覆盖层会根据 UA 实现直接绘制在 :selection 覆盖层之上或之下,并且会绘制在所有其它覆盖层之上。

测试

3.6.2. 阴影

应用于text-shadow高亮伪元素,其阴影会绘制在对应高亮覆盖层的背景之上。这些文本阴影会相互叠加(并叠加于应用于文本及其装饰的原始text-shadow之上,原有阴影依然有效)。

注:由于每个高亮覆盖层的背景会绘制在更底层的阴影之上,因此高亮覆盖层的背景有可能遮挡住更低层的阴影。

3.6.3. 文本和文本装饰

一个高亮伪元素会抑制其关联文本和文本装饰(阴影除外)的正常绘制。取而代之的是,最顶层活动的高亮覆盖层会用该高亮自身的color,在所有高亮覆盖层背景之上重绘文本和这些装饰。

注:这意味着,与阴影不同,行装饰和强调标记不会被为关联文本绘制的任何高亮覆盖层背景遮挡。

为此目的,currentColor高亮伪元素color 属性上,代表下一个活动高亮伪元素层的颜色,最终回退到本应被使用的颜色(即由起始元素或中间伪元素::first-line::first-letter 应用的颜色)。

注:无论原始颜色或填充为何,当该伪元素的color属性不是 currentColor 时,元素自身的文本装饰(包括行装饰强调标记)都会以伪元素的颜色绘制。

每个高亮伪元素引入的文本装饰,会与其背景一样按顺序堆叠在文本原有装饰之上,且每个装饰各自以自己的颜色绘制。正常的绘制顺序适用,因此根据CSS2 附录 E,所有下划线绘制在上划线之下,上划线绘制在文本下方,文本又在删除线下方。不过,通过::selection应用的文本装饰,也可以与文本一起作为最顶层一组层绘制在所有其他装饰之上。

例如,假设原始文本有下划线和删除线,::selection 添加下划线,::target-text 添加上划线和删除线,则以下两种绘制顺序都是符合规范的:
  1. 原始下划线
  2. ::selection 下划线
  3. ::target-text 上划线
  4. ::selection 着色文本
  5. 原始删除线
  6. ::target-text 删除线
  1. 原始下划线
  2. ::target-text 上划线
  3. 原始删除线
  4. ::target-text 删除线
  5. ::selection 下划线
  6. ::selection 着色文本

行装饰引入的高亮伪元素仅应用于其起始元素关联的文本,并不会传播到后代,除非通过继承(如上文所述)。

注:与起始元素自身的装饰不同,在高亮伪元素上声明的装饰会传播到脱离文档流的元素inline block,其厚度和位置可在后代间变化。

测试

3.6.4. 替换元素

对于非替换内容,UA 必须按指定尊重 colorbackground-color(包括它们的 alpha 通道)。 但对于替换内容,UA 应当创建一个半透明遮罩覆盖内容,使内容能够透过选区显示。该遮罩应采用指定的 background-color(若其不是 transparent),否则采用指定的 color;不过 UA 可以调整 alpha 通道。

测试

3.7. 高亮的安全性注意事项

由于拼写和语法错误的样式可能会泄露用户词典的内容信息(这可能包括用户的姓名,甚至包括他们的地址簿!), 实现::spelling-error::grammar-error的UA必须 防止网页读取这些高亮段落的样式。

4. 树形伪元素

树内型伪元素(Tree-abiding pseudo-elements)始终属于盒子树的一部分。它们会从其起始元素继承任何可继承属性;非继承属性则按常规使用其初始值[CSS-CASCADE-4] 其中的一部分称为完全可样式化伪元素(fully styleable pseudo-elements);对真实元素适用的所有属性,对完全可样式化伪元素同样适用。

测试

4.1. 生成内容伪元素:::before::after

当它们的content属性的计算值不是none时,这些伪元素会像它们的起始元素的直接子元素一样生成盒子,并显示由content属性指定的内容。

::before
表示一个可样式化的子级伪元素,位于起始元素实际内容之前。
::after
表示一个可样式化的子级伪元素,位于起始元素实际内容之后。
测试

::before::after 都是完全可样式化伪元素:没有任何属性应用限制。

例如,以下规则会在所有 <p> 元素(其 class 属性为 note)内容前插入字符串“Note: ”:
p.note::before { content: "Note: " }

由于display的初始值是inline,因此这会生成一个内联盒子。和 <p> 的其他内联子元素一样,它会参与 <p> 的内联格式化上下文,可能与其它内容共处一行。

与常规元素内容一样,由 ::before:after 伪元素生成的内容,可以成为其::first-line::first-letter 伪元素的一部分,这些伪元素作用于其起始元素。同样地,当父元素(即起始元素)是替换元素时,::before::after 伪元素将被抑制。

4.2. 列表标记:::marker 伪元素

::marker 伪元素表示 标记盒(marker box)的自动生成部分,该盒属于 列表项。 (参见 [CSS-DISPLAY-3][CSS-LISTS-3]。)

测试

::marker 的内容会被 ::first-letter 忽略(不会被选中)。

::marker::first-line 之间的交互目前正在 Issue 4506 讨论中。

::marker 是一个树内型伪元素,但不是完全可样式化的;只能对 ::marker 伪元素使用有限的属性。完整列表见 CSS Lists 3 § 3.1.1 Properties Applying to ::marker

::before::marker::after::marker 选择器是合法的,可用于表示作为 列表项::before::after 伪元素的标记盒。但 ::marker::marker 是无效的,并且 display::marker 上的计算值总是会丢弃 list-item 特性。

::marker 是否也应该有 ::prefix::suffix 子元素?

4.3. 占位符输入:::placeholder 伪元素

::placeholder 伪元素表示输入字段中的占位符文本:即代表输入内容并为用户提供填写表单提示的文本。例如,日期输入字段可能有占位符文本“YYYY/MM/DD”,以明确数字日期需按年-月-日顺序填写。它是树内型伪元素

测试
例如,根据 [HTML] 的语义, placeholder 属性用于 inputtextarea 元素,来提供占位符文本。 ::placeholder 伪元素用于表现此类文本在页面上的显示效果。

注: 还存在 :placeholder-shown,它在显示占位符文本时应用于(真实)元素,可用来为这些元素设定特殊样式。而 ::placeholder 只代表占位文本,因此其能力相对有限。

所有适用于 ::first-line 伪元素的属性,也适用于 ::placeholder 伪元素,除非被 [CSS-INLINE-3] 明确排除。

在交互式媒体中,输入后占位符文本通常会被隐藏;但这不是强制规定,输入值和占位符文本也可以同时可见,实际行为由 UA 决定。注意,在静态媒体(如打印)中,即使用户已输入内容,占位符文本依然会保留。

作者们似乎希望 text-align 被加入受支持属性列表。参见 此处评论

注: 有人希望 ::placeholder 也能指向元素树中有对应元素的占位符,目前尚不清楚如何实现,但可能值得考虑。见 Issue 2417

5. 元素支持的伪元素(Element-backed Pseudo-Elements)

元素支持的伪元素(element-backed pseudo-elements),在大多数 CSS 和其他平台特性中表现得就像是真实元素一样(实际上,它们通常就是实际存在、但无法被常规选择器选中的真实元素)。

元素支持的伪元素总是树内型。除非另有说明,它们是完全可样式化的,并从其起始元素继承属性,就像标准的树内型伪元素一样;但它们也可以被定义为从其他元素继承属性(如 ::part() 继承自其在 shadow tree 中所代表元素的父节点)。

所有伪类伪元素在语法上都允许跟在元素支持的伪元素(如 x-button::part(label):hoverx-button::part(label)::before)之后,就像该伪元素是类型选择器一样;但部分伪类/伪元素不能被匹配:

一个元素支持的伪元素可以定义自身为代表一个真实元素(可能该元素在当前树中不可访问)。如果这样定义,则所有未被禁止(如上所述)的伪类/伪元素都像在该真实元素上一样被匹配。如果没有这样定义,则它必须规定自身可匹配哪些伪类及其匹配时机;不过,除非另有说明,所有允许用于树内型伪元素的伪类总是也允许用于元素支持的伪元素

5.1. 文件选择按钮:::file-selector-button 伪元素

::file-selector-button 伪元素用于选中 <input>(type=file)元素内部的 <button>,前提是 UA 实现会渲染此按钮。

测试

::file-selector-button 伪元素没有可用属性的限制。

例如,以下样式会让文件选择按钮显示绿色边框:
::file-selector-button { border: 3px solid green }

5.2. details 元素可展开内容:::details-content 伪元素

::details-content 伪元素用于选中 details 元素中可展开/收起的附加信息内容。它是元素支持的伪元素

测试

details 元素


::details-content 伪元素没有应用属性的限制。

例如,以下示例会在 details 元素展开时,动画显示附加信息的不透明度:
details::details-content {
  opacity: 0;
  transition: content-visibility 300ms allow-discrete, opacity 300ms;
}

details[open]::details-content {
  opacity: 1;
}

6. 伪元素重叠交互(Overlapping Pseudo-element Interactions)

回顾一下:

下面的 CSS 和 HTML 示例演示了伪元素重叠时的交互方式:

<style>
p { color: red; font-size: 12pt }
p::first-letter { color: green; font-size: 200% }
p::first-line { color: blue }
</style>

<p>Some text that ends up on two lines</p>

每个 P 元素的首字母将显示为绿色,字号为“24pt”。首个格式化行的其他部分会为蓝色,段落其余部分为红色。

假定换行发生在单词“ends”之前,该片段的虚构标签序列可能如下:

<p>
  <p::first-line>
    <p::first-letter>
      S
    </p::first-letter>
    ome text that
  </p::first-line>
  ends up on two lines
</p>

7. 对 CSS 对象模型(CSS Object Model)的补充

测试

7.1. CSSPseudoElement 接口

CSSPseudoElement 接口允许伪元素成为事件目标。

[Exposed=Window]
interface CSSPseudoElement : EventTarget {
    readonly attribute CSSOMString type;
    readonly attribute Element element;
    readonly attribute (Element or CSSPseudoElement) parent;
    CSSPseudoElement? pseudo(CSSOMString type);
};

该接口仍在设计开发中,本草案更希望收集反馈而非直接实现。CSSWG 特别欢迎关于用例和问题的反馈。

type 属性是一个字符串,表示伪元素的类型。它的值可以是以下之一:

"::before"
表示 ::before 伪元素。
"::after"
表示 ::after 伪元素。
"::marker"
表示 ::marker 伪元素。

element 属性是该伪元素的最终起始元素

parent 属性是该伪元素的起始元素。对于大多数伪元素,parentelement 都返回同一个 Element;对于子伪元素parent 会返回一个 CSSPseudoElement,而 element 返回一个 Element

pseudo(type) 方法返回由参数指定的子伪元素CSSPseudoElement 接口实例(如果该子伪元素存在且有效),否则返回 null。详见下方 pseudo()

注: 该接口未来可能扩展至其他伪元素类型,并/或允许通过 CSSStyleDeclarationstyle 属性设置样式。目前功能仅限于支持 [web-animations-1] 所需。

7.2. pseudo() 方法(Element 接口)

Element 接口上新增了一个方法,用于获取由给定元素创建的指定类型的伪元素:

partial interface Element {
  CSSPseudoElement? pseudo(CSSOMString type);
};
pseudo(CSSOMString type) 方法用于根据 type 获取该元素上指定类型的 CSSPseudoElement 实例。执行流程如下:
  1. 按 CSS 语法解析 type 参数为 <pseudo-element-selector>,记为 type
  2. 如果 type 为失败,返回 null。
  3. 否则,返回表示该元素上匹配 type 选择器的 CSSPseudoElement 对象。

对于同一个元素和同一个伪元素类型,返回值在可观察范围内必须始终是同一个 CSSPseudoElement 对象。(UA 可为便利或性能释放/重建对象,只要不可观察到即可。)

pseudo() 方法返回值的身份、生命周期和 null 情况(及潜在的错误)仍在讨论中。参见 Issue 3607Issue 3603

7.3. getComputedStyle()

当第二个参数 pseudoElt 指向高亮伪元素时,getComputedStyle() 返回的样式表现为该高亮伪元素处于激活状态、所有其它高亮都处于非激活状态。这样可避免返回依赖实际高亮状态的结果带来的歧义和隐私风险。

8. 兼容性语法(Compatibility Syntax)

为了兼容针对 CSS Level 2 编写的现有样式表 [CSS2], 用户代理还必须接受先前的单冒号写法 (:before:after:first-letter:first-line), 分别对应 ::before::after::first-letter::first-line 伪元素。

安全性注意事项(Security Considerations)

有关高亮的安全性,请参见 § 3.7 高亮的安全性注意事项

隐私注意事项(Privacy Considerations)

本模块尚未提出新的隐私注意事项。

变更记录(Changes)

2022年12月30日工作草案 以来的主要变更包括:

2020年12月31日工作草案 以来的主要变更包括:

2019年2月25日工作草案 以来的主要变更包括:

2016年6月7日工作草案 以来的主要变更包括:

致谢(Acknowledgements)

编辑特别感谢以下个人为本规范做出的贡献: Tab Atkins、 Delan Azabani、 David Baron、 Oriol Brufau、 Razvan Caliman、 Stephen Chenney、 Chris Coyier、 Anders Grimsrud、 Vincent Hardy、 François Remy。

一致性

文档约定

一致性要求通过描述性断言和 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"> 标记,与其他规范文本区分开,例如:用户代理必须提供可访问的替代方案。

测试

与本规范内容相关的测试可以在类似这样的“测试”块中记录。所有此类块均为非规范性内容。


一致性类别

本规范的符合性要求针对三类符合性对象定义:

样式表
CSS 样式表
渲染器
解释样式表语义并渲染使用样式表的文档的用户代理 (UA)。
编辑工具
编写样式表的用户代理 (UA)。

样式表符合本规范的要求,如果它使用的所有语法声明符合通用 CSS 语法和本模块中定义的各个特性的语法。

渲染器符合本规范的要求,如果除了按照适当的规范解释样式表之外,还正确解析并渲染本规范中定义的所有功能。然而,由于设备限制导致的 UA 无法正确渲染文档并不意味着 UA 不符合规范。(例如,UA 不需要在单色显示器上渲染颜色。)

编辑工具符合本规范的要求,如果它编写的样式表在语法上符合通用 CSS 语法和本模块中各个特性的语法,并且符合本模块描述的样式表的所有其他符合性要求。

部分实现

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

不稳定和专有功能的实现

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

非实验性实现

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

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

有关提交测试用例和实现报告的更多信息,请访问 CSS 工作组的官网 https://www.w3.org/Style/CSS/Test/。有问题可以向public-css-testsuite@w3.org 邮件列表咨询。

索引

本规范定义的术语

参考文献中定义的术语(Terms defined by reference)

参考文献

规范性引用

[COMPAT]
Mike Taylor. 兼容性标准(Compatibility Standard)。Living Standard。URL: https://compat.spec.whatwg.org/
[CSS-BACKGROUNDS-3]
Elika Etemad;Brad Kemper。CSS 背景与边框模块3(CSS Backgrounds and Borders Module Level 3)。2024年3月11日。CRD。URL: https://www.w3.org/TR/css-backgrounds-3/
[CSS-BREAK-4]
Rossen Atanassov;Elika Etemad。CSS 分栏模块4(CSS Fragmentation Module Level 4)。2018年12月18日。FPWD。URL: https://www.w3.org/TR/css-break-4/
[CSS-CASCADE-5]
Elika Etemad;Miriam Suzanne;Tab Atkins Jr.。CSS 层叠与继承5(CSS Cascading and Inheritance Level 5)。2022年1月13日。CR。URL: https://www.w3.org/TR/css-cascade-5/
[CSS-CASCADE-6]
Elika Etemad;Miriam Suzanne;Tab Atkins Jr.。CSS 层叠与继承6(CSS Cascading and Inheritance Level 6)。2024年9月6日。WD。URL: https://www.w3.org/TR/css-cascade-6/
[CSS-COLOR-4]
Chris Lilley;Tab Atkins Jr.;Lea Verou。CSS 颜色模块4(CSS Color Module Level 4)。2025年4月24日。CRD。URL: https://www.w3.org/TR/css-color-4/
[CSS-COLOR-ADJUST-1]
Elika Etemad 等。CSS 颜色调整模块1(CSS Color Adjustment Module Level 1)。2022年6月14日。CRD。URL: https://www.w3.org/TR/css-color-adjust-1/
[CSS-CONTENT-3]
Elika Etemad;Dave Cramer。CSS 生成内容模块3(CSS Generated Content Module Level 3)。2019年8月2日。WD。URL: https://www.w3.org/TR/css-content-3/
[CSS-DISPLAY-4]
Elika Etemad;Tab Atkins Jr.。CSS 显示模块4(CSS Display Module Level 4)。2024年12月19日。FPWD。URL: https://www.w3.org/TR/css-display-4/
[CSS-FONTS-4]
Chris Lilley。CSS 字体模块4(CSS Fonts Module Level 4)。2024年2月1日。WD。URL: https://www.w3.org/TR/css-fonts-4/
[CSS-HIGHLIGHT-API-1]
Florian Rivoal;Sanket Joshi;Megan Gardner。CSS 自定义高亮API模块1(CSS Custom Highlight API Module Level 1)。2021年12月15日。WD。URL: https://www.w3.org/TR/css-highlight-api-1/
[CSS-INLINE-3]
Elika Etemad。CSS 内联布局模块3(CSS Inline Layout Module Level 3)。2024年12月18日。WD。URL: https://www.w3.org/TR/css-inline-3/
[CSS-LISTS-3]
Elika Etemad;Tab Atkins Jr.。CSS 列表与计数器模块3(CSS Lists and Counters Module Level 3)。2020年11月17日。WD。URL: https://www.w3.org/TR/css-lists-3/
[CSS-MULTICOL-2]
Florian Rivoal;Rachel Andrew。CSS 多栏布局模块2(CSS Multi-column Layout Module Level 2)。2024年12月19日。FPWD。URL: https://www.w3.org/TR/css-multicol-2/
[CSS-PSEUDO-4]
Daniel Glazman;Elika Etemad;Alan Stearns。CSS 伪元素模块4(CSS Pseudo-Elements Module Level 4)。2022年12月30日。WD。URL: https://www.w3.org/TR/css-pseudo-4/
[CSS-RUBY-1]
Elika Etemad 等。CSS Ruby 注解布局模块1(CSS Ruby Annotation Layout Module Level 1)。2022年12月31日。WD。URL: https://www.w3.org/TR/css-ruby-1/
[CSS-SCOPING-1]
Tab Atkins Jr.;Elika Etemad。CSS 作用域模块1(CSS Scoping Module Level 1)。2014年4月3日。FPWD。URL: https://www.w3.org/TR/css-scoping-1/
[CSS-SHADOW-PARTS-1]
Tab Atkins Jr.;Fergal Daly。CSS Shadow Parts。2018年11月15日。FPWD。URL: https://www.w3.org/TR/css-shadow-parts-1/
[CSS-SYNTAX-3]
Tab Atkins Jr.;Simon Sapin。CSS 语法模块3(CSS Syntax Module Level 3)。2021年12月24日。CRD。URL: https://www.w3.org/TR/css-syntax-3/
[CSS-TABLES-3]
François Remy;Greg Whitworth;David Baron。CSS 表格模块3(CSS Table Module Level 3)。2019年7月27日。WD。URL: https://www.w3.org/TR/css-tables-3/
[CSS-TEXT-3]
Elika Etemad;Koji Ishii;Florian Rivoal。CSS 文本模块3(CSS Text Module Level 3)。2024年9月30日。CRD。URL: https://www.w3.org/TR/css-text-3/
[CSS-TEXT-4]
Elika Etemad 等。CSS 文本模块4(CSS Text Module Level 4)。2024年5月29日。WD。URL: https://www.w3.org/TR/css-text-4/
[CSS-TEXT-DECOR-4]
Elika Etemad;Koji Ishii。CSS 文本装饰模块4(CSS Text Decoration Module Level 4)。2022年5月4日。WD。URL: https://www.w3.org/TR/css-text-decor-4/
[CSS-UI-4]
Florian Rivoal。CSS 基本用户界面模块4(CSS Basic User Interface Module Level 4)。2021年3月16日。WD。URL: https://www.w3.org/TR/css-ui-4/
[CSS-VALUES-4]
Tab Atkins Jr.;Elika Etemad。CSS 值与单位模块4(CSS Values and Units Module Level 4)。2024年3月12日。WD。URL: https://www.w3.org/TR/css-values-4/
[CSS-VARIABLES-1]
Tab Atkins Jr.。CSS 级联变量模块1(CSS Custom Properties for Cascading Variables Module Level 1)。2022年6月16日。CR。URL: https://www.w3.org/TR/css-variables-1/
[CSS-WRITING-MODES-3]
Elika Etemad;Koji Ishii。CSS 书写模式3(CSS Writing Modes Level 3)。2019年12月10日。REC。URL: https://www.w3.org/TR/css-writing-modes-3/
[CSS-WRITING-MODES-4]
Elika Etemad;Koji Ishii。CSS 书写模式4(CSS Writing Modes Level 4)。2019年7月30日。CR。URL: https://www.w3.org/TR/css-writing-modes-4/
[CSS2]
Bert Bos 等。层叠样式表2级修订版1(Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification)。2011年6月7日。REC。URL: https://www.w3.org/TR/CSS2/
[CSSOM-1]
Daniel Glazman;Emilio Cobos Álvarez。CSS 对象模型(CSS Object Model (CSSOM))。2021年8月26日。WD。URL: https://www.w3.org/TR/cssom-1/
[DOM]
Anne van Kesteren。DOM 标准(DOM Standard)。Living Standard。URL: https://dom.spec.whatwg.org/
[FILL-STROKE-3]
Elika Etemad;Tab Atkins Jr.。CSS 填充与描边模块3(CSS Fill and Stroke Module Level 3)。2017年4月13日。FPWD。URL: https://www.w3.org/TR/fill-stroke-3/
[HTML]
Anne van Kesteren 等。HTML 标准(HTML Standard)。Living Standard。URL: https://html.spec.whatwg.org/multipage/
[RFC2119]
S. Bradner。在 RFC 中指明需求级别的关键词(Key words for use in RFCs to Indicate Requirement Levels)。1997年3月。Best Current Practice。URL: https://datatracker.ietf.org/doc/html/rfc2119
[SELECTORS-4]
Elika Etemad;Tab Atkins Jr.。选择器4(Selectors Level 4)。2022年11月11日。WD。URL: https://www.w3.org/TR/selectors-4/
[UAX44]
Ken Whistler。Unicode 字符数据库(Unicode Character Database)。2024年8月27日。Unicode Standard Annex #44。URL: https://www.unicode.org/reports/tr44/tr44-34.html
[URL]
Anne van Kesteren。URL 标准(URL Standard)。Living Standard。URL: https://url.spec.whatwg.org/
[WEBIDL]
Edgar Chen;Timothy Gu。Web IDL 标准(Web IDL Standard)。Living Standard。URL: https://webidl.spec.whatwg.org/

参考性引用

[CSS-BACKGROUNDS-4]
Bert Bos;Elika J. Etemad;Lea Verou。CSS 背景与边框模块4(CSS Backgrounds and Borders Module Level 4)。CSS模块提案。URL: https://drafts.csswg.org/css-backgrounds-4/
[CSS-CASCADE-4]
Elika Etemad;Tab Atkins Jr.。CSS 层叠与继承4(CSS Cascading and Inheritance Level 4)。2022年1月13日。CR。URL: https://www.w3.org/TR/css-cascade-4/
[CSS-DISPLAY-3]
Elika Etemad;Tab Atkins Jr.。CSS 显示模块3(CSS Display Module Level 3)。2023年3月30日。CR。URL: https://www.w3.org/TR/css-display-3/
[CSS22]
Bert Bos。层叠样式表2级修订版2(Cascading Style Sheets Level 2 Revision 2 (CSS 2.2) Specification)。2016年4月12日。FPWD。URL: https://www.w3.org/TR/CSS22/
[HTML5]
Ian Hickson 等。HTML5。2018年3月27日。REC。URL: https://www.w3.org/TR/html5/
[SELECTORS-3]
Tantek Çelik 等。选择器3(Selectors Level 3)。2018年11月6日。REC。URL: https://www.w3.org/TR/selectors-3/
[UAX29]
Josh Hadley。Unicode 文本分段(Unicode Text Segmentation)。2024年8月28日。Unicode Standard Annex #29。URL: https://www.unicode.org/reports/tr29/tr29-45.html
[WEB-ANIMATIONS-1]
Brian Birtles 等。Web Animations。2023年6月5日。WD。URL: https://www.w3.org/TR/web-animations-1/

IDL 索引

[Exposed=Window]
interface CSSPseudoElement : EventTarget {
    readonly attribute CSSOMString type;
    readonly attribute Element element;
    readonly attribute (Element or CSSPseudoElement) parent;
    CSSPseudoElement? pseudo(CSSOMString type);
};

partial interface Element {
  CSSPseudoElement? pseudo(CSSOMString type);
};

问题索引

这里是否还应包含其他属性?
用户代理对高亮显示的演示效果进行 CSS 可控的调整,目前正在 Issue 6853 中讨论。
参见 F2F 会议纪要dbaron 的留言Daniel 的讨论串Gecko 记录Opera 记录Webkit 记录
不确定这样描述工作原理是否准确。
::marker::first-line 的交互目前在 Issue 4506 中讨论。
::marker 是否也应该有 ::prefix::suffix 子元素?
作者似乎希望将 text-align 纳入受支持属性列表。 参见此处评论
本接口仍在设计开发中,本草案更希望收集反馈而非直接实现。CSSWG 特别欢迎关于用例和问题的反馈。
pseudo() 方法的返回值的身份、生命周期和 null 情况(及潜在的错误)仍在讨论中。参见 Issue 3607Issue 3603