SASS, el preprocesador que sobrevivió al apocalipsis CSS

SASS: El preprocesador que sobrevivió al apocalipsis CSS

En el vertiginoso mundo del desarrollo web, donde las tecnologías nacen y mueren a ritmo acelerado, hay herramientas que han demostrado una resistencia extraordinaria. SASS es una de ellas. Lejos de ser una reliquia del pasado, este preprocesador de CSS ha sabido adaptarse y mantenerse relevante en un ecosistema en constante evolución.

Existe una diferencia fundamental entre las tecnologías que están pasadas de moda y aquellas que simplemente son fiables. SASS pertenece a esta segunda categoría: una herramienta madura que ha encontrado su lugar en el ecosistema del desarrollo web moderno.

Para entender el valor de SASS en 2025, es importante contextualizar las diferentes aproximaciones que existen hoy en día para escribir estilos:

El panorama actual de los estilos en la web

Antes de conocer SASS, vamos a conocer el panorama actual de los estilos en la web.

Utility-First: La revolución de las clases reutilizables

Frameworks como Tailwind CSS han popularizado la metodología "utility-first", donde en lugar de escribir CSS personalizado, construimos interfaces combinando clases utilitarias:

<div class="max-w-md mx-auto bg-white rounded-xl shadow-md overflow-hidden md:max-w-2xl">
  <div class="md:flex">
    <div class="md:shrink-0">
      <img class="h-48 w-full object-cover md:h-full md:w-48" src="image.jpg" alt="Card">
    </div>
    <div class="p-8">
      <div class="uppercase tracking-wide text-sm text-indigo-500 font-semibold">
        Tailwind CSS
      </div>
      <p class="mt-2 text-slate-500">
        Un framework CSS utility-first
      </p>
    </div>
  </div>
</div>

Component-First: Componentes predefinidos

Por otro lado, frameworks como Bootstrap siguen la filosofía de componentes predefinidos:

<div class="card">
  <img src="image.jpg" alt="Card">
  <div class="card-body">
    <h2 class="card-title">Bootstrap</h2>
    <p>Un framework CSS basado en componentes</p>
  </div>
</div>

CSS-in-JS: Estilos dentro de JavaScript

Las soluciones como styled-components integran los estilos directamente en el código JavaScript:

import styled from 'styled-components';

const Button = styled.button`
  background: palevioletred;
  color: white;
  font-size: 1em;
  margin: 1em;
  padding: 0.25em 1em;
  border: 2px solid palevioletred;
  border-radius: 3px;
`;

export default function App() {
  return <Button>Click me</Button>;
}

CSS Nativo moderno

El CSS nativo ha evolucionado significativamente, incorporando funcionalidades que antes solo estaban disponibles en preprocesadores:

/* Variables nativas */
:root {
    --primary-color: #3498db;
    --spacing: 1rem;
}

/* Nesting (soportado en navegadores modernos) */
.card {
    padding: var(--spacing);

    &:hover {
        transform: scale(1.05);
    }

    & .title {
        color: var(--primary-color);
    }
}

/* Container queries */
@container (min-width: 400px) {
    .card {
        display: grid;
        grid-template-columns: 1fr 2fr;
    }
}

Postprocesadores CSS

Los postprocesadores como PostCSS, con plugins como autoprefixer y cssnano, procesan CSS ya escrito para optimizarlo y añadir compatibilidad:

.example {
    display: flex;
    transition: all 0.3s ease;

    &:hover {
        transform: scale(1.05);
    }
}

¿Qué es SASS y por qué sigue siendo relevante?

SASS es un metalenguaje que genera CSS. Proporciona un lenguaje más rico en funcionalidades y sintaxis que CSS puro, permitiendo utilizar estilos que aún no son compatibles en todos los navegadores, realizar operaciones complejas, implementar bucles, condicionales, variables más flexibles, importar otros archivos CSS, anidar estilos, y manipular colores de forma avanzada.

Hola SASS: Tu primer contacto

Un ejemplo básico de SASS muestra su elegancia sintáctica:

# main.sass
$color__primary: #3498db
$gap__m: 1rem

.link
  display: inline-block
  color: $color__primary
  padding:
    block: $gap__m
    inline: $gap__m / 2
  &:hover
    text-decoration: underline

Para compilarlo, simplemente ejecutamos:

sass main.sass main.css

Y obtenemos CSS optimizado:

.link {
    display: inline-block;
    color: #3498db;
    padding: 1rem 0.5rem;
}
.link:hover {
    text-decoration: underline;
}

Las dos caras de SASS: SCSS vs SASS

SASS ofrece dos sintaxis diferentes. La sintaxis SCSS, más similar a CSS tradicional:

$color__primary: #3498db;
$gap__m: 1rem;

.link {
  display: inline-block;
  color: $color__primary;
  padding:
    block: $gap__m;
    inline: $gap__m / 2;
  &:hover {
    text-decoration: underline;
  }
}

Y la sintaxis SASS indentada, más minimalista y similar a Python:

$color__primary: #3498db
$gap__m: 1rem

.link
  display: inline-block
  color: $color__primary
  padding:
    block: $gap__m
    inline: $gap__m / 2
  &:hover
    text-decoration: underline

Ambas sintaxis son igualmente potentes y la elección entre una u otra depende de las preferencias personales o del equipo.

Funcionalidades

Variables con scope local

A pesar de que CSS ahora soporta variables, SASS ofrece un sistema de variables más flexible.

$color__link: #5498db

.link
  $color__link: #ff6347
  color: $color__link

Mixins: Funciones que generan CSS

Los mixins son una de las características más potentes de SASS. Permiten definir bloques de código reutilizables con parámetros.

@mixin imagen-cuadrada($anchura, $circular: false)
  width: $anchura
  height: $anchura
  object-fit: cover
  object-position: center
  @if $circular
    border-radius: 50%

.box
    @include imagen-cuadrada(100px, true)

Herencia con @extend

Puedes compartir reglas entre selectores usando @extend:

.input
  display: inline-block
  border-radius: .5rem
  padding:
    block: .7rem
    inline: 1.2rem
  resize: none
  &:focus
    outline: none

.textarea
  @extend .input
  height: 150px

Control de flujo

SASS incluye estructuras de control completas:

$theme: dark

body
  @if $theme == light
    background: #fff
    color: #000
  @else if $theme == dark
    background: #000
    color: #fff
  @else
    background: #f0f0f0
    color: #333

Bucles para automatización

Perfecto para generar estilos repetitivos. En este ejemplo, creamos gotas de lluvia animadas:

@for $i from 1 through 50
  .raindrop:nth-child(#{$i})
     left: #{random(100)}%
     animation:
       name: fall
       delay: #{random(2000)/1000}s
        duration: #{1 + random(2)}s
     opacity: #{0.3 + random(70)/100}

@keyframes fall
  from
    top: -20px
  to
    top: 100vh

Organización modular: La clave de proyectos grandes

Una de las mayores fortalezas de SASS es su capacidad para organizar código de forma modular:

// Imports
@use "vendors/normalize"

// Abstracts
@use "abstracts/variables"
@use "abstracts/mixins"
@use "abstracts/animations"

// Base
@use "base/typography"
@use "base/base"
@use "base/helpers"

// Components
@use "desktop/components/link"
@use "desktop/components/button"
@use "desktop/components/image"
@use "desktop/components/input"
@use "desktop/components/tags"
@use "desktop/components/notification"

// Layout
@use "desktop/layout/header"
@use "desktop/layout/footer"

// Pages
@use "desktop/pages/home"
@use "desktop/pages/blog"
@use "desktop/pages/talks"
@use "desktop/pages/books"

El ejemplo anterior viene directo de esta misma página. Cada archivo tiene una responsabilidad clara, lo que facilita el mantenimiento y la escalabilidad del proyecto.

Integración con herramientas modernas

SASS se integra perfectamente con las herramientas de construcción actuales como Vite:

// vite.config.js
import { resolve } from 'path';
export default {
    root: 'assets',
    base: '/static/',
    publicDir: resolve('./assets/public'),
    build: {
        manifest: true,
        outDir: resolve("./static"),
        rollupOptions: {
            input: {
                sass: 'assets/sass/main.sass',
            }
        },
    }
}

Metodologías: BEM y SASS, una combinación perfecta

SASS facilita enormemente la implementación de metodologías como BEM:

.header
  width: 100%
  &__
    &logo
      width: 10rem
    &nav
      display: flex
  &--
    &collapsed
      height: 0

Que genera:

.header {
    width: 100%;
}

.header__logo {
    width: 10rem;
}

.header__nav {
    display: flex;
}

.header__nav--collapsed {
    height: 0;
}

Lo que SASS aporta que CSS nativo aún no tiene

Aunque CSS ha evolucionado mucho, SASS sigue ofreciendo ventajas únicas:

  • Variables más flexibles y minimalistas en su uso
  • Anidamiento de selectores con concatenación avanzada
  • Mixins, que funcionan como funciones que generan CSS reutilizable
  • Herencia robusta que permite compartir reglas entre selectores
  • Control de flujo completo con condicionales y bucles
  • Modularidad avanzada para dividir CSS en múltiples archivos
  • Operaciones matemáticas complejas con diferentes unidades
  • Manipulación avanzada de colores
  • Listas, mapas y funciones integradas
  • Garantía de compatibilidad con navegadores antiguos

Pero El verdadero valor va más allá del código

  • Arquitectura: Facilita la creación de arquitecturas CSS sólidas y mantenibles.
  • Escalabilidad: Permite que los proyectos crezcan sin que el CSS se vuelva inmanejable.
  • Consistencia: Promueve patrones consistentes en todo el proyecto.
  • Trabajo en equipo: Facilita la colaboración entre desarrolladores con convenciones claras.
  • Integración con bibliotecas: Se integra fácilmente con frameworks y bibliotecas existentes.
  • Productividad: Reduce significativamente el tiempo de desarrollo y mantenimiento.

¿Seguirá siendo relevante en el futuro?

La respuesta es un rotundo sí, por varias razones fundamentales:

La comunidad sigue siendo activa con actualizaciones periódicas que mantienen SASS al día con las necesidades modernas. La nueva versión escrita en Dart ha mejorado significativamente el rendimiento y la compatibilidad, sustituyendo a la versión en Ruby y ofreciendo también una versión para Node.js.

Muchas empresas y proyectos establecidos continúan utilizando SASS, lo que garantiza su salud a largo plazo. Además, su excelente integración con herramientas modernas de construcción y frameworks demuestra su capacidad de adaptación.

Conclusión

Que SASS no sea mainstream no significa que sea malo o esté muerto. En un mundo donde lo nuevo a menudo se confunde con lo mejor, SASS representa la madurez y la fiabilidad. Es una herramienta que ha demostrado su valor a lo largo del tiempo y que continúa evolucionando para mantenerse relevante.

Para desarrolladores que trabajan en proyectos de mediana a gran escala, SASS sigue siendo una opción excelente que aporta estructura, potencia y elegancia al desarrollo de estilos. No es una moda pasajera, sino una herramienta consolidada que ha encontrado su lugar en el ecosistema moderno del desarrollo web.

En definitiva, SASS no solo sobrevivió al apocalipsis CSS, sino que prosperó aportando valor real.

Este trabajo está bajo una licencia Attribution-NonCommercial-NoDerivatives 4.0 International.

¿Me invitas a un café?

Puedes usar el terminal.

ssh customer@andros.dev -p 5555

Escrito por Andros Fenollosa

septiembre 11, 2025

7 min de lectura

Sigue leyendo