Shadow DOM — это технология, позволяющая создавать изолированные части DOM-дерева, которые имеют собственный стиль и структуру, независимо от остальной страницы. Umbrella JS предоставляет удобные методы для работы с элементами, в том числе с Shadow DOM, позволяя создавать и управлять теневыми корнями через знакомый синтаксис библиотеки.
Для создания теневого корня в Umbrella JS используется метод
.shadowRoot(). Он создаёт изолированный DOM для выбранного
элемента и возвращает объект ShadowRoot, который можно использовать для
дальнейшего добавления элементов.
// Создание shadow root на элементе
let shadow = u('#container').shadowRoot({ mode: 'open' });
// mode может быть 'open' или 'closed'
Особенности параметров:
mode: 'open' — теневой DOM доступен извне через
свойство element.shadowRoot.mode: 'closed' — доступ к shadow DOM извне запрещён,
напрямую обращаться к нему нельзя.После создания Shadow Root элементы можно добавлять с помощью
стандартных методов Umbrella JS: .append(),
.prepend(), .html().
// Добавление параграфа в shadow DOM
u(shadow).append('<p>Текст внутри Shadow DOM</p>');
// Добавление нескольких элементов
u(shadow).append('<div>Элемент 1</div><div>Элемент 2</div>');
Использование методов Umbrella JS внутри shadow root идентично работе с обычным DOM, что упрощает динамическое создание интерфейсов.
Shadow DOM изолирует стили, поэтому глобальные CSS-правила не влияют
на его содержимое. Для стилизации внутри shadow root создаются
собственные <style> элементы.
u(shadow).append(`
<style>
p {
color: blue;
font-weight: bold;
}
</style>
`);
Встроенные стили применяются только к элементам внутри shadow DOM. Это позволяет создавать компоненты с независимым визуальным оформлением.
События внутри Shadow DOM можно назначать обычным методом
.on() Umbrella JS. При этом события всплывают по цепочке
shadow root до родительского DOM, если не использовать
event.stopPropagation().
u(shadow).find('p').on('click', function(event) {
console.log('Нажатие на параграф в Shadow DOM');
});
Для поиска элементов внутри shadow root используется метод
.find() Umbrella JS, применяемый к объекту shadow root.
let paragraph = u(shadow).find('p');
paragraph.css({ color: 'red' });
Это позволяет полностью управлять содержимым shadow DOM, включая изменение стилей, добавление и удаление элементов, а также работу с атрибутами.
Shadow DOM особенно полезен при создании веб-компонентов. Он
обеспечивает изоляцию HTML и CSS, предотвращая конфликты с внешними
стилями и скриптами. В Umbrella JS можно создавать компоненты с
полностью независимым DOM, используя комбинацию методов
.shadowRoot(), .append() и
.on().
// Создание простого веб-компонента
let card = u('<div class="card"></div>').appendTo('body');
let shadow = u(card).shadowRoot({ mode: 'open' });
u(shadow).append(`
<style>
.card-content { padding: 10px; background: #f0f0f0; }
</style>
<div class="card-content">Контент карточки</div>
`);
Различие между open и closed режимами важно
для контроля доступа. В open режиме можно получить shadow
root напрямую через стандартное свойство:
let root = document.querySelector('.card').shadowRoot;
В closed режиме это свойство возвращает
null, что обеспечивает полную инкапсуляцию.
.shadowRoot() для создания изолированного
DOM на элементах..append() или
.html(), чтобы поддерживать единый стиль кодирования
Umbrella JS.<style> для независимого
оформления..on().closed, если требуется полная изоляция.Shadow DOM в сочетании с Umbrella JS позволяет строить динамичные, изолированные интерфейсы без сложных манипуляций с нативными API, обеспечивая чистоту кода и контроль над структурой и стилями.