Spec-Zone.ru › CSS

:host()

Базовая Широкодоступная

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

  • Узнать больше
  • Полная совместимость
  • Отправить отзыв

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

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

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

Попробуйте

/* Selects a shadow root host, only if it is
   matched by the selector argument */
:host(.special-custom-element) {
  font-weight: bold;
}

Синтаксис

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

Примеры

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

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

В этом примере у нас есть пользовательский элемент — <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 Scoping Module Level 1
# host-selector

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

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

См. также

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

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

Spec-Zone.ru

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