La función `if` en SASS
Este artículo explica la función if en SASS.
Recorreremos todo, desde lo básico de la función if hasta técnicas avanzadas, paso a paso.
YouTube Video
La función if en SASS
La función if() es una función condicional simple proporcionada por SASS que devuelve uno de dos valores según una condición booleana. Es similar al operador ternario de JavaScript.
Sintaxis
La sintaxis es la siguiente:.
1// if(condition, trueValue, falseValue)- Si
conditiones verdadera, devuelvetrueValue; si es falsa, devuelvefalseValue.
Uso básico
Por ejemplo, puedes usar la función if() para cambiar los colores de fondo y de texto según si el tema es oscuro o claro.
Código de Ejemplo
1$theme: "dark";
2
3$background-color: if($theme == "dark", black, white);
4$text-color: if($theme == "dark", white, black);
5
6body {
7 background-color: $background-color;
8 color: $text-color;
9}- Si la variable
$themees"dark", el fondo se vuelve negro con texto blanco; si es"light", el fondo se vuelve blanco con texto negro.
El CSS generado
1body {
2 background-color: black;
3 color: white;
4}- Como la variable
$themees"dark", el fondo es negro con texto blanco.
Diferencias entre la sentencia @if y la función if()
Sass proporciona una sentencia @if y una función if() para la ramificación condicional, pero se usan con fines distintos.
Código de Ejemplo
1$theme: "dark";
2
3// `@if` statement: Compile-time branching (syntax level)
4$background-color: null;
5@if $theme == "dark" {
6 $background-color: black;
7} @else if $theme == "light" {
8 $background-color: white;
9} @else {
10 $background-color: gray;
11}
12
13// `if()` function: Returns a value (expression level)
14$text-color: if($theme == "dark", white, black);
15
16body {
17 background-color: $background-color;
18 color: $text-color;
19}- La sentencia
@ifcontrola qué código se genera en tiempo de compilación de Sass. - En cambio, la función
if()devuelve un valor y se usa para alternar valores dinámicamente dentro de las expresiones.
El CSS generado
1body {
2 background-color: black;
3 color: white;
4}- En este ejemplo, dado que
$themees"dark", se aplica un fondo negro y un color de texto blanco. - Las dos diferencias principales son que la sentencia
@ifcontrola la estructura y la funciónif()devuelve un valor.
Uso de funciones if anidadas
Cuando necesitas ramificaciones complejas, puedes anidar funciones if.
Código de Ejemplo
1$theme: "custom";
2$custom-color: blue;
3
4$background-color: if(
5 $theme == "dark",
6 black,
7 if(
8 $theme == "light",
9 white,
10 $custom-color
11 )
12);
13
14body {
15 background-color: $background-color;
16}- Si
$themees"dark", devuelve negro; si es"light", devuelve blanco; de lo contrario, devuelve el valor predeterminado ($custom-color).
El CSS generado
1body {
2 background-color: blue;
3}- Como la variable
$themeescustom, el color de fondo es azul.
Casos de uso prácticos
Cambio de tema
A continuación, un ejemplo que cambia los estilos del botón según el tema.
1$theme: "dark";
2
3.button {
4 background-color: if($theme == "dark", #333, #fff);
5 color: if($theme == "dark", #fff, #333);
6 border: 1px solid if($theme == "dark", #444, #ccc);
7}- Este código es un ejemplo condicional en SASS que cambia los colores de fondo, texto y borde de un botón según el valor de la variable
$theme. La funciónif()se usa para establecer dinámicamente estilos para temas claros y oscuros.
El CSS generado
1.button {
2 background-color: #333;
3 color: #fff;
4 border: 1px solid #444;
5}- Al cambiar el tema, puedes modificar de forma uniforme el diseño general.
Ejemplo avanzado: establecer dinámicamente el contraste de color
Veamos un ejemplo que establece automáticamente el color del texto según el color de fondo.
Código de Ejemplo
1@use "sass:color";
2
3$background-color: #000;
4
5$text-color: if(
6 color.channel($background-color, "lightness", $space: hsl) > 50%,
7 black,
8 white
9);
10
11body {
12 background-color: $background-color;
13 color: $text-color;
14}- La función
color.channel()se utiliza para obtener la luminosidad del color de fondo (lightness). Si ese valor es mayor que50%, se elige el negro; si es menor, se elige el blanco como color de texto, optimizando automáticamente el contraste con el fondo.
El CSS generado
1body {
2 background-color: #000;
3 color: white;
4}- Al usar la función
if(), puedes implementar estilos flexibles que tengan en cuenta la accesibilidad del diseño, como ajustar el contraste.
Combinación con @function
Usar la función if dentro de una @function permite un diseño de estilos aún más flexible.
Código de Ejemplo
1@function theme-color($theme, $type) {
2 @return if(
3 $theme == "dark",
4 if(
5 $type == "background",
6 black,
7 white
8 ),
9 if(
10 $type == "background",
11 white,
12 black
13 )
14 );
15}
16
17body {
18 background-color: theme-color("dark", "background");
19 color: theme-color("dark", "text");
20}- Este código muestra el uso de
if()dentro de una@functionpara devolver colores apropiados según el tema y el tipo de color. Esto permite un diseño de estilos coherente y reutilizable para cada tema.
El CSS generado
1body {
2 background-color: black;
3 color: white;
4}- Al crear y usar funciones auxiliares que aprovechan la función
if(), puedes mejorar la mantenibilidad de todo el proyecto.
Notas
-
La función
ifno se puede usar con valores dinámicos Debido a que CSS en sí es un lenguaje estático, la funciónifdetermina los valores en el momento en que SASS se compila. Para lógica condicional en tiempo de ejecución, necesitas usar JavaScript. -
Prioriza la legibilidad Dado que las funciones
ifanidadas pueden volverse complejas y perjudicar la legibilidad, puedes usar los@mixiny@functionde SASS según sea necesario para organizar tu código.
Conclusión
La función if de SASS es una herramienta potente que devuelve valores distintos según las condiciones. Es útil no solo para condicionales simples, sino también en muchos escenarios como el cambio de tema y la configuración dinámica de estilos. Sin embargo, al tratar con condiciones complejas, presta atención a la legibilidad y aprovecha @mixin y @function para mejorar la mantenibilidad.
Al dominar la función if, puedes lograr un diseño de estilos más eficiente y flexible.
Puedes seguir el artículo anterior utilizando Visual Studio Code en nuestro canal de YouTube. Por favor, también revisa nuestro canal de YouTube.