# Shadow DOM web components: o que é e como usar

> O Shadow DOM é uma árvore DOM encapsulada anexada a um elemento do DOM principal, usada na construção de web components. O Shadow DOM isola estilos e marcação, impedindo que CSS externo interfira no conteúdo interno e vice-versa. Essa separação permite criar componentes reutilizáveis com escopo próprio, sendo acionado via attachShadow e a propriedade shadowRoot em JavaScript.

*Net Propaganda · Apps e Software · 15 de setembro de 2026 · Ptolomeu Rangel Sicupira*

Shadow DOM é uma árvore DOM encapsulada que se anexa a um elemento do DOM principal. Ela isola estilos e marcação, permitindo criar web components reutilizáveis sem que o CSS de fora interfira no de dentro.

Shadow DOM é uma árvore DOM encapsulada que se anexa a um elemento do DOM principal. Ela isola estilos e marcação, permitindo criar web components reutilizáveis sem que o CSS de fora interfira no de dentro. O ponto de entrada é o método attachShadow().

## O que é shadow DOM em web components?

Shadow DOM é uma API que permite criar uma subárvore DOM separada dentro de um elemento. Essa subárvore tem seu próprio escopo de estilos e não é acessível por seletores CSS externos. Na prática, você define um elemento e anexa um shadow root a ele. Todo o conteúdo dentro desse root fica protegido.

A ideia central é encapsulamento. Sem shadow DOM, um seletor global como div { color: red } afetaria qualquer div dentro do componente. Com shadow DOM, o estilo externo não atravessa a fronteira do shadow root.

## Como criar um shadow root na prática?

O processo tem três passos: criar um elemento, anexar o shadow root e preencher o conteúdo. Veja um exemplo mínimo:

const host = document.createElement('div'); const shadow = host.attachShadow({ mode: 'open' }); shadow.innerHTML = 'p { color: blue; }Olá, shadow DOM!'; document.body.appendChild(host);

O parâmetro mode aceita 'open' ou 'closed'. Com 'open', o shadow root é acessível via host.shadowRoot. Com 'closed', ele fica inacessível por essa propriedade. A maioria dos casos de uso adota 'open' para facilitar depuração.

## Por que o CSS não vaza para fora do shadow DOM?

O shadow DOM cria uma fronteira de estilo. Regras definidas fora do shadow root não afetam os elementos internos, e regras internas não afetam o resto da página. Isso resolve um problema clássico de componentes de terceiros: o estilo global quebrar o layout do widget.

Existem exceções. Propriedades herdáveis como color e font-family ainda passam pela fronteira. Para controle total, use :host e variáveis CSS customizadas.

## Shadow DOM e custom elements andam juntos?

Sim. Custom elements definem a tag personalizada, e o shadow DOM define o que ela renderiza internamente. A combinação dos dois, mais templates HTML, forma a base dos web components nativos. Frameworks como Lit encapsulam essa lógica, mas o funcionamento por baixo é o mesmo.

## Resumo rápido

Shadow DOM isola marcação e estilo dentro de um componente. Use attachShadow() para criar o root, mode: 'open' para depurar com facilidade, e :host para estilizar o próprio componente a partir de fora.

## FAQ

### O shadow DOM substitui o DOM normal?

Não. O shadow DOM é anexado a um elemento do DOM principal, chamado host. Os dois coexistem. O DOM principal continua acessível por JavaScript e CSS, enquanto o shadow root fica isolado.

### Qual a diferença entre shadow DOM aberto e fechado?

No modo aberto, o shadow root é acessível via element.shadowRoot. No modo fechado, essa propriedade retorna null. O modo fechado dificulta inspeção e testes, por isso o aberto é mais comum.

### Posso usar shadow DOM fora de web components?

Sim. Você pode anexar um shadow root a qualquer elemento HTML, como uma div. Web components são o caso de uso mais frequente, mas não o único.

### Como estilizar elementos dentro do shadow DOM?

Use a tag dentro do próprio shadow root ou adote adoptedStyleSheets. Seletores externos não alcançam o interior, exceto propriedades herdáveis e variáveis CSS.

### O shadow DOM afeta a acessibilidade?

O conteúdo dentro do shadow root é acessível a leitores de tela quando o host tem o papel semântico adequado. Evite usar shadow DOM para esconder conteúdo que deveria ser lido por tecnologias assistivas.

---

Fonte (canonical): https://netpropaganda.com.br/apps-e-software/shadow-dom-web-components-o-que-e-e-como-usar/
