Clean CSS with Stylelint
Finding bugs, inefficiencies and stylistic inconsistencies in your CSS with Stylint
Last night I was working on the album functionality for this website. CSS is not my strong suit, so I wanted to get some help from a CSS linter. A CSS lint tool parses your CSS code and flags signs of inefficiency, stylistic inconsistencies, and patterns that may be erroneous.
I tried Stylelint, an open source CSS linter written in JavaScript that is maintained as an npm package. It was quick and easy to install on my local development environment:
$ npm install -g stylelint stylelint-config-standard stylelint-no-browser-hacks
The -g
attribute instructs npm to install the packages globally, the stylelint-config-standard
is a standard configuration file (more about that in a second), and the stylelint-no-browser-hacks
is an optional Stylelint plugin.
Stylelint has over 150 rules to catch invalid CSS syntax, duplicates, etc. What is interesting about Stylelint is that it is completely unopinionated; all the rules are disabled by default. Configuring all 150+ rules would be very time-consuming. Fortunately you can use the example stylelint-config-standard
configuration file as a starting point. This configuration file is maintained as a separate npm package. Instead of having to configure all 150+ rules, you can start with the stylelint-config-standard
configuration file and overwrite the standard configuration with your own configuration file. In my case, I created a configuration file called stylelint.js
in my Drupal directory.
"use strict"
module.exports = {
"extends": "stylelint-config-standard",
"plugins": [
"stylelint-no-browser-hacks/lib"
],
"rules": {
"block-closing-brace-newline-after": "always",
"color-no-invalid-hex": true,
"indentation": 2,
"property-no-unknown": true,
"plugin/no-browser-hacks": [true, {
"browsers": [
"last 2 versions",
"ie >=8"
]
}],
"max-empty-lines": 1,
"value-keyword-case": "lower",
"at-rule-empty-line-before": null,
"rule-empty-line-before": null,
},
}
As you can see, the configuration file is a JSON file. I've extended stylelint-config-standard
and overwrote the indentation
rule to be 2 spaces instead of tabs, for example.
To check your CSS file, you can run Stylelint from the command line:
$ stylelint --config stylelint.js --config-basedir /usr/local/lib/node_modules/ css/album.css
In my case it found a couple of problems that were easy to fix:

For fun, I googled "Stylelint Drupal" and found that Alex Pott has proposed adding a Stylelint configuration file to Drupal core. Seems useful to me!
— Dries Buytaert