0Pricing
HTML Academy · Урок

Декларативный Shadow DOM

Подключайте shadow DOM из HTML без JavaScript с помощью shadowrootmode

«Декларативный Shadow DOM» — бесплатный урок HTML Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения HTML Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс HTML Academy содержит 4 уроков всего.

Какую проблему это решает

Традиционный теневой DOM создаётся с помощью JavaScript (attachShadow). Для страниц, отображаемых на сервере, это означает, что теневое дерево остаётся пустым до запуска JS — и тем самым сводит на нет цель SSR: передать полный HTML уже в первом байте. Декларативный теневой DOM решает эту проблему.

Атрибут режима теневого корня

Элемент <template> с shadowrootmode="open" объявляет теневой корень в HTML во время разбора. Браузер автоматически присоединяет теневой корень к родительскому элементу, а содержимое шаблона становится теневым деревом. JavaScript не требуется.

<my-card>
  <template shadowrootmode="open">
    <style>:host { display: block; padding: 16px; }</style>
    <slot></slot>
  </template>
  <p>This goes into the slot</p>
</my-card>

SSR с веб-компонентами

Декларативный теневой DOM обеспечивает полноценный рендеринг веб-компонентов на сервере: сервер встраивает всё теневое дерево в страницу, браузер разбирает и присоединяет его до выполнения какого-либо JS, а JS для гидратации может продолжить работу с уже полностью отображённой основы. Веб-компоненты получают те же возможности, что и SSR фреймворков.

Режим: открытый или закрытый

Используются те же режимы, что и для императивного attachShadow: shadowrootmode="open" предоставляет доступ к теневому корню через element.shadowRoot, а shadowrootmode="closed" скрывает его. Поведение идентично соответствующей версии, подключаемой через JavaScript.

Разбирается один раз для каждого элемента

Браузер присоединяет теневой корень, когда впервые встречает элемент <template shadowrootmode>. После присоединения шаблон используется — последующий запрос к нему ничего не возвращает. Это соответствует жизненному циклу attachShadow: теневой корень существует столько же, сколько и элемент.

Слоты работают как обычно

Дочерние элементы основного DOM — <p> за пределами <template> в примере — проецируются в элементы <slot> внутри теневого дерева, как и при императивном использовании теневого DOM. Принцип композиции тот же, различается только механизм присоединения.

Сочетание с пользовательскими элементами

Если <my-card> — зарегистрированный пользовательский элемент, процесс его обновления использует уже присоединённый теневой корень, а не вызывает attachShadow повторно. Класс пользовательского элемента может прочитать this.shadowRoot в своём connectedCallback, не создавая теневой корень.

Поддержка серверных инструментов

Lit-html с помощью render, компоненты Astro и несколько других фреймворков теперь добавляют декларативный теневой DOM в результат SSR. Самостоятельная реализация тоже возможна: любая система шаблонов на основе строк может записывать шаблон с атрибутом режима теневого корня.

Поддержка браузерами

Декларативный теневой DOM поддерживается в Chrome, Edge, Safari и Firefox. Старые браузеры молча игнорируют элемент <template> — содержимое внутри шаблона остаётся невидимым, что обеспечивает корректное постепенное ухудшение для сред без поддержки.

Стратегия полифилла

Для более широкой поддержки небольшой скрипт может обойти DOM и преобразовать шаблоны с атрибутом режима теневого корня в настоящие теневые корни. Запускайте его до регистрации пользовательских элементов, чтобы последующие обновления компонентов увидели ожидаемое теневое дерево.

Компромиссы

Декларативный теневой DOM дублирует структуру: содержимое <template> находится в HTML, хотя оно также встроено в класс компонента. На страницах с большим количеством одинаковых компонентов это увеличивает объём передаваемых данных. Фреймворки устраняют дублирование; самостоятельной реализации SSR может понадобиться делать то же самое.

Когда стоит внедрять

Если вы создаёте веб-компоненты и заботитесь об отображении с первого байта или о поисковой оптимизации, внедряйте эту возможность уже сейчас. Она стабильна, поддерживается браузерами и значительно улучшает SSR для приложений на основе веб-компонентов. Для приложений без теневого DOM она неприменима.

Проверка знаний

Какую проблему решает декларативный теневой DOM по сравнению с императивным attachShadow?

Итоги

Декларативный теневой DOM использует <template shadowrootmode="open"> внутри пользовательского элемента, чтобы присоединить теневой корень во время разбора; JS не требуется. Это обеспечивает настоящий SSR для веб-компонентов: теневое дерево, изолированные стили и слоты работают ещё до гидратации. Возможность поддерживается всеми современными браузерами; для старых доступен полифилл. Фреймворки Lit и Astro добавляют её автоматически.

Часто задаваемые вопросы

Урок «Декларативный Shadow DOM» бесплатный?

Да — полный текст урока «Декларативный Shadow DOM» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс HTML Academy, подпишись на CoddyKit PRO. Курс HTML Academy содержит 4 уроков всего.

Чему я научусь в уроке «Декларативный Shadow DOM»?

Подключайте shadow DOM из HTML без JavaScript с помощью shadowrootmode Ты практикуешь HTML Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать HTML Academy?

Предыдущий опыт не требуется. HTML Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Декларативный Shadow DOM»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке HTML Academy?

Да. Каждый урок HTML Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Декларативный Shadow DOM
  2. Popover API
  3. Элемент selectlist
  4. Вызыватели интереса и атрибут command
← Назад к HTML Academy