shadow DOM是否替换:: before和:: after?

Ori*_*iol 39 css css3 language-lawyer pseudo-element shadow-dom

CSS Scoping

阴影主机的后代不得在格式化树中生成框.相反,活动阴影树的内容 生成框,就好像它们是元素的内容一样.

CSS Pseudo-Elements描述::before::afteras

这些伪元素生成框,好像它们是它们的原始元素的直接子元素

那么这些是真的呢?

  • 首先,影子主机的所有内容(不包括::before::after)都被活动阴影树的内容替换.然后,::before::after产生的阴影主机盒.
  • 首先,::before::after产生的阴影主机盒.然后,影子主机(包括::before::after)的所有内容都被活动阴影树的内容替换.

Firefox和Chrome做前者,但规范是否描述了这种行为?

var root = document.querySelector('div').createShadowRoot();
root.innerHTML = "<p>Shadow content</p>";
Run Code Online (Sandbox Code Playgroud)
div::before, div::after {
  content: 'Generated content';
}
Run Code Online (Sandbox Code Playgroud)
<div>Content</div>
Run Code Online (Sandbox Code Playgroud)

Xan*_*hir 23

CSS Scoping规范作者在这里.

答案其实是,正式......未定义!

在编写范围规范时,我没有想到这种交互.我会发一封电子邮件到列表中,我们会搞清楚.几乎可以肯定的是,我们将决定当前所做的任何浏览器(看起来像工作之前/之后的那样"按预期"即使在影子主机中也是如此).

编辑:工作组的回应是一致的-目前执行的行为(::前/后影子主机工作)是应该的.我很快就会把它编辑成Scoping规范.