Spec-Zone.ru › CSS

Псевдокласс CSS `:host()`

Базовый уровень Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и во многих версиях браузеров. Она доступна во всех браузерах с января 2020 года.

:host() CSS — это функция псевдокласса, которая выбирает хост теневого DOM, содержащего CSS, внутри которого она используется (поэтому с её помощью можно выбрать пользовательский элемент из его теневого DOM), но только если селектор, указанный в качестве параметра функции, соответствует хосту теневого DOM. :host() не действует при использовании вне теневого DOM.

Самый очевидный способ применения — указать имя класса только для определённых экземпляров пользовательского элемента, а затем передать соответствующий селектор класса в качестве аргумента функции. С её помощью нельзя использовать выражение селектора потомка, чтобы выбрать только экземпляры пользовательского элемента, находящиеся внутри определённого предка. Для этого предназначен :host-context().

Примечание: Другие функциональные псевдоклассы, такие как :is() и :not(), принимают список селекторов в качестве параметров, а :host() принимает один составной селектор. Кроме того, :is() и :not() учитывают только специфичность своего аргумента, тогда как специфичность :host() складывается из специфичности самого псевдокласса и специфичности его аргумента.

Попробуйте

/* Following CSS is being applied inside the shadow DOM. */

:host(h1) {
  color: red;
}

:host(#shadow-dom-host) {
  border: 2px dashed blue;
}
<!-- elements outside shadow dom -->
<div id="container">
  <h1 id="shadow-dom-host"></h1>
</div>
const shadowDom = init();

// add a <span> element in the shadow DOM
const span = document.createElement("span");
span.textContent = "Inside shadow DOM";
shadowDom.appendChild(span);

// attach shadow DOM to the #shadow-dom-host element
function init() {
  const host = document.getElementById("shadow-dom-host");
  const shadowDom = host.attachShadow({ mode: "open" });

  const cssTab = document.querySelector("#css-output");
  const shadowStyle = document.createElement("style");
  shadowStyle.textContent = cssTab.textContent;
  shadowDom.appendChild(shadowStyle);

  cssTab.addEventListener("change", () => {
    shadowStyle.textContent = cssTab.textContent;
  });
  return shadowDom;
}
/* Selects a shadow root host, only if it is
   matched by the selector argument */
:host(.special-custom-element) {
  font-weight: bold;
}

Синтаксис

:host(<compound-selector>) {
  /* ... */
}

Примеры

Выборочная стилизация теневых хостов

Следующие фрагменты взяты из нашего примера с селекторами хоста (его также можно посмотреть в действии).

В этом примере мы создали пользовательский элемент — <context-span>, которым можно обернуть текст:

<h1>
  Host selectors <a href="#"><context-span>example</context-span></a>
</h1>

В конструкторе элемента мы создаём элементы style и span, заполняем span содержимым пользовательского элемента, а элемент style — несколькими правилами CSS:

const style = document.createElement("style");
const 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: rgb(0 0 0 / 10%); padding: 2px 5px; }";

Правило :host(.footer) { color : red; } стилизует все экземпляры элемента <context-span> (в данном случае — теневого хоста) в документе, у которых задан класс footer. Мы использовали его, чтобы задать особый цвет экземплярам элемента внутри <footer>.

Спецификации

Спецификация
Модуль CSS Shadow, уровень 1
# host-selector

Совместимость с браузерами

Компьютеры Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome для Android Firefox для Android Opera для Android Safari для iOS Samsung Internet WebView для Android WebView для iOS
hostfunction
54
79
63
41
10Некоторые селекторы CSS не работают (:host > .local-child), а стилизация содержимого в слотах (::slotted) работает с ошибками.
54
63
41
10Некоторые селекторы CSS не работают (:host > .local-child), а стилизация содержимого в слотах (::slotted) работает с ошибками.
6.0
54
10Некоторые селекторы CSS не работают (:host > .local-child), а стилизация содержимого в слотах (::slotted) работает с ошибками.

См. также

  • Веб-компоненты
  • :host
  • :host-context()
  • :state()

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/:host_function

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API