¿Qué es PostCSS?

Añade características a CSS con plugins PostCSS


A medida que avanzamos en el desarrollo web (y en CSS en particular), nos iremos dando cuenta que la mayor parte del tiempo lo invertimos en realizar tareas repetitivas una y otra vez, y que lo ideal sería tener una forma de automatizar dichas tareas.

Ahí es donde entra en escena PostCSS, una estupenda herramienta que permite darle mayor versatilidad a nuestro código CSS, automatizando tareas, realizando trabajo extra por nosotros y, en resumen, ahorrándonos trabajo.

¿Cómo funciona PostCSS?

CSS es un formato que los navegadores comprenden y saben interpretar. Sin embargo, el formato PostCSS no lo entiende. En general, el código PostCSS será igual (o muy parecido) a CSS, pero habrán detalles que podrían no ser estrictamente código CSS estándar.

La herramienta PostCSS, realmente sólo es una aplicación Javascript que convierte (transpila) código de PostCSS a CSS:

PostCSS a CSS

Y como veremos a continuación, esto nos ofrece múltiples características interesantes.

Instalación de PostCSS

PostCSS es una herramienta de terminal (linea de comandos), sin embargo, suele venir incorporada en automatizadores como Vite o similares, por lo que no hace falta utilizarlo desde una terminal.

Por ejemplo, veamos como instalarla en un proyecto creado con vite:

$ npm create vite@latest
> test-project
> Vanilla
> JavaScript

$ cd test-project
$ npm install
$ npm install -D autoprefixer

Esto creará un proyecto básico de Vite, y una vez en la carpeta del proyecto, instalamos todo y le añadimos el plugin autoprefixer para usarlo de ejemplo con PostCSS. Vite aplica PostCSS automáticamente a todos los ficheros .css utilizados si encuentra un fichero de configuración de PostCSS postcss.config.js junto al archivo package.json. Así que, vamos a crearlo.

Configuración de PostCSS

Creamos un fichero postcss.config.js en la carpeta raíz del proyecto (donde tenemos otros archivos como el package.json o el .gitignore), y le añadimos el siguiente contenido:

export default {
  plugins: {
    "autoprefixer": true
  }
}

Dentro del objeto plugins añadimos el nombre del plugin específico, y usamos true para activarlo o false para desactivarlo temporalmente. En el caso de que se puedan añadir opciones a ese plugin, en lugar de true o false, usaríamos un objeto con las opciones a utilizar.

Recuerda que es importante que el nombre del plugin de PostCSS a activar haya sido instalado antes con npm, como hicimos con el npm install -D autoprefixer. De lo contrario, no funcionará.

Una vez hecho esto, Vite ya debería aplicar PostCSS en nuestro proyecto.

Uso de PostCSS

Como estamos utilizando Vite y tenemos un fichero de configuración creado, PostCSS se usará automáticamente. Para comprobar si efectivamente está funcionando, vamos a hacer lo siguiente:

Editamos el fichero src/style.css. Este es el archivo original que nosotros escribimos en VSCode o nuestro editor. Añadimos el siguiente contenido de prueba:

body {
  mask: none;
}

Este es el código que PostCSS va a leer y convertir en otro código CSS.

Si escribimos npm run build desde una terminal, estaremos creando el código final para subir a nuestra página. Revisamos el fichero .css generado en la carpeta dist/ y revisamos el código resultante. Si no estamos aplicando PostCSS, debería verse así:

body{mask:none}
  • Se está minificando el código, pero eso lo hace de serie Vite.
  • No hay más cambios.

Por otro lado, si escribimos npm run build desde una terminal, si estamos aplicando PostCSS, el código resultante del fichero .css generado en la carpeta dist/ debería verse así:

body{-webkit-mask:none;mask:none}
  • El código se minifica porque lo hace Vite de serie.
  • La propiedad mask de CSS requiere -webkit-mask para dar compatibilidad a Chromium antiguos.
  • El plugin autoprefixer de PostCSS ha añadido los prefijos necesarios para dar compatibilidad.

Es importante tener en cuenta que PostCSS por si sólo no hace nada. Su funcionalidad se la dan los plugins. En este ejemplo hemos instalado el plugin autoprefixer para dar compatibilidad con navegadores antiguos añadiendo automáticamente los prefijos CSS.

Esto puede ser interesante para añadir ciertos plugins que automaticen ciertas tareas o realicen comportamientos interesantes para nuestros desarrollos CSS.

Plugins populares de PostCSS

Antes de profundizar más, mencionar que el ecosistema de PostCSS es bastante grande y existen plugins para prácticamente cualquier tarea que tenga que ver con CSS:

PluginDescripción
autoprefixerAñade prefijos CSS automáticamente, basándose en CanIUse.
css-modulesAplica la estrategia CSS Modules para aislar CSS y evitar la cascada.
stylelintLinter de código CSS, compatible también con preprocesadores como LESS o Sass.
postcss-preset-envConvierte CSS no soportado por navegadores en CSS soportado. El Babel de CSS.
postcss-bundlerCrea un fichero (bundle) con todos los CSS importados.
cssnanoMinificador de código CSS.
tailwindcssFramework CSS basado en clases de utilidad.
purgecssElimina código CSS muerto (no utilizado) de nuestros proyectos.

Existen muchos más, pero estos son algunos de los plugins que podemos encontrar para PostCSS.

¿Quién soy yo?

Soy Manz, vivo en Tenerife (España) y soy streamer partner en Twitch y profesor. Me apasiona el universo de la programación web, el diseño y desarrollo web y la tecnología en general. Aunque soy full-stack, mi pasión es el front-end, la terminal y crear cosas divertidas y locas.

Puedes encontrar más sobre mi en Manz.dev