4. SASS Avanzado

Veamos ahora funcionalidades mas avanzadas de SASS

Mas información

Enlaces con mas información de SASS:

Sass Guidelines

Sass: @mixin and @include

Sass: @function

Sass control directives: @if, @for, @each and @while

Sass: @if and @else

Sass: @for

sass: @each with maps

Curso de SASS:

Preprocesadores de CSS

Mixings

Son como trozos de código CSS que puedes añadir en otra clase CSS. Es como llamar a una "función" pero con CSS. Son muy útiles para evitar repetir código CSS.

se transforma en

Funciones

En SASS también existen funciones "normales" que calculan un valor.

se transforma en

Arrays

Veamos ahora como usar los arrays

Para acceder a un elemento de un array se usa la función nth. El índice empieza por 1 y no por cero.

Para obtener el tamaño de un array se usa la función length:

Mapas

Veamos ahora las funciones de maps

Para acceder a un elemento de un map se usa la función map-get:

Para obtener las claves de un map.:

Se obtiene un array los valores a y b.

Bucle @for to

Se usa para hacer un bucle desde 0 a n-1

Bucle con índice.

se transforma en

Bucle @for through

Se usa para hacer un bucle desde 1 hasta n

Bucle con índice.

se transforma en

Bucle @each de un array

Recorre los elementos de una lista

Bucle @each de un Map

Para recorrer un map la forma más sencilla es la siguiente:

Condicional @if

se transforma en

Funciones de Color

Ya existen una serie de funciones predefinidas en SASS: Sass Color Functions

Entre las mas útiles están:

lighten: Incrementa la luminosidad de un color

darken: Decrementa la luminosidad de un color

saturate: Incrementa la saturación de un color

desaturate: Decrementa la saturación de un color

se transforma en

Variables CSS

En CSS existen las variables. La ventaja de las variables CSS vs las de SASS son:

Se pueden cambiar en tiempo de ejecución desde JavaScript

Pueden existir a nivel local dentro de los selectores.

Veamos como funcionan.

Los nombres de las variables debe empezar por -- Para usar las variables en CSS se usa var(--nombre-variable)

Las variables de CSS se crean así:

Desde CSS se usan así.

Se puede definir un valor por defecto como segundo parámetro

Esto permite que podamos crear más valores por defecto con el siguiente truco de forma que si no está una variable, usemos otra y sino otra ,etc.: Es este caso el background-color se usa la variable --color-alternativo-5 pero si no existe esa variable se usaría la variable --color-alternativo pero si esa tampoco existe se usará #FF0000

Desde JavaScript se modifican así:

Desde JavaScript se leen así:

Creación de variables

A lo largo del curso hemos visto que debemos limitar nuestras opciones a usar serie de valores. Ahora esa serie de valores deben ser variables.

Que generá en CSS

Esa variables se usarán siempre tanto en los componentes , como layouts, como globales.

El usar variable nos lleva a tener muchísimas variables en CSS lo que nos puede llevar a pensar si eso afectará al rendimiento. En el documento CSS Variables performance benchmark 2021 nos indica que no afecta prácticamente nada al rendimiento.

Algunas de las variables de colores en la página principal de google, ¿te suena de algo?:

Ejemplo de menu lateral

Bootstrap

En el siguiente artículo Utility API, vemos como Boostrap ha creado algo muy similar a lo que estamos haciendo en clase.

Ejercicios

Ejercicio 1

Crea los globales de forma que retorne cada una de los sombreados. Sabiendo que las claves empiezan en 1 y hay otra que será none.

Crea las variables CSS correspondientes.

Crea el mixing box-shadow($key). Usará las funciones que has creado antes y de forma que tenga las propiedades css de:

-webkit-box-shadow

-moz-box-shadow

box-shadow

Ejercicio 2

Haz una función llamada getFontSize($index) para ayudar a generar tamaños de fuentes. Siendo el parámetro $index un número entero.

Calcula el tamaño de la fuente con la siguiente fórmula:

index}*16 $$

La función retornará el tamaño de la fuente en base al parámetro $index. Este función tiene 2 números mágicos. El 16 es el tamaño base de la fuente. Es decir cuando vale 0. Y el 1,2 es la tasa de crecimiento. Cuando mayor sea ese número mas rápidamente se hacen grandes los tamaños de fuentes. Una página que hace estos mismos cálculos es Modularscale.

Para hacer los cálculos de potencias en SASS puedes consultar el siguiente artículo: SASS Power Function

Haz que usando la función getFontSize($tamanyo) y un bucle se generen automáticamente las siguientes clases CSS:

Ejercicio 3

Crea los globales y las variable CSS de los siguientes colores:

Ejercicio 4

Modifica la clase c-button del tema 1 para que ahora haga uso de variables CSS en los paddings, etc.

Ejercicio 5

Dado la siguiente variable de SASS llamada $utilities$

Que crea un programa en SASS para que genere el siguiente CSS:

Usa siempre que puedas funciones de SASS

Ejercicio 6

Sabiendo que ya tienes los botones del tema 1.

Vamos ahora a hacer el componente c-dialog.

Crea 3 mixing para reusar el CSS de c-button y c-dialog__close:

button-border

button-background

button-text