【发布时间】:2021-09-10 23:21:12
【问题描述】:
我试图弄清楚将伪元素与::slotted 选择器结合起来有什么用,看起来它适用于某些但不适用于其他选择器,我找不到任何列出它适用的选择器的文档
这是一个问题的演示,注意一些伪选择器是如何生效的,而另一些则没有
class TestElement extends HTMLElement {
constructor() {
super();
this.attachShadow({mode: 'open'});
let template = document.querySelector("template");
this.shadowRoot.append(template.content.cloneNode(true));
}
}
customElements.define("test-element", TestElement);
<template>
<style>
::slotted(*)::first-line { /* doesn't works */
color: red;
}
::slotted(*):first-letter { /* doesn't works */
color: red;
}
::slotted(*) {
max-height: 3em;
overflow: auto;
}
::slotted(*)::-webkit-scrollbar { /* doesn't works */
width: 3px;
}
::slotted(*)::-webkit-scrollbar-track { /* doesn't works */
background-color: red;
}
::slotted(*)::selection { /* doesn't works */
color: red;
}
::slotted(*)::placeholder { /* works */
color: red;
}
::slotted(*)::marker { /* works */
color: red;
}
</style>
<slot></slot>
</template>
<test-element>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Sapiente
doloribus ullam fugit ipsum laborum velit architecto, provident dolore
at, aperiam quaerat officiis aliquid magni sed expedita totam dolor
doloremque odit.
Lorem ipsum dolor sit amet consectetur adipisicing elit. Sapiente
doloribus ullam fugit ipsum laborum velit architecto, provident dolore
at, aperiam quaerat officiis aliquid magni sed expedita totam dolor
doloremque odit.
Lorem ipsum dolor sit amet consectetur adipisicing elit. Sapiente
doloribus ullam fugit ipsum laborum velit architecto, provident dolore
at, aperiam quaerat officiis aliquid magni sed expedita totam dolor
doloremque odit.</p>
</test-element>
<test-element>
<input placeholder="Placeholder">
</test-element>
<test-element>
<li>Li</li>
</test-element>
【问题讨论】:
-
developer.mozilla.org/en-US/docs/Web/CSS/::slotted "还要注意,此选择器不会选择放置在插槽中的文本节点;它只针对实际元素。"
-
@disinfor 我的问题中的示例都不是文本节点,它们都是实际元素
-
例如,
first-letter不是元素 - 它是对文本的伪引用。 -
@disinfor 嗯..,我不认为这就是他们所说的“文本节点”的意思,我认为他们只是说那里必须有和元素(例如 @987654326 @),并不是说选择器不能选择元素内的文本,但我可能错了。但无论如何,即使你是对的,它也只能解释
first-letter和first-line而不是像selection和webkit-scrollbar这样的其他人。 -
同意。这是个有趣的问题!对于
::selection和webkit-scrollbar,我想知道是不是因为它们不一定是实际影子dom 的一部分——而::selection仍然指的是实际文本,而不是基本/简单的选择器。
标签: html css css-selectors shadow-dom custom-element