Part y exportparts para aplicar estilos externos
Exponga partes del Shadow DOM al CSS externo con part y exportparts
Part y exportparts para aplicar estilos externos es una lección gratuita de HTML Academy en CoddyKit. Esta es la lección 4 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.
El compromiso de la encapsulación
La estricta encapsulación de estilos de Shadow DOM impide que los consumidores vuelvan a aplicar estilos a elementos individuales dentro de un componente. Las variables CSS funcionan para propiedades globales, pero, por ejemplo, no puede asignar un border-radius personalizado al botón interno "close". Para eso sirven los parts.
El atributo part
Marque un elemento interno del shadow con part="name". Los consumidores podrán seleccionarlo mediante el pseudoelemento ::part(name): my-dialog::part(close-button) { color: red; }. El elemento con nombre se convierte en un punto de extensión para aplicar estilos, mientras el resto del shadow permanece encapsulado.
// Shadow tree:
<button part="close-button">×</button>
// Page CSS:
my-dialog::part(close-button) {
color: red;
border-radius: 50%;
}Varios parts en un elemento
Separe los nombres con espacios para exponer un elemento como varios parts: part="button primary". ::part(button) lo selecciona de forma genérica, mientras que ::part(primary) lo selecciona como un elemento de estilo principal. Cada nombre se compara de forma independiente.
Limitaciones de ::part
::part solo permite determinadas pseudoclases (:hover, :focus, :disabled), no combinadores de descendientes ni selecciones estructurales adicionales. ::part(card) p no es válido; no puede acceder al interior de un part mediante selectores de descendientes.
exportparts reenvía los parts
Cuando un elemento personalizado anida otro elemento personalizado dentro de su propio shadow, los parts del elemento interno normalmente no se exponen a la página exterior. El atributo exportparts="close-button" del elemento anidado reenvía esos parts al host exterior.
// Outer shadow:
<inner-element exportparts="close-button"></inner-element>
// Page:
outer-element::part(close-button) { color: red; }Cambio de nombre al exportar
exportparts="close-button: dismiss" exporta el part interno con un nombre nuevo en el elemento exterior. Esto permite que el componente exterior ofrezca una interfaz de nombres clara, independientemente de los elementos internos que componga.
parts frente a propiedades personalizadas de CSS
Las propiedades personalizadas exponen valores (colores, espaciado y fuentes). Los parts exponen elementos (toda la superficie CSS: bordes, transformaciones y animaciones). Use propiedades personalizadas para los tokens globales y parts para personalizaciones puntuales a nivel de elemento. Ambos pueden coexistir en el mismo componente.
Patrón de tematización
Una práctica habitual en los sistemas de diseño consiste en exponer una pequeña superficie de parts para los elementos que más se personalizan (botones, encabezados e indicadores), además de un conjunto amplio de propiedades personalizadas para el color, el espaciado y la tipografía. Los consumidores pueden tematizar el componente a nivel de valor o de elemento, según sus necesidades.
Estabilidad de los nombres de part
Los nombres de part pasan a formar parte de la API pública del componente; cambiarlos rompe el CSS de los consumidores. Elija nombres que describan el papel del elemento ("close-button", "header", "track") en lugar de su posición ("first-button"), para que la API siga siendo significativa a medida que evoluciona la implementación.
Recomendaciones de documentación
Enumere todos los parts disponibles (y los parts exportados) en el readme del componente. Sin documentación, los consumidores deben inspeccionar el DOM para descubrir los parts, lo que los acopla a lo que encuentren en ese momento. Trate la lista de parts como la lista de props de un componente de un framework.
Compatibilidad de navegadores
::part y exportparts están disponibles en todos los navegadores modernos. Incluso las versiones antiguas de Safari ya son compatibles con ::part. Úselos sin problemas; para navegadores muy antiguos (en su mayoría obsoletos), recurra a propiedades personalizadas de CSS adicionales como alternativa.
Comprobación de conocimientos
¿Qué hace el atributo exportparts?
Resumen
El atributo part expone elementos shadow individuales para aplicarles estilos externamente mediante ::part(name), con toda la potencia de CSS sin romper la encapsulación. exportparts reenvía los parts de elementos personalizados anidados al host exterior y permite cambiarles el nombre. Combine parts con propiedades personalizadas de CSS para obtener una superficie de tematización completa y documente la lista de parts como parte de la API del componente.
Aprende HTML con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 40
- Lecciones
- 159
Preguntas frecuentes
¿La lección «Part y exportparts para aplicar estilos externos» es gratis?
Sí — el texto completo de «Part y exportparts para aplicar estilos externos» 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 «Part y exportparts para aplicar estilos externos»?
Exponga partes del Shadow DOM al CSS externo con part y exportparts 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 4 de 4.
¿Cuánto tiempo toma la lección «Part y exportparts para aplicar estilos externos»?
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
- attachShadow y Shadow Root
- Elementos slot para distribuir contenido
- Estilos con ámbito dentro del Shadow DOM
- Part y exportparts para aplicar estilos externos