Кратко
СкопированоАтрибут exportparts
используется во вложенных веб-компонентах, чтобы пробросить наружу part
из их внутреннего Shadow DOM. Позволяет стилизовать части вложенных компонентов, несмотря на инкапсуляцию.
Пример
СкопированоДопустим, у нас есть компонент <inner
с part
, и компонент <outer
, который включает его.
<outer-box></outer-box>
<outer-box></outer-box>
<!-- Контент в шаблоне inner-card --><template id="inner-template"> <div part="content">Контент</div></template><!-- Контент в шаблоне inner-card в шаблоне outer-box --><template id="outer-template"> <inner-card exportparts="content:inner-content"></inner-card></template>
<!-- Контент в шаблоне inner-card --> <template id="inner-template"> <div part="content">Контент</div> </template> <!-- Контент в шаблоне inner-card в шаблоне outer-box --> <template id="outer-template"> <inner-card exportparts="content:inner-content"></inner-card> </template>
outer-box::part(inner-content) { color: rebeccapurple; font-weight: bold;}
outer-box::part(inner-content) { color: rebeccapurple; font-weight: bold; }
Как пишется
СкопированоАтрибут exportparts
указывается на компоненте внутри Shadow DOM, и содержит пары:
<some-component exportparts="part-name:alias"></some-component>
<some-component exportparts="part-name:alias"></some-component>
part
— имя- name part
внутри дочернего компонентаalias
— под каким именем этоpart
будет видно снаружи
Можно экспортировать несколько частей, через запятую:
<card-box exportparts="header:main-header, body:main-body"></card-box>
<card-box exportparts="header:main-header, body:main-body"></card-box>
Снаружи будет доступен селектор:
my-component::part(main-header) { ... }
my-component::part(main-header) { ... }
Как понять
СкопированоПо умолчанию part
работает только на один уровень инкапсуляции. То есть, если один компонент оборачивает другой, :
снаружи не увидит part
из глубины.
Атрибут exportparts
нужен, чтобы передать видимость part
дальше — пробросить её наружу. Так называемый «туннель» для стилизации.
Подсказки
Скопировано💡 Работает только если оба компонента используют Shadow DOM. Без него exportparts
не нужен.
💡 Если не указать exportparts
, то part из внутреннего компонента не будет виден снаружи — даже если задать :
.
💡 Можно не задавать псевдоним: exportparts
— тогда наружу пробрасывается то же имя part
.
💡 Не работает с mode
, потому что нельзя прочитать part
без доступа к Shadow DOM.
- Chrome 73, поддерживается
- Edge 79, поддерживается
- Firefox 72, поддерживается
- Safari 13.1, поддерживается