Дом теней в HTML
Я недавно слышал о Shadow DOM. Во время просмотра видео о выпуске Angular 2 ведущий неоднократно упоминал Shadow DOM без четких выражений. Что на самом деле означает Shadow DOM?
3 ответа
Лучшее объяснение, которое я нашел, это из " Что, черт возьми, это Shadow DOM"? показано ниже:
Теневой DOM относится к способности браузера включать поддерево элементов DOM в рендеринг документа, но не в основное дерево DOM документа.
Важный вариант использования будет с элементами управления видео на веб-странице. Разметка показывает только тег видео с некоторыми атрибутами и тегами источника. Дополнительный код для всех работающих видео операций скрыт в Shadow DOM и недоступен для остальной части страницы. Фактическая разметка, javascript и стили для тега инкапсулированы, что скрывает детали реализации элементов управления видео, которые уже написаны каждым поставщиком браузера.
Так что пока он есть в DOM, он скрыт от страницы, которая его отображает. Итак, для просмотра Shadow DOM вы можете включить его в разделе Dev Tools в Chrome.
Короткий ответ: Shadow DOM - одна из четырех технологий, составляющих веб-компоненты.
Для определения, веб-компоненты: Компонентная платформа от W3C, которая позволяет создавать веб-сайты из стандартизированных строительных блоков. Веб-компоненты включают пользовательские элементы, Shadow DOM и HTML-импорт и шаблоны.
Shadow DOM - это технология веб-компонентов (хотя каждый может использоваться отдельно):
- Пользовательские элементы: это возможность создания собственных пользовательских HTML-тегов и элементов. Они могут иметь свое собственное скриптовое поведение и стиль CSS. Они являются частью веб-компонентов, но также могут использоваться сами по себе.
- Шаблоны HTML. Элемент шаблона HTML представляет собой механизм для хранения содержимого на стороне клиента, которое не должно отображаться при загрузке страницы, но может впоследствии быть создано в ходе выполнения с использованием JavaScript. Думайте о шаблоне как о фрагменте контента, который сохраняется для последующего использования в документе.
- Shadow DOM: обеспечивает инкапсуляцию для JavaScript, CSS и шаблонов в веб-компоненте. Shadow DOM делает так, чтобы эти вещи оставались отдельными от DOM основного документа. Вы также можете использовать Shadow DOM отдельно от веб-компонента.
- HTML Imports: предназначен для создания механизма упаковки веб-компонентов, но вы также можете использовать HTML Imports сам по себе. Вы импортируете файл HTML, используя тег в документе HTML.
Это относится к возможности создания "дочернего" DOM, полностью изолированного от остальной части страницы. Полезно для веб-компонентов, многократно используемых "виджетов", которые позволяют не беспокоиться о том, что их css/js влияют на то, что им не следует. http://glazkov.com/2011/01/14/what-the-heck-is-shadow-dom/
Проверьте https://www.polymer-project.org/ если вы хотите увидеть его в действии.
Думайте о теневом DOM как о инкапсулированном (частном) DOM. Вы не можете получить доступ к теневому DOM так же, как и к обычному DOM, например, document.querySelector().
Допустим, вы определили настраиваемый элемент многократного использования (который содержит его DOM-деревья). Затем вы используете пользовательский элемент в вашем приложении HTML.
Теперь под DOM (который теперь называется "хост-элемент") стал поддельным поддеревом DOM (под теневым корнем), скрытым от родительской структуры!
Я надеюсь, что это поможет вам немного.