DOM de sombra declarativo
Anexe o DOM de sombra a partir do HTML sem JavaScript usando shadowrootmode.
DOM de sombra declarativo é uma aula grátis de HTML Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de HTML Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de HTML Academy inclui 4 aulas no total.
O Problema que Ele Resolve
O DOM de sombra tradicional é criado por meio de JavaScript (attachShadow). Em páginas renderizadas no servidor, isso significa que a árvore de sombra fica vazia até a execução de JS — o que derrota o objetivo do SSR de entregar HTML completo no primeiro byte. O DOM de sombra declarativo resolve esse problema.
O Atributo do Modo da Sombra
Um <template> com shadowrootmode="open" declara uma raiz de sombra no HTML durante a análise. O navegador anexa automaticamente a raiz de sombra ao elemento pai; o conteúdo do modelo se torna a árvore de sombra. Nenhum JavaScript é necessário.
<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 com Componentes Web
O DOM de sombra declarativo permite componentes web realmente renderizados no servidor: o servidor emite a árvore de sombra completa em linha, o navegador a analisa e anexa antes da execução de qualquer JS, e o JS de hidratação pode assumir o controle a partir de uma base totalmente renderizada. Em igualdade com o SSR de estruturas.
Modo: aberto ou fechado
Os mesmos modos de attachShadow imperativo: shadowrootmode="open" expõe a sombra como element.shadowRoot; shadowrootmode="closed" a oculta. O comportamento é idêntico ao da contraparte anexada por JavaScript.
Analisado uma Vez por Elemento
O navegador anexa a raiz de sombra na primeira vez que encontra o <template shadowrootmode>. Depois de anexado, o modelo é consumido — consultá-lo posteriormente não retorna nada. Isso corresponde ao ciclo de vida de attachShadow: uma sombra existe durante toda a vida do elemento.
Os Pontos de Inserção Funcionam Normalmente
Os filhos externos, como o <p> fora do <template> no exemplo, são projetados nos elementos <slot> dentro da árvore de sombra, assim como no DOM de sombra imperativo. A composição é idêntica; apenas o mecanismo de anexação é diferente.
Combinando com Elementos Personalizados
Se <my-card> for um elemento personalizado registrado, o processo de atualização aproveita a raiz de sombra já anexada, em vez de chamar attachShadow novamente. A classe do elemento personalizado pode ler this.shadowRoot em seu connectedCallback sem precisar criá-la.
Suporte a Ferramentas no Servidor
O Lit-html, os componentes do Astro e várias outras estruturas agora emitem DOM de sombra declarativo como parte de sua saída de SSR. Criar sua própria solução é viável: qualquer sistema de modelos baseado em strings pode escrever o modelo com shadowrootmode.
Suporte dos Navegadores
O DOM de sombra declarativo está disponível no Chrome, Edge, Safari e Firefox. Navegadores mais antigos ignoram o elemento <template> silenciosamente — o conteúdo dentro do modelo fica invisível, o que proporciona uma degradação adequada em ambientes sem suporte.
Estratégia de Compatibilidade
Para obter suporte mais amplo, um pequeno script pode percorrer o DOM e converter modelos com o atributo de modo da sombra em raízes de sombra reais. Execute-o antes de registrar qualquer elemento personalizado, para garantir que as atualizações posteriores dos componentes encontrem a árvore de sombra esperada.
Contrapartidas
O DOM de sombra declarativo duplica a estrutura: o conteúdo de <template> permanece no HTML, embora também esteja incorporado à classe do componente. Em páginas com muitos componentes iguais, isso aumenta a carga transferida. Estruturas deduplicam esse conteúdo; soluções de SSR feitas manualmente talvez queiram fazer o mesmo.
Quando Adotar
Se você distribui componentes web e se preocupa com a renderização no primeiro byte ou com SEO, adote-o agora. O recurso é estável, tem suporte e melhora drasticamente a experiência de SSR para aplicações baseadas em componentes web. Em aplicações que não usam DOM de sombra, ele não se aplica.
Verificação de Conhecimento
Que problema o DOM de sombra declarativo resolve em comparação com attachShadow imperativo?
Resumo
O DOM de sombra declarativo usa <template shadowrootmode="open"> dentro de um elemento personalizado para anexar uma raiz de sombra durante a análise, sem necessidade de JS. Ele possibilita SSR real para componentes web: a árvore de sombra, os estilos com escopo e os pontos de inserção funcionam antes da hidratação. Há suporte em todos os navegadores modernos; existe uma solução de compatibilidade para os mais antigos. Estruturas como Lit e Astro o emitem automaticamente.
Perguntas Frequentes
A aula “DOM de sombra declarativo” é grátis?
Sim — o texto completo de “DOM de sombra declarativo” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de HTML Academy, atualize para CoddyKit PRO. O curso de HTML Academy inclui 4 aulas no total.
O que vou aprender em “DOM de sombra declarativo”?
Anexe o DOM de sombra a partir do HTML sem JavaScript usando shadowrootmode. Você pratica HTML Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar HTML Academy?
Nenhuma experiência prévia é necessária. HTML Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “DOM de sombra declarativo”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de HTML Academy?
Sim. Cada aula de HTML Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- DOM de sombra declarativo
- A API Popover
- O elemento selectlist
- Invocadores de interesse e atributo Command