# Sass ![Sass](https://openwebsolutions.in/blog/wp-content/uploads/2017/11/sass-banner-1024x497.jpg) ## ¿Qué es Sass? _Sass_ es un preprocesador que te permite usar funciones que aún no existen en _CSS_, como variables, anidamiento, mixins, herencia y otras ingeniosas ventajas. ## Temario 1. Variables 2. Anidamiento (Nesting) 3. Módulos 4. Mixins 5. Herencia 6. Operadores 7. Compilar Sass # Variables En _Sass_ se pueden crear variables para ser utilizadas en diversas líneas, selectores y propiedades dentro del archivo _Sass_. Para crear una variable en _Sass_ debe declararse con la ayuda del símbolo `$`. A continuación un ejemplo: ``` $primary-color: #061539 $title-font: 'Berkshire Swash', cursive nav background-color: $primary-color font-family: $title-font ``` En el ejemplo anterior, a diferencia de _CSS_ en _Sass_ se omiten los `;` además, en los selectores se omiten las llaves `{}` para encapsular el código _CSS_. En lugar de `{}` se utiliza la identación para asociar las líneas de código _Sass_ a un selector. ## Mapping Por otra parte, es posible realizar un mapeo de variables para definir una serie de variables asociadas. Por ejemplo, podemos realizar una variable de mapeo para los colores a utilizar en nuestra aplicación: ``` $colors: ( primary: #001b2c, secondary: #103753, accent: #0978b4 ) nav background-color: map-get($colors, primary) color: map-get($colors, secondary) ``` En el ejemplo anterior, declaramos una variable `$colors` de tipo map con 3 colores, posteriormente en el selector _nav_ accedimos a la propiedad _primary_ y _secondary_ de la variable colors, con la ayuda de la palabra reservada `map-get` que recibe como primer parámetro el nombre de la variable y como segundo parámetro el nombre de la propiedad. # Anidamiento (Nesting) Otra de las ventajas de _Sass_ es la posibilidad de anidar selectores en el código. Lo anterior supone una ventaja más visual, ya que en muchas ocasiones se cuenta con elementos _HTML_ que contienen etiquetas hijo, es en esos casos donde podemos utilizar el anidamiento de selectores. Aquí un ejemplo: ``` ul li background-color: $primary-color color: $theme-color font-size: 1em a text-decoration: underline color: $secondary-color ``` # Módulos (Modules) Con _Sass_ es posible partir el código entre diversos archivos, para después unirlo en un solo archivo, para ello, se usan los módulos, con modulos es posible insertar el código _Sass_ de un archivo dentro de otro con el uso de la palabra reservada `@use` seguido del nombre del archivo. Aquí un ejemplo: ``` //cards.sass $primary-color: #D432A2 $theme-color: white .card border-radious: 5px background-color: $primary-color color: $theme-color //styles.sass @use 'cards' ul border-color: cards.$primary-color color: black ``` En el ejemplo anterior, se tienen dos archivos _Sass_ diferentes, el primero contiene dos variables y el código del selector correspondiente a la clase `.card`. Por otra parte, se tiene otro archivo en el cual se inserta el código del primer archivo con la ayuda de la palabra reservada `@use`. Dentro del segundo archivo, se utiliza la variable declarada en el primer archivo dentro del código de _ul_ en la parte del _border-color_ se hace referencia a la variable _primary-color_. # Mixins En algunas ocasiones algunos con _CSS_ nos vemos forzados a declarar líneas de código para especificar atributos para diferentes navegadores. Con _Sass_ existe la posibilidad de realizar una especie de función la cual recibe parámetros y dentro de ella se realizan acciones en _Sass_. Por ejemplo: ``` =transform($property) -webkit-transform: $property -ms-transform: $property transform: $property .box +transform(rotate(30deg)) ``` # Herencia (Extend/Inheritance) _Sass_ provee la posibilidad de utilizar el concepto de Programación Orientada a Objetos como lo es la herencia. Es decir, puedes agregar código _Sass_ de un selector dentro de otro selector. Aquí un ejemplo: ``` %message-shared border: 1px solid #ccc padding: 10px color: #333 .message @extend %message-shared .success @extend %message-shared border-color: green .error @extend %message-shared border-color: red .warning @extend %message-shared border-color: yellow ``` En el ejemplo anterior, se creo una _placeholder class_ con la ayuda del símbolo `%`, las _placeholder class_ sirven como modelo referencia para replicar el código en diferentes clases de _Sass_. Con la palabra reservada `@extend` se indica que un selector recibe como herencia el código de la _placeholder class_. # Operadores (Operators) _Sass_ nos da la posibilidad de trabajar con operadores matemáticos para efectuar cálculos matemáticos como la suma, resta, multiplicación o división. En _CSS_ se puede asociar medidas de tamaño para el _heigh_ o _width_ con pixeles (_px_) o porcentajes (_%_). Con la ayuda de operadores podemos realizar calculos con base en medidas preestablecidas. Aquí un ejemplo: ``` nav width: 450px / 200px * 100% ``` # Compilar Sass Como mencionamos al principio _Sass_ es un precompilador de código _CSS_, es decir, al final el código _Sass_ se convertirá a código _CSS_. Para ello, es necesario compilar el código _Sass_ con la ayuda de su compilador asociado. Para acceder al compilador es necesario instalar el compilador, puedes realizarlo mediante _npm_ con el comando: `npm install -g sass` Posteriormente, una vez que se instale el compilador _Sass_ podemos compilar el código _Sass_ con el comando: `sass <nobreDelArchivoSass.sass> <nombreDelArchivoCSS.css>`