0Pricing
HTML Academy · Lección

Estilos con ámbito dentro del Shadow DOM

Escriba CSS que solo afecte a los elementos del árbol shadow

Estilos con ámbito dentro del Shadow DOM es una lección gratuita de HTML Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de HTML Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de HTML Academy incluye 4 lecciones en total.

Encapsulación de CSS predeterminada

Todas las reglas de <style> dentro de una raíz shadow se aplican únicamente dentro de esa raíz. p { color: red } en un árbol shadow colorea solo los párrafos de ese shadow; los párrafos del documento principal no se ven afectados y los estilos del documento principal no llegan al interior del shadow.

Por qué importa la encapsulación

La encapsulación elimina el problema del CSS global que ha afectado a las aplicaciones grandes durante décadas. Los estilos de un componente no pueden ser sobrescritos accidentalmente por el CSS del sitio, y el componente tampoco puede romper el sitio por accidente. El límite lo establece la especificación, no una convención.

La pseudoclase :host

Desde dentro del shadow, aplique estilos al elemento host mediante :host. Use :host(selector) para limitarlo según un selector: :host([open]) { display: block; } coincide con el host únicamente cuando está presente el atributo open.

Las propiedades heredadas siguen atravesando el límite

Las propiedades CSS heredadas (color, font-family, line-height) siguen atravesando el límite del shadow mediante la herencia. Si el documento establece body { color: blue }, el texto del shadow también se vuelve azul, a menos que el shadow lo sobrescriba explícitamente. Esto es una ventaja: los valores predeterminados de tipografía siguen siendo coherentes.

Las propiedades personalizadas de CSS atraviesan el límite

Las propiedades personalizadas (variables CSS) se heredan a través de las raíces shadow, por lo que son la forma estándar de exponer la API de tematización de un componente: declare --card-bg: var(--surface, white) dentro del shadow y permita que los consumidores sobrescriban --surface en el host.

/* Shadow */
:host {
  background: var(--card-bg, white);
}
/* Page */
my-card {
  --card-bg: #f3f4f6;
}

::part para estilos externos

Marque un elemento interno del shadow con part="name" y los consumidores podrán aplicarle estilos mediante my-card::part(name) { ... }. Use parts como puntos de extensión para aplicar estilos individuales, manteniendo encapsulada la mayor parte del árbol shadow.

Hojas de estilo adoptadas

shadowRoot.adoptedStyleSheets = [sheet] comparte una misma CSSStyleSheet entre varias raíces shadow, evitando analizar repetidamente las etiquetas <style>. Cree las hojas con new CSSStyleSheet() y sheet.replaceSync(cssText). Esto mejora mucho el rendimiento en los sistemas de diseño.

Orden de las declaraciones

Coloque las etiquetas <style> al principio de innerHTML del shadow para que los estilos se analicen antes de construir el resto del DOM. Así evita el breve destello de contenido sin estilos que se produce cuando los estilos llegan tarde en el orden de análisis.

:host-context para reglas basadas en ancestros

:host-context(.dark-mode) :host aplica estilos al host según un selector de ancestro situado fuera del shadow. Es útil para tematizar componentes según una clase presente en un contenedor de nivel superior. La compatibilidad de los navegadores es buena, pero verifíquela en la matriz de destinos.

El restablecimiento global permanece fuera

Los restablecimientos CSS de todo el documento (márgenes en body, box-sizing) no afectan a los árboles shadow. Vuelva a aplicar los restablecimientos necesarios dentro de cada raíz shadow o compártalos mediante una hoja de estilos construida y adoptada en cada componente.

Depuración de estilos de Shadow DOM

Chrome DevTools muestra las raíces shadow en el panel Elements bajo "#shadow-root (open)". Puede inspeccionar, editar y activar o desactivar los estilos shadow como cualquier otro CSS, incluidas la pseudoclase :host y las reglas ::part.

Comprobación de conocimientos

¿Por qué las propiedades personalizadas de CSS (variables) son la forma preferida de tematizar un componente de Shadow DOM?

Resumen

Shadow DOM encapsula los estilos en ambas direcciones. Aplique estilos al host con :host, exponga puntos de extensión para la tematización mediante propiedades personalizadas de CSS heredadas, exponga elementos individuales para aplicarles estilos con ::part, comparta hojas de estilo mediante adoptedStyleSheets y vuelva a aplicar los restablecimientos dentro de cada raíz shadow, ya que el CSS de todo el documento no atraviesa el límite.

Preguntas frecuentes

¿La lección «Estilos con ámbito dentro del Shadow DOM» es gratis?

Sí — el texto completo de «Estilos con ámbito dentro del Shadow DOM» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de HTML Academy, actualiza a CoddyKit PRO. El curso de HTML Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Estilos con ámbito dentro del Shadow DOM»?

Escriba CSS que solo afecte a los elementos del árbol shadow Practicas HTML Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar HTML Academy?

No se requiere experiencia previa. HTML Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Estilos con ámbito dentro del Shadow DOM»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de HTML Academy?

Sí. Cada lección de HTML Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. attachShadow y Shadow Root
  2. Elementos slot para distribuir contenido
  3. Estilos con ámbito dentro del Shadow DOM
  4. Part y exportparts para aplicar estilos externos
← Volver a HTML Academy