part и exportparts для внешней стилизации
Открывайте части shadow DOM для внешнего CSS с помощью part и exportparts
«part и exportparts для внешней стилизации» — бесплатный урок HTML Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения HTML Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс HTML Academy содержит 4 уроков всего.
Компромисс инкапсуляции
Строгая инкапсуляция стилей в теневом DOM не позволяет потребителям изменять стили отдельных элементов внутри компонента. Пользовательские свойства подходят для глобальных значений, но, например, нельзя задать внутренней кнопке закрытия собственный радиус границы. Для этого используются parts.
Атрибут part
Пометьте элемент внутри теневого дерева атрибутом part="name". После этого потребители смогут выбрать его с помощью псевдоэлемента ::part(name): my-dialog::part(close-button) { color: red; }. Именованный элемент становится точкой расширения для стилизации, а остальная часть теневого дерева остаётся инкапсулированной.
// Shadow tree:
<button part="close-button">×</button>
// Page CSS:
my-dialog::part(close-button) {
color: red;
border-radius: 50%;
}Несколько parts у одного элемента
Разделяйте имена пробелами, чтобы открыть один элемент как несколько parts: part="button primary". ::part(button) выбирает его в общем случае, а ::part(primary) — как элемент с основным стилем. Каждое имя сопоставляется независимо.
Ограничения ::part
::part допускает только некоторые псевдоклассы (:hover, :focus, :disabled), но не комбинаторы потомков и не дополнительный структурный выбор. ::part(card) p недействителен: нельзя обратиться внутрь part с помощью селекторов потомков.
exportparts передаёт parts
Когда пользовательский элемент содержит другой пользовательский элемент внутри собственного теневого дерева, parts внутреннего элемента обычно не видны внешней странице. Атрибут exportparts="close-button" на вложенном элементе передаёт эти parts внешнему хосту.
// Outer shadow:
<inner-element exportparts="close-button"></inner-element>
// Page:
outer-element::part(close-button) { color: red; }Переименование при экспорте
exportparts="close-button: dismiss" экспортирует внутренний part под новым именем на внешнем элементе. Благодаря этому внешний компонент может предоставлять понятный интерфейс имён независимо от того, какие внутренние элементы он объединяет.
parts и пользовательские свойства CSS
Пользовательские свойства предоставляют значения (цвета, интервалы, шрифты). Parts предоставляют элементы (полный набор возможностей CSS — границы, трансформации, анимации). Используйте пользовательские свойства для глобальных токенов, а parts — для разовой настройки отдельных элементов. Оба подхода могут использоваться в одном компоненте.
Шаблон темизации
Практика дизайн-систем: предоставляйте небольшой набор parts для элементов, которые чаще всего настраивают (кнопок, заголовков, индикаторов), а также широкий набор пользовательских свойств для цветов, интервалов и типографики. Потребители смогут настраивать тему на уровне значений или элементов в зависимости от своей задачи.
Стабильность имён parts
Имена parts становятся частью публичного API компонента — их изменение нарушает CSS потребителей. Выбирайте имена, описывающие роль элемента ("close-button", "header", "track"), а не его положение ("first-button"), чтобы API оставался понятным по мере развития реализации.
Подсказки по документации
Перечислите все доступные parts (и экспортируемые parts) в файле readme компонента. Без документации потребителям приходится изучать DOM, чтобы обнаружить parts, из-за чего они оказываются связаны с тем, что случайно найдут. Относитесь к списку parts так же, как к списку свойств компонента фреймворка.
Поддержка браузерами
::part и exportparts доступны во всех современных браузерах. Даже старые версии Safari теперь поддерживают ::part. Используйте их без ограничений; для очень старых браузеров (большинство из которых уже не используется) в качестве обходного решения применяйте дополнительные пользовательские свойства CSS.
Проверка знаний
Что делает атрибут exportparts?
Итоги
Атрибут part открывает отдельные элементы теневого дерева для внешней стилизации через ::part(name), предоставляя всю мощь CSS без нарушения инкапсуляции. exportparts передаёт parts из вложенных пользовательских элементов внешнему хосту и при необходимости переименовывает их. Сочетайте parts с пользовательскими свойствами CSS для полноценной поверхности темизации и документируйте список parts как часть API компонента.
Изучай HTML с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 40
- Уроки
- 159
Часто задаваемые вопросы
Урок «part и exportparts для внешней стилизации» бесплатный?
Да — полный текст урока «part и exportparts для внешней стилизации» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс HTML Academy, подпишись на CoddyKit PRO. Курс HTML Academy содержит 4 уроков всего.
Чему я научусь в уроке «part и exportparts для внешней стилизации»?
Открывайте части shadow DOM для внешнего CSS с помощью part и exportparts Ты практикуешь HTML Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать HTML Academy?
Предыдущий опыт не требуется. HTML Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «part и exportparts для внешней стилизации»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке HTML Academy?
Да. Каждый урок HTML Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- attachShadow и корень shadow
- Элементы slot для распределения содержимого
- Изолированные стили внутри Shadow DOM
- part и exportparts для внешней стилизации