--- title: ':host-context()' slug: 'Web/CSS/:host-context()' translation_of: 'Web/CSS/:host-context()' ---
:host-context()
CSS 伪类的作用是选择shadow DOM 中shadow host,这个伪类内可以写关于该shadow host的CSS规则。 (我们可以从 shadow DOM 中选择一个自定义元素 custom element) — 但前提是,在DOM 层级中,括号中的选择器参数必须和shadow host 的祖先相匹配。
典型的使用方法是后代选择器表达式。例如 h1
— 只选择在<h1>
内的自定义元素的实例。
Note: 该伪类的css样式在 shadow DOM 之外的元素上是没有效果的
/* 选择了一个 shadow root host, 当且仅当这个 shadow root host 是括号中选择器参数(h1)的后代 */ :host-context(h1) { font-weight: bold; } :host-context(main article) { font-weight: bold; }
下边的代码片段来自 host-selectors (这里查看样式效果)。
在本例中,我们有一个简单的自定义元素 — <context-span>
— 你可以把文字包裹在该自定义标签中:
<h1>Host selectors <a href="#"><context-span>example</context-span></a></h1>
在自定义元素的构造器函数中,我们创建 style
和 span
元素。让 span
里呈现的是自定义元素的文字内容,并且给style
元素一些CSS 规则。
let style = document.createElement('style'); let span = document.createElement('span'); span.textContent = this.textContent; const shadowRoot = this.attachShadow({mode: 'open'}); shadowRoot.appendChild(style); shadowRoot.appendChild(span); style.textContent = 'span:hover { text-decoration: underline; }' + ':host-context(h1) { font-style: italic; }' + ':host-context(h1):after { content: " - no links in headers!" }' + ':host-context(article, aside) { color: gray; }' + ':host(.footer) { color : red; }' + ':host { background: rgba(0,0,0,0.1); padding: 2px 5px; }';
:host-context(h1) { font-style: italic; }
和 :host-context(h1):after { content: " - no links in headers!"
这些CSS 规则规定了位于<h1>
标签内部的 <context-span>
元素的实例的样式。
Specification | Status | Comment |
---|---|---|
{{ SpecName('CSS Scope', '#host-selector', ':host-context()') }} | {{ Spec2('CSS Scope') }} | Initial definition. |
{{Compat("css.selectors.host-context")}}