::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