DEV Community 👩‍💻👨‍💻

Javier Díaz Domínguez
Javier Díaz Domínguez

Posted on

💅🏼 De CSS a SASS

🚠 ¿Qué es SASS?

Es un lenguaje de hoja de estilos que se compila a CSS. Permite el uso de variables, mixin y funciones, entre otros. La clave de SASS es que permite hojas de estilo más organizadas y fácilmente reutilizables tanto en un proyecto como entre varios.

🧪 Configurando SASS en un entorno de prueba

La configuración de SASS no prodría ser más simple. Para un entorno de testeo, sólo tendremos que instalar el paquete de node SASS

npm install -g sass
Enter fullscreen mode Exit fullscreen mode

crear un archivo con la extensión .scss (para utilizar la nueva sintaxis) y poner el compilador de SASS en modo 'vigilante' para que compile el archivo .scss siempre que se detecten cambios en el fichero.

SASS tiene dos sintaxis. La que utiliza la extensión .scss es un superset de CSS, por lo que todo lo escrito en css normal es válido. Es la más popular por su cercanía a css. La otra sintaxis es la de los ficheros .sass, conocida como la sintaxis identada. Es prácticamente idéntica a scss execpto porque se emplea identación para definir la estructura de la hoja, al contrario de scss que utiliza llaves y puntos y comas.

Lo siguiente será comprobar esto: introduciendo código sass básico y viendo su equivalencia en css

//test.scss
$font-stack: Roboto, sans-serif;
$font-size: 24rem;
$primary-color: #333;

body {
    font: $font-size $font-stack;
    color: $primary-color;
}
Enter fullscreen mode Exit fullscreen mode
/* test.css */
body {
  font: 24rem Roboto, sans-serif;
  color: #333;
}
Enter fullscreen mode Exit fullscreen mode

Se puede apreciar como efectivamente, las variables son compiladas y sustituidas en el css. Esto puede ser muy útil para utilizar colores predefinidos y ser constantes en el diseño de una página entera.

🥝 Nesting

El anidado de sass nos permite imitar la estructura visual de un fichero html, haciendo el código más intuitivo y fácil de interpretar.

//test.scss

body {
    margin: 0;
    .container {
        padding: 20%;
    }
    .footer {
        height: 20%;
    }
}
Enter fullscreen mode Exit fullscreen mode

El equivalente a este fragmento de código en css es fácil de intuir: cada elemento hijo de la clase deberá ser combinado con su padre en cada selector en css

/* test.css */

body {
  margin: 0;
}
body .container {
  padding: 20%;
}
body .footer {
  height: 20%;
}
Enter fullscreen mode Exit fullscreen mode

🪓 Parciales y módulos

Existe la opción de crear ficheros que contengan fragmentos de código scss que será importado por otros ficheros durante la compilación. Para utilizar esta función sólo tenemos que crear un fichero y nombrarlo con una _ al principio. De esta manera el compilador lo detectará como un parcial y permitirá su importación como módulo. El uso de los módulos es sencillo: se utilizan como si fueran objetos con propiedades, donde las propiedades son las variables. Las definiciones de clases se concatenan a las definiciones del fichero importador.

// _partial.css

$font-stack: Roboto, sans-serif;
$font-size: 24rem;
$primary-color: #333;

body {
    font: $font-size $font-stack;
    color: $primary-color;
}
Enter fullscreen mode Exit fullscreen mode
// test.css

@use 'partial';

.clase {
    background-color: partial.$primary-color;
    color: white;
}
Enter fullscreen mode Exit fullscreen mode
/* test.css */

body {
  font: 24rem Roboto, sans-serif;
  color: #333;
}

.clase {
  background-color: #333;
  color: white;
}
Enter fullscreen mode Exit fullscreen mode

🧰 Mixins

Los mixins facilitan la escritura de algunas declaraciones que en css son muy tediosas de escribir. Permiten declaraciones de css reusables con la opción de pasar valores para mayor flexibilidad

// test.scss

@mixin transform($property) {
    -webkit-transform: $property;
    -ms-transform: $property;
    transform: $property;
}

.clase {
    @include transform(rotate(30deg));
    color: white;
}
Enter fullscreen mode Exit fullscreen mode
/* test.css */

.clase {
  -webkit-transform: rotate(30deg);
  -ms-transform: rotate(30deg);
  transform: rotate(30deg);
  color: white;
}
Enter fullscreen mode Exit fullscreen mode

🧬 Extensión/Herencia

Esta es una de las utilidades más potentes de sass, ya que permite compartir un conjunto de propiedades CSS entre varios selectores. Esto resulta en código mucho más limpio y dota al css de la capacidad de ser refactorizado.

// test.scss

%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;
}
Enter fullscreen mode Exit fullscreen mode
/* test.css */

.warning, .error, .success, .message {
  border: 1px solid #ccc;
  padding: 10px;
  color: #333;
}

.success {
  border-color: green;
}

.error {
  border-color: red;
}

.warning {
  border-color: yellow;
}
Enter fullscreen mode Exit fullscreen mode

📐 Operadores

Realizar operaciones matemáticas en sass es extremadamente sencillo

//test.scss

.container {
  width: 100%;
}

article[role="main"] {
  float: left;
  width: 600px / 960px * 100%;
}
Enter fullscreen mode Exit fullscreen mode
/* test.css */

.container {
  width: 100%;
}

article[role=main] {
  float: left;
  width: 62.5%;
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)

🌚 Life is too short to browse without dark mode