Write modern CSS with PostCSS

A Guide To PostCSS in 2021

What is PostCSS?

PostCSS is a tool that builds CSS using JavaScript.

PostCSS allows developers to write simpler CSS and push the complexity at build time. It act as a pre-processor, an autoprefixer and a linter for your CSS code.

It has a plugin ecosystem that opens us to tons of possibilities.

Ever wanted to use custom media queries? Want to mess with CSS Houdini?

Wouldn't that be cool if the @font-face were generated automatically?

Hey, we can even use container queries right now with PostCSS (and a small Polyfill✌)!

Usage

To use PostCSS in your project, find and add the PostCSS extension to your build tool:

You can configure PostCSS with a postcss.config.js with all of these extensions.

For our example, we'll use the most generic solution, the CLI.

Let's start a new project and install our dependencies:

yarn add -D postcss postcss-cli

We'll also create a src/style.scss file.

We can now tell PostCSS to build our file and output it to dist/style.css:

yarn postcss src/style.scss -o dist/style.css

Let's make it into a build and a dev NPM script, so we can call it easily:

{
	...
	"scripts": {
    "build": "yarn postcss src/style.scss -o dist/style.css",
    "dev": "yarn postcss src/style.scss -o dist/style.css --watch"
  }
	...
}

When running PostCSS we'll have a warning message saying:

You did not set any plugins, parser, or stringifier. Right now, PostCSS does nothing. Pick plugins for your case on https://www.postcss.parts/ and use them in postcss.config.js.

So let's add some plugins!

yarn add -D postcss-import cssnano autoprefixer

Let's create a postcss.config.js config file:

// postcss.config.js

module.exports = {
  plugins: [
    require('postcss-import'),
    require('autoprefixer'),
    require('cssnano')({
      preset: 'default',
    }),
  ],
}

This configuration will allow you to use @import, prefix some properties, and it will minify it!

This is how you use any PostCSS plugin. And that config file can be imported into any project!

In the next section, I've listed the most game changer PostCSS plugins to me.

Notable PostCSS Plugins

  • PostCSS Sprites: Group all your image into a large sprite using background-position. A painful process made so simple!
  • RuckSack: A lot of small quality of life improvements, my favorite being using making HEX color transparent using rgba(#fff, 0.8)
  • Easing Gradient: Make non-linear gradients like so: background: linear-gradient(to bottom, black, ease, transparent)
  • Font Magician: Magically generate @font-face rules! They can be stored locally or come from Google font!

Congratulations!
You now get PostCSS, and can integrate it to your project

I'm Tom Quinonero, I write about design systems and CSS, Follow me on twitter for more tips and resources 🤙