Sin importar el lenguaje de que hablemos, una variable es un valor guardado en memoria para su reutilización las veces que se requiera. Si bien las variables en SASS y CSS cumplen esta definición, el día de hoy te mostraré las diferencias que hay entre ambas.
Sintaxis y declaración
La primera y gran diferencia entre ambas variables es su sintaxis y declaración. Mientras que una variable de SASS se puede declarar en cualquier parte de nuestro archivo, las variables CSS deben estar encerradas en un bloque. Además de que en CSS se debe hacer uso de la función var()
para poder utilizar variables.
CSS
1body { 2 /* Declaración */ 3 --color: red; 4 5 /* Usando la variable */ 6 color: var(--color); 7} 8
SASS
1/* Declaración */ 2$color: red; 3 4body { 5 /* Usando la variable */ 6 color: $color; 7} 8
Scope
Mientras que SASS maneja un scope por bloque, las variables en CSS lo hacen por medio del DOM, ¿qué quiere decir esto? Que las variables SASS sólo pueden ser usadas desde el momento de su declaración en forma descendente en una misma estructura, mientras que las variables de CSS siguen la jerarquía del HTML. Veamos un ejemplo con la siguiente estructura:
HTML
1<p> 2 <a href="#">Hola, <span>Manuel</span></a> 3</p> 4
CSS
1p { 2 --color: blue; 3 --weight: bold; 4} 5 6a { 7 color: var(--color); 8} 9 10span { 11 font-weight: var(--weight); 12} 13
SASS
1p { 2 $color: blue; 3 $weight: bold; 4 5 a { 6 color: $color; 7 } 8 9 span { 10 font-weight: $bold; 11 } 12 13} 14
Interpolación
Una gran desventaja que tienen las variables CSS es que sólo sirven para almacenar valores, es decir que no hay forma de interpolar una variable, caso contrario en SASS, que no sólo podemos guardar valores, sino el dato que deseemos e interporlar la variable. El uso más frecuente de esto es el de poder crear selectores con variables. Ejemplo:
SASS
1$red: red; 2 3// Compila a .container.red 4.container.#{$red} { 5 color: $red; 6} 7
Operaciones
Para realizar operaciones aritmétcas en SASS se hace como en cualquier otro lenguaje, mientras que en CSS necesitamos la función calc()
CSS
1.container { 2 --height: 30px; 3 height: calc(var(--height) + 100px); 4} 5
SASS
1.container { 2 $height: 30px; 3 height: $height + 100px; 4} 5
El inconveniente con las variables de SASS es que se debe tener la misma unidad de médida o no tener ninguna entre los valores que se utilizarán para la operación, por lo que en ocasiones tendremos que usar la función calc()
y para esto es necesario interpolar la variable.
SASS
1.container { 2 $height: 30px; 3 height: calc(#{$height} + 2rem); 4} 5
Redefinir valor de variable
Un punto en contra a las variables de SASS es que no se pueden redifinir en ámbito de scope si su valor no es utilizado, mientras que las variables CSS sí pueden gracias a que se manejan por DOM
CSS
1/* Valor por defecto de la variable */ 2body { 3 --color: red; 4} 5 6/* Todos los div tendrán un color: red */ 7div { 8 color: var(--color); 9} 10 11/* Todos los div que tengan la clase green tendrán un color: green sin necesdad de asignar el valor a la propiedad */ 12div.green { 13 --color: green; 14} 15
SASS
1// Valor por defecto de la variable 2$color: red; 3 4// Todos los div tendrán un color: red 5div { 6 color: $red; 7} 8 9// El compilador de SASS ignorará este código porque la variable no se utiliza 10div.green { 11 $color: green; 12} 13 14// El valor de la variable debe ser utilizado para que se compile 15div.blue { 16 $color: blue; 17 color: $color; 18} 19
En caso de querer asignarle el valor de una variable SASS a una CSS, es necesario interpolar
1body { 2 $color: red; 3 --color : #{$color}; 4} 5
Compilación
Al final de cuenta SASS es un lenguaje que devulve CSS plano, por lo que al momento de compilar, todo respecto a SASS desparece, incluyendo las variables. Por otro lado, las variables en CSS están presentes en todo momento e inclusive se pueden acceder a ellas por JavaScript.
Conclusión
El objetivo de este artículo no es el de que utilices sólo un tipo de variables, sino el que conozcas ambos tipos de variables, sus ventajas, desvetajas y sepas emplearlas correctamente en las situaciones que lo ameriten.
Bonus
En EDteam contamos con un curso de Variables CSS totalmente gratuito donde aprenderás más al respecto del tema