Shadow DOM — technology для создания изолированного DOM-subtree внутри element. CSS из outer document не пробивается внутрь (исключая inheritable properties), а outside JS querySelector не видит shadow tree. Основа Web Components standard. Использование: YouTube Player, Google Docs, CodePen embeds, Shopify Polaris.
Ниже: подробности, пример, смежные термины, FAQ.
class MyCard extends HTMLElement {
constructor() {
super();
const shadow = this.attachShadow({ mode: 'open' });
shadow.innerHTML = `
<style>
p { color: red; } /* scoped */
</style>
<p><slot>Default</slot></p>
`;
}
}
customElements.define('my-card', MyCard);Shadow: same JS context, same origin, lightweight. iframe: full browsing context, heavyweight, cross-origin isolation. Shadow для widgets, iframe для third-party untrusted content.
Обычно нет (React virtual DOM достаточно). Но React web components wrapper может использовать. Material UI v6 опционально.
::part() для exposed parts, :host для host element, CSS custom properties наследуются. Tailwind через ::part — возможно.