Spec-Zone.ru › CSS

::slotted()

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

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

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

Псевдоэлемент ::slotted() CSS псевдоэлемента представляет собой любой элемент, размещённый в слоте внутри HTML-шаблона (подробнее см. Использование шаблонов и слотов).

Это работает только при использовании в CSS внутри тени DOM. Обратите внимание, что этот селектор не выберет текстовый узел, помещённый в слот; он нацелен только на фактические элементы.

Попробовать

/* Selects any element placed inside a slot */
::slotted(*) {
  font-weight: bold;
}

/* Selects any <span> placed inside a slot */
::slotted(span) {
  font-weight: bold;
}

Синтаксис

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

Примеры

Выделение элементов со слотами

В этом примере мы используем шаблон с тремя слотами:

<template id="person-template">
  <div>
    <h2>Personal ID Card</h2>
    <slot name="person-name">NAME MISSING</slot>
    <ul>
      <li><slot name="person-age">AGE MISSING</slot></li>
      <li><slot name="person-occupation">OCCUPATION MISSING</slot></li>
    </ul>
  </div>
</template>

Мы определяем <person-details> пользовательский элемент. В данном случае, мы добавляем стили с помощью JavaScript, хотя могли бы добавить их в блок <style> внутри <template> с тем же эффектом:

customElements.define(
  "person-details",
  class extends HTMLElement {
    constructor() {
      super();
      let template = document.getElementById("person-template");
      let templateContent = template.content;

      const shadowRoot = this.attachShadow({ mode: "open" });

      let style = document.createElement("style");
      style.textContent =
        "div { padding: 10px; border: 1px solid gray; width: 200px; margin: 10px; }" +
        "h2 { margin: 0 0 10px; }" +
        "ul { margin: 0; }" +
        "p { margin: 10px 0; }" +
        "::slotted(*) { color: gray; font-family: sans-serif; } " +
        "::slotted(span) {text-decoration: underline;} ";

      shadowRoot.appendChild(style);
      shadowRoot.appendChild(templateContent.cloneNode(true));
    }
  },
);

При заполнении style элемента контентом, вы увидите, что мы выбираем все элементы со слотами (::slotted(*)) и придаём им другой шрифт и цвет. Это отличает их от слотов, которые не заполнены. Мы стилизовали все слотовые <span> (::slotted(span)) для различения <span> от <p>.

Наша разметка включает три пользовательских элемента, включая пользовательский элемент с недопустимым именем слота в порядке источника, отличающемся от <template>:

<person-details>
  <p slot="person-name">Wonder Woman</p>
  <span slot="person-age">Immortal</span>
  <span slot="person-occupation">Superhero</span>
</person-details>

<person-details>
  <p slot="person-name">Malala Yousafzai</p>
  <span slot="person-age">17</span>
  <span slot="person-occupation">Activist</span>
</person-details>

<person-details>
  <span slot="person-age">44</span>
  <span slot="not-a-slot-name">Time traveler</span>
  <p slot="person-name">Dr. Who</p>
</person-details>

Результат

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

Спецификация
CSS Scoping Module Level 1
# slotted-pseudo

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

Рабочий стол Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on IOS Samsung Internet WebView Android
::slotted 50 79 63 37 10 50 63 37 10 5.0 50

См. также

  • :host
  • :host()
  • :host-context()
  • Модуль CSS scoping
  • HTML-атрибут slot
  • HTML-элемент <slot>
  • HTML-элемент <template>
  • Веб-компоненты

© 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/::slotted

Spec-Zone.ru

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