CSS

Pre-procesadores

Una web puede tener muchos estilos, que deberán ser consistentes cuando cambien. Para facilitar su mantenimiento, se han creado herramientas que permiten escribir las reglas de forma más modular o programática. La más usada es Sass que utiliza la sintaxis SCSS (.scss) para extender el lenguaje CSS. Los navegadores solo entienden CSS, por lo que para usar estas extensiones es necesario pre-procesar (o compilar) sus ficheros y convertirlos a CSS antes de desplegar la web1.

Algunas de las características de Sass son similares a otras de CSS:

Variables SCSS
/* SCSS */
$fuente-principal: Helvetica, sans-serif;
p { font: 100% $fuente-principal; }
Variables CSS
/* CSS */
html { --fuente-principal: Helvetica, sans-serif; }
p { font: 100% var(--fuente-principal); }
Selector de hijos SCSS
/* SCSS */
nav {
  li { display: inline-block; }
}
Selector de hijos CSS
/* CSS */
nav li { display: inline-block; }
Módulos SCSS
/* SCSS: hay otro fichero _base.scss */
@use 'base';
/* Aquí otras reglas SCSS */
Módulos CSS
/* CSS: hay otro fichero base.css */
@import 'base.css';
/* Aquí otras reglas CSS */
Herencia SCSS
/* SCSS */
%message-common {
 border: 1px solid #ccc;
 padding: 10px;
 color: #333;
}
.mensaje {
  @extend %message-common;
}
.exito {
  @extend %message-common;
  border-color: green;
}
.error {
  @extend %message-common;
  border-color: red;
}
Herencia CSS
/* CSS */
.mensaje, .exito, .error {
 border: 1px solid #ccc;
 padding: 10px;
 color: #333;
}
.exito { border-color: green; }
.error { border-color: red; }
Operaciones SCSS
/* SCSS */
$ancho-inicial: 30em;
div { width: $ancho-inicial + 2em; }
Operaciones CSS
/* CSS */
html { --ancho-inicial: 30em; }
div { width: calc(var(--ancho-inicial) + 2em); }

Estas otras características solo son posibles gracias al pre-procesado:

Interpolación SCSS
$pantallas-peq: 36em;
@media (max-width: #{$pantallas-peq}) {
  /* reglas para pantallas pequeñas */
  p { font-size: 150%; }
}
Mixins SCSS
@mixin theme($theme: darkgray) {
  background: $theme;
  box-shadow: 0 0 1px rgba($theme, .25);
  color: #fff;
}
.info { @include theme; }
.alerta { @include theme($theme: darkred); }
.exito { @include theme($theme: darkgreen); }
Funciones SCSS
@function mas-verde($color) {
    @return $color + rgb(0,50,0);
}
p { background: mas-verde(gray); }
Directivas de control
$debug: true;
article {
    color: black;
    /* Para comprobar el diseño resaltando los bordes */
    @if ($debug) { border: 1px dotted red; }
}

<body>
<p>Este es un ejemplo de SCSS con el que puedes jugar directamente sin necesidad de compilar a CSS gracias a que la plataforma Codepen.io lo compila por ti. El mixin de ejemplo llamado "ellipsis" crea bloques de texto del ancho y número de líneas indicado. Si el contenido ocupa más que el número de líneas indicado, el texto se acorta y se muestra una elipsis ("…").</p>
</body>
@mixin ellipsis($lineas: 1, $ancho: 100%) {
  width: $ancho;
  overflow: hidden;
  text-overflow: ellipsis;
  display: -webkit-box;
  line-clamp: $lineas;
  -webkit-line-clamp: $lineas;
  -webkit-box-orient: vertical;
}
/* 
2 líneas como mucho, de ancho 20rem 
*/
p { 
  @include ellipsis($lineas: 2, $ancho: 20rem);
}
1

Esto implica tener un sistema de construcción del proyecto que automatice la generación de los CSS finales.