ShadowRoot
Базовая Широко поддерживается *
Данная функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с января 2020 года.
* Некоторые части этой функции могут иметь различный уровень поддержки.
Интерфейс ShadowRoot API Shadow DOM является корневым узлом поддерева DOM, которое отображается отдельно от основного дерева DOM документа.
Вы можете получить ссылку на тень элемента, используя его свойство Element.shadowRoot, при условии, что оно было создано с помощью Element.attachShadow() с параметром mode установленным в значение open.
Свойства экземпляра
-
ShadowRoot.activeElementТолько для чтения -
Возвращает
Elementв дереве тени, у которого есть фокус. ShadowRoot.adoptedStyleSheets-
Добавляет массив созданных таблиц стилей, которые будут использоваться поддеревом Shadow DOM. Они могут быть совместно использованы с другими поддеревьями DOM, которые используют тот же родительский узел
Document, и самим документом. -
ShadowRoot.clonableТолько для чтения -
Логическое значение, указывающее, можно ли клонировать корень тени.
-
ShadowRoot.delegatesFocusТолько для чтения -
Логическое значение, указывающее, делегирует ли корень тени фокус, если выбран нефокусируемый узел.
-
ShadowRoot.fullscreenElementТолько для чтения -
Элемент, который в данный момент находится в полноэкранном режиме для этого дерева тени.
-
ShadowRoot.hostТолько для чтения -
Возвращает ссылку на элемент DOM, к которому прикреплен
ShadowRoot. ShadowRoot.innerHTML-
Устанавливает или возвращает ссылку на дерево DOM внутри
ShadowRoot. -
ShadowRoot.modeТолько для чтения -
Режим
ShadowRoot, либоopen, либоclosed. Это определяет, доступны ли внутренние функции корня тени из JavaScript. -
ShadowRoot.pictureInPictureElementТолько для чтения -
Возвращает
Elementв дереве тени, которое в данный момент отображается в режиме «картинка в картинке». -
ShadowRoot.pointerLockElementТолько для чтения -
Возвращает
Element, установленный в качестве цели для событий мыши, пока указатель заблокирован.nullесли блокировка ожидается, указатель разблокирован или если целевой элемент находится в другом дереве. -
ShadowRoot.serializableТолько для чтения -
Логическое значение, указывающее, может ли корень тени быть сериализован. Сериализуемый корень тени внутри элемента будет сериализован функциями
Element.getHTML()илиShadowRoot.getHTML(), когда параметрoptions.serializableShadowRootsустановлен вtrue. Это устанавливается при создании корня тени. -
ShadowRoot.slotAssignmentТолько для чтения -
Возвращает строку, содержащую тип назначения слота, либо
manual, либоnamed. -
ShadowRoot.styleSheetsТолько для чтения -
Возвращает
StyleSheetListобъектовCSSStyleSheetдля таблиц стилей, явно связанных с деревом тени или встроенных в него.
Методы экземпляра
ShadowRoot.getAnimations()-
Возвращает массив всех объектов
Animation, которые в данный момент действуют, а их целевые элементы являются потомками дерева тени. -
ShadowRoot.getSelection()Нестандартный -
Возвращает объект
Selection, представляющий выбранный пользователем диапазон текста или текущую позицию курсора. -
ShadowRoot.elementFromPoint()Нестандартный -
Возвращает самый верхний элемент по заданным координатам.
-
ShadowRoot.elementsFromPoint()Нестандартный -
Возвращает массив всех элементов по заданным координатам.
ShadowRoot.setHTMLUnsafe()-
Парсит строку HTML в фрагмент документа без очистки, который затем заменяет исходное поддерево shadowroot. Строка HTML может содержать декларативные shadow root, которые будут обработаны как элементы шаблона, если HTML был задан с помощью
ShadowRoot.innerHTML.
События
Следующие события доступны ShadowRoot через событие «подъёма» от HTMLSlotElement:
-
HTMLSlotElementslotchangeсобытия -
Событие, генерируемое при изменении узлов внутри слота.
Примеры
Следующие фрагменты взяты из нашего примера life-cycle-callbacks (посмотреть в действии), в котором создаётся элемент, отображающий квадрат заданного размера и цвета в атрибутах элемента.
Внутри определения класса элемента <custom-square> мы включаем некоторые события жизненного цикла, вызывающие внешнюю функцию updateStyle(), которая фактически применяет размер и цвет к элементу. Вы увидите, что мы передаём ей this (сам пользовательский элемент) в качестве параметра.
connectedCallback() {
console.log('Custom square element added to page.');
updateStyle(this);
}
attributeChangedCallback(name, oldValue, newValue) {
console.log('Custom square element attributes changed.');
updateStyle(this);
}
В самой функции updateStyle() мы получаем ссылку на shadow DOM с помощью Element.shadowRoot. Отсюда мы используем стандартные методы обхода DOM для поиска элемента <style> внутри shadow DOM и затем обновляем найденный CSS:
function updateStyle(elem) {
const shadow = elem.shadowRoot;
const childNodes = shadow.childNodes;
for (const node of childNodes) {
if (node.nodeName === "STYLE") {
node.textContent = `
div {
width: ${elem.getAttribute("l")}px;
height: ${elem.getAttribute("l")}px;
background-color: ${elem.getAttribute("c")};
}
`;
}
}
}
Спецификации
| Спецификация |
|---|
| DOM # interface-shadowroot |
Совместимость браузеров
| Настольные | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
ShadowRoot |
53 | 79 | 63 | 40 | 10 | 53 | 63 | 41 | 10 | 6.0 | 53 |
activeElement |
53 | 79 | 63 | 40 | 10 | 53 | 63 | 41 | 10 | 6.0 | 53 |
adoptedStyleSheets |
73 | 79 | 101 | 60 | 16.4 | 73 | 101 | 50 | 16.4 | 11.0 | 73 |
clonable |
124 | 124 | 123 | 110 | 17.4 | 124 | 123 | 82 | 17.4 | 27.0 | 124 |
delegatesFocus |
53 | 79 | 94 | 40 | 15 | 53 | 94 | 41 | 15 | 6.0 | 53 |
elementFromPoint |
53До Chrome 66, этот метод возвращалnull когда элемент был дочерним элементом узла хоста. Смотрите ошибку 40537452. |
79 | 63 | 40До Opera 53, этот метод возвращалnull когда элемент был дочерним элементом узла хоста. Смотрите ошибку 40537452. |
10.1 | 53До Chrome Android 66, этот метод возвращалnull когда элемент был дочерним элементом узла хоста. Смотрите ошибку 40537452. |
63 | 41До Opera Android 47, этот метод возвращалnull когда элемент был дочерним элементом узла хоста. Смотрите ошибку 40537452. |
10.3 | 6.0До Samsung Internet 9.0, этот метод возвращалnull когда элемент был дочерним элементом узла хоста. Смотрите ошибку 40537452. |
53До WebView Android 66, этот метод возвращалnull когда элемент был дочерним элементом узла хоста. Смотрите ошибку 40537452. |
elementsFromPoint |
53До Chrome 66, этот метод возвращалnull когда элемент был дочерним элементом узла хоста. Смотрите ошибку 40537452. |
79 | 63 | 40 | 11.1 | 53До Chrome Android 66, этот метод возвращалnull когда элемент был дочерним элементом узла хоста. Смотрите ошибку 40537452. |
63 | 41 | 11.3 | 6.0До Samsung Internet 9.0, этот метод возвращалnull когда элемент был дочерним элементом узла хоста. Смотрите ошибку 40537452. |
53До WebView Android 66, этот метод возвращалnull когда элемент был дочерним элементом узла хоста. Смотрите ошибку 40537452. |
fullscreenElement |
71 | 79 | 6463 | 58 | 16.4 | 71 | 6463 | 50 | 16.4["Доступно только на iPad, не на iPhone.", "Показывает кнопку поверх экрана, которую нельзя отключить. Проведение пальцем вниз выходит из полноэкранного режима, что делает его непригодным для некоторых случаев использования, таких как игры."] |
10.0 | 71 |
getAnimations |
84 | 84 | 75 | 70 | 14 | 84 | 79 | 60 | 14 | 14.0 | 84 |
getHTML |
125 | 125 | 128 | 111 | 18 | 125 | 128 | 83 | 18 | 27.0 | 125 |
getSelection |
53 | 79 | Нет | 40 | Нет | 53 | Нет | 41 | Нет | 6.0 | 53 |
host |
53 | 79 | 63 | 40 | 10 | 53 | 63 | 41 | 10 | 6.0 | 53 |
innerHTML |
53 | 79 | 63 | 40 | 10 | 53 | 63 | 41 | 10 | 6.0 | 53 |
mode |
53 | 79 | 63 | 40 | 10.1 | 53 | 63 | 41 | 10.3 | 6.0 | 53 |
pictureInPictureElement |
69 | 79 | Нет | 56 | 13.1 | 105 | Нет | 72 | 13.4 | 20.0 | 105 |
pointerLockElement |
53 | 79 | 63 | 40 | 10.1 | 53 | 63 | 41 | Нет | 6.0 | 53 |
serializable |
125 | 125 | 128 | 111 | 18 | 125 | 128 | 83 | 18 | 27.0 | 125 |
setHTMLUnsafe |
124 | 124 | 123 | 110 | 17.4 | 124 | 123 | 82 | 17.4 | 27.0 | 124 |
slotAssignment |
86 | 86 | 92 | 72 | 16.4 | 86 | 92 | 61 | 16.4 | 14.0 | 86 |
styleSheets |
53 | 79 | 63 | 40 | 12.1 | 53 | 63 | 41 | 12.2 | 6.0 | 53 |
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot