Автор оригинала: Saptak Sengupta.
Сначала я узнал о Shadow DOM от моего любопытства о том, как браузеры реализуют теги, такие как
Однако ни один из браузеров не позволил разработчикам написать собственную нестандартную тень DOM (хотя Google Chrome имел версию V0). Я снова наткнулся на тень Dom, глядя на проблема в jquery чинить. Так что теперь, начиная с 2018 года, большинство браузеров начали поддерживать Shadow DOM API и, следовательно, jQuery, необходимые для этой поддержки для этого.
|. |. |. https://caniuse.com/#feat=shadowdomv1 |.
Итак, что такое эта тень Дом и почему мы даже его используем?
Что такое дом?
Спецификация W3C описывает его как «способ объединения нескольких домовых деревьев в одну иерархию и как эти деревья взаимодействуют друг с другом в документе, что позволяет улучшить композицию домена».
Теперь, чтобы понять, что нам нужно понять, что такое дом. Дом или объектная модель DOM или DOCUCE – это конструкция, подобная дереву, содержащую различные элементы (или теги) и строки текста, которые показаны языком разметки (например, HTML, XML и т. Д.).
Итак, скажем, у нас есть HTML-код что-то вроде этого:
\ \ \ \ \Title\ \ \ \\\ \This is header\
\This is a \ link \ \
\
Итак, визуально вы можете показать структуру DOM как что-то вроде:
Тень Дом
Теперь Shadow DOM позволяет нам создавать отдельные скрытые домовые деревья, которые прикреплены к элементам регулярного дерева DOM. Это позволяет вам реализовать функциональную инкапсуляцию, то есть кто-то разборка регулярного дерева DOM и применение укладки на регулярное дерево DOM не знает или не влияет на свойства и функциональные возможности дерева Shadow DOM. Следовательно, вы используете Shadow DOM, не зная сложные детали того, как реализован DOM. Это важно, потому что это следует за основными идеями объектно-ориентированного программирования.
Дерево Shadow Dom начинается с Тень корня И может затем иметь какой-либо регулярный элемент DOM, прикрепленный под ним.
Давайте посмотрим пример: HTML
\ \ \ \ \Title\ \ \ \\ \\
Javascript
const shadowHost = document.getElementById('shadowHost'); const shadowRoot = shadowHost.attachShadow({mode: 'open'}); shadowRoot.innerHTML = '\Hello Shadow DOM\
';
Итак, это создаст тень домо. Визуально вы можете представлять это как: Итак, как видите, есть несколько разных частей в теневой доме, кроме нее, чтобы быть просто еще одним домом.
- Тень дерево : Домное дерево внутри тени DOM.
- Теневая граница : место, где заканчивается тень DOM, и начинается обычный дом.
- Тень корня : Корневой узел тени дерева.
- Теневый хост : Регулярный узел DOM, к которому прикреплен тень DOM.
- Тень ребенка Дерево ниже теневого корневого узла.
Shadow DOM не может быть прикреплен к немногим разным элементам, как упомянуто В спецификации Отказ Некоторые из причин:
- Различные теги формы, такие как <ввод>,
- Такие элементы, такие как или или
, которые обычно являются самообслуживаниями тегов, и обычно не содержат детский узел.
Также, если вы видите в коде, есть «{Mode: Open}». Режим определяет, можете ли вы редактировать стиль Shadow DOM из-за пределов Shadow DOM или нет.
Почему нам в любом случае нужна Shadow DOM?
Есть несколько разных сценариев, где вы можете использовать Shadow DOM. Наиболее важной функциональностью Shadow DOM является реализацией концепции инкапсуляции. Таким образом, в основном кто-то использует Host Shadow DOM, не должен заботиться о стиле и внедрении дома внутри. Таким образом, мало использования случаев использования:
- Браузер реализует Shadow DOM для различных различных тегов, таких как
- Вы можете сделать свой собственный Shadow Shadow DOM, когда вам нужно создать элемент, который вы хотите не изменять по стайлию оставшегося дома.
- Вы также можете использовать Shadow DOM, когда вы хотите создать разделение определенного элемента DOM из главного элемента DOM.
Так это теневая дома очень тень-эй? Ну, может быть, так как он остается спрятанным от главной поездки DOM. Но в то же время это часто очень полезно из-за его свойств инкапсуляции.