Las Variables en CSS
Uso de Variables en CSS: Custom Properties
En las versiones más recientes de CSS se ha incorporado una funcionalidad muy útil: las propiedades personalizadas, comúnmente conocidas como variables CSS. Esta capacidad no estaba presente en las primeras versiones del lenguaje, lo que llevó al auge de preprocesadores como Sass o LESS, que ofrecían esta funcionalidad desde sus inicios.
¿Qué son las CSS Custom Properties?
Aunque las llamamos variables, en realidad su nombre técnico es propiedades personalizadas (custom properties). Funcionan de forma similar a las variables en programación, pero con ciertas particularidades. Su objetivo es asignar valores reutilizables a las propiedades CSS, lo que mejora la legibilidad, reduce repeticiones y facilita el mantenimiento del código.
Cómo se definen las variables CSS
Para declarar una propiedad personalizada se utiliza el prefijo --
seguido del nombre elegido. Normalmente, estas variables se definen dentro del selector :root
, que apunta al elemento <html>
, y de esta forma se comportan como variables globales accesibles desde cualquier parte del documento.
cssCopiarEditar:root {
--background-color: black;
}
Usar :root
en lugar de html
proporciona mayor especificidad, lo que puede influir en la cascada de estilos. Por convención, se agrupan las variables al principio del archivo CSS, separadas del resto de reglas, para facilitar su ubicación y gestión.
Cómo utilizar variables con var()
Para aplicar una propiedad personalizada en una regla CSS, se emplea la función var()
:
cssCopiarEditar:root {
--background-color: indigo;
}
body {
background: var(--background-color);
}
En este ejemplo, el valor de fondo se obtiene directamente de la variable --background-color
definida en :root
. Al estar declarada globalmente, se puede reutilizar en cualquier parte del documento.
Uso de valores por defecto (fallback)
La función var()
permite establecer un valor alternativo por si la variable no ha sido definida:
cssCopiarEditarbody {
background: var(--main-color, green);
}
En este caso, si --main-color
no existe, se aplicará el color de fondo verde. También es posible utilizar otra variable como valor por defecto.
Ámbito o scope de las variables CSS
Las propiedades personalizadas pueden tener un ámbito local si se declaran dentro de un selector específico. Esto significa que su valor será accesible únicamente dentro de ese contexto.
cssCopiarEditar.parent {
--background-color: black;
}
.child {
background-color: var(--background-color);
}
.first {
--background-color: gold;
}
En este ejemplo:
.parent
define la variable localmente..child
la usa, heredando el valor de su padre..first
redefine la variable sólo para sí misma.
Esto permite una gran flexibilidad al estructurar temas o componentes reutilizables.
Ejemplo práctico de reutilización
htmlCopiarEditar<div class="card theme-love">
<div class="frame">
<h2>ManzDev</h2>
<img src="manzdev-love.gif" alt="ManzDev">
</div>
</div>
cssCopiarEditar.theme-love {
--primary-color: pink;
}
.card {
background-color: var(--primary-color);
}
La clase theme-love
define un color primario que luego es aplicado dentro de la tarjeta .card
, permitiendo fácilmente cambiar estilos visuales desde un único punto.
Diferencias frente a variables Sass o LESS
A diferencia de Sass o LESS, las variables CSS no se procesan previamente. Funcionan directamente en el navegador en tiempo real, lo que permite modificar su valor dinámicamente con JavaScript. Las variables de Sass, en cambio, se resuelven antes de que el navegador cargue el CSS, en una fase llamada preprocesamiento:
scssCopiarEditar// Sass
$color: #fff;
.parent {
background: $color;
}
En este caso, $color
se reemplaza por su valor antes de que llegue al navegador, por lo que no es modificable desde el lado del cliente.
Modificar variables CSS con JavaScript
Una de las ventajas de las custom properties es que pueden actualizarse dinámicamente desde JavaScript usando setProperty()
:
jsCopiarEditardocument.documentElement.style.setProperty('--background-color', 'blue');
Esto las convierte en una herramienta poderosa para temas dinámicos, configuraciones personalizadas y diseño reactivo.