¿Cómo gestionar estilos en componentes web reutilizables?
¿Alguna vez has deseado crear componentes web completamente reutilizables, incluso en términos de estilo? La clave está en manipular estilos internos desde el exterior del componente. Aunque parece una contradicción con el funcionamiento de Shadow DOM, donde se espera que los estilos internos no interactúen con los globales, las propiedades personalizadas de CSS (o variables) proporcionan la solución perfecta. Al definir estas variables en el componente, y permitir su manipulación externa, transformamos un bloque estático en uno dinámico y adaptable a diversos proyectos.
¿Qué son las propiedades personalizadas de CSS?
Las propiedades personalizadas, comúnmente conocidas como variables CSS, son definiciones que permiten asignar valores constantes o dinámicos a propiedades de estilo. Estas variables se definen dentro de una pseudo-clase llamada :root en el ámbito global o dentro de un host para componentes específicos, y su uso es sencillo. Aquí está la estructura básica:
/* Definición global de variables CSS */:root{--primary-color:tomato;--secondary-color:salmon;--heading-primary:30px;--heading-secondary:25px;}
En un contexto de componentes web, podemos implementar estas variables dentro del host del componente.
¿Cómo se integran las variables CSS dentro de un componente web?
El primer paso es definir las variables dentro del host de nuestro componente, que actuaría como el :root en un entorno global. Esto asegura que los estilos internos puedan ser redefinidos desde afuera cuando el componente se inserte en un proyecto específico.
/* Definición de variables en el host del componente */:host{--primary-color:tomato;--secondary-color:salmon;--heading-primary:30px;--heading-secondary:25px;}
Posteriormente, se aplican estas variables en diversas partes del componente:
Esto redefine el color de fondo y el tamaño de fuente del componente my-element sin modificar el código interno del componente. Así podemos asegurar que un mismo componente tenga diversas apariencias en distintos contextos.
¿Es posible personalizar múltiples instancias del mismo componente?
Sí, definitivamente. Utilizando clases únicas para cada instancia del componente, cada uno puede adoptar un estilo diferenciado:
¿Por qué es crucial crear componentes verdaderamente reutilizables?
Incorporar la capacidad de manipular estilos desde afuera no solo fomenta la reutilización, sino que también facilita la adaptabilidad a diversos proyectos. Los componentes verdaderamente reutilizables optimizan el flujo de trabajo y mantienen una consistencia estilística sin necesidad de recurrir a la reescritura del código.
A medida que desarrollamos nuestros componentes, debemos recordar siempre el objetivo de fomentar su reusabilidad y adaptabilidad. Los componentes deben ser como piezas de LEGO: independientes, pero integrables en cualquier conjunto con mínimos ajustes. Esto no solo beneficia a tu proyecto actual, sino que también facilita su reutilización en futuras iniciativas.
¡Sigue explorando el fascinante mundo de los componentes web y potencia tus habilidades para crear soluciones más flexibles y efectivas!
MY NOTES FOR CUSTOM PROPIERTIES :D
.
Como se ha comentado en anteriores clases generar un componente reutilizable implica que no tenemos que ir hasta el código de este y cambiarlo, entonces lo que haremos es re asignar nuestros estilos por fuera.
Con shadow dom esta idea que se plantea de poder cambiar nuestros estilos por fuera no es posible, pero esto en cierto punto es mentira ya que podremos hacerlo atraves de las Custom Properties que son unas variables en donde las generamos y de valor estas tienen un estilo.
Lo que haremos es definir variables en nuestros host y luego agregárselas a nuestros elementos que estan dentro de los componentes para probarlas.
Luego para poderlas modificar desde fuera del codigo establecido en el componente, lo que hacemos es modificarlas desde nuestro css, seleccionando lo que queremos modificar y reasignando el valor de la variable.
Podremos utilizar como selector el componente y clases que le establezcamos al componente.
Gracias por los comentarios del código que has hecho a lo largo del curso.
Me dieron ganas de crear una libreria, estilo Bootstrap con componentes y estilos prehechos.
Dios!!! casi acabamos el curso y me doy cuenta de que dominando webComponents básicamente puedes hacer una microempresa de applicaciones web!!!
Solo necesitas crear tu sistemDesing, tu repositorio de componentes y desplegar!!!
Es asi como trabajan compañias como wix!!!
jajajaja literalmente, estoy igual que
Explicación de por qué se nuestros estilos con menor especificidad sobre escriben a los proporcionados en :host: Explicación detallada
ㅤ
En resumen los estilos declarados en el :host son considerados como estilos por defecto, como los que ya tiene el navegador que podemos sobre escribir con cualquier tipo de especificidad, pero si el :host del componente tiene algún estilo con !important no podrá ser sobre escrito.
ㅤ
CSS custom properties
Los nombres de las propiedades que tiene el prefijo --, como --ejemplo-nombre, representan las propiedades personalizadas que contienen un valor que puede ser usado en otras declaraciones usando la función var.
ㅤ
Las propiedades personalizadas tienen como alcance los elementos en los que se declaran y participan en la cascada: el valor de dicha propiedad personalizada es el de la declaración decidida por el algoritmo en cascada.
ㅤ
💡 Distingue mayúsculas y minúsculas
// Es recomendable declarar las propiedades personalizadas dentro de la pseudo-clase :hostgetStyles(){return` <style>
:host {
--primary-color: tomato;
--secondary-color: salmon;
--heading-primary: 30px;
--heading-secondary: 20px;
display: inline-block;
width: 100%;
min-width: 300px;
max-width: 450px;
}
section {
background-color: var(--primary-color);
}
section div {
background-color: var(--secondary-color);
}
h1 {
font-size: var(--heading-primary);
}
p {
font-size: var(--heading-secondary);
}
</style>
`;}
Después en el HTML o CSS podemos sobre escribir las propiedades personalizadas.
Le puse unos estilos adicionales a la etiqueta my-element, y que no necesariamente son variables definidas dentro del componente:
Mi duda es: Esto no es tema de conflicto de estilos css, porque entonces pareciera que las variables, si nos sirven, pero sin ellas también podemos manipular los estilos del componente desde afuera.
Saludos :)
Ésto si lo veo saludable para con los desarrolladores, es muy intuitivo que si ves una etiqueta, pues la puedas cambiar desde css
Si somos desarrolladores front-end, este concepto de los components es quizá el más poderosos que tendremos en lo que respecta a productividad.
¿Cómo puedo cambiar los estilos de una etiqueta, por ejemplo h3, h2, de un componente desde otro archivo CSS?
No entendí muy bien esa parte, ahí está usando variables, pero si tengo que modificar estos elementos también debería crear variables para el tamaño de fuente, el color de fuente, etc?
body { font-family:Arial,Helvetica, sans-serif;}my-element {--card-color: #ffd1d1;}my-element h3 {// esto no funcionacolor: red;}
Díganme si entendí ... ¿estamos creando compenentes base que después podrán estar disponibles para que alguien más las use como guste, modificando cosas que NO sean las que nosotros creamos en JS?
Tú lo has dicho así tal cual
Para los que seguimos las clases de la profa Teff, sabemos que ella ama el color: tomato; xD
este curso me está pareciendo muy bueno hasta el momento!!