Not too long ago, Nicole Sullivan and I announced that we’ve started working together. Today, we’re happy to announce the release of our first collaboration effort: CSS Lint. The goal of CSS Lint, as you may guess, is to help you write better CSS code. We’ve spent huge chunks of time over the past couple of weeks building and debating rules to help everyone write more efficient and less problematic CSS.

The rules

To begin with, we defined several rules (explained in more detail on the CSS Lint About page). The rules are:

Parsing errors should be fixed

Don’t use adjoining classes

Remove empty rules

Use correct properties for a display

Don’t use too many floats

Don’t use too many web fonts

Don’t use too may font-size declarations

Don’t use IDs in selectors

Don’t qualify headings

Heading styles should only be defined once

Be careful using width: 100%

Zero values don’t need units

Vendor prefixed properties should also have the standard

CSS gradients require all browser prefixes

Avoid selectors that look like regular expressions

Beware of broken box models

The rules are all created using a very simple plugin model that makes it easy to change specific rules or add new ones. The ability to turn off or on specific rules isn’t yet exposed in the web or command line interfaces but is supported by the underlying API, so look for this addition soon.

In your build…

While we’re happy to introduce the web interface, we also realized that you may want to incorporate this into your build system. To help, there is CSS Lint for Node.js. You can install the CSS Lint command line tool via npm:

sudo npm install -g csslint

Once installed, you can pass in any number of files or directories with CSS files:

csslint foo.css bar.css dir_of_css/

The tool then outputs the same information as the web interface.

Contribute

CSS Lint is completely open source and available on GitHub. We’re actively looking for people to contribute rules, bug fixes, and extensions. The rules, by the way, are completely pluggable. You can easily strip out rules you don’t want or add new rules that are more specific to your needs. Then, build a custom version that suits your needs or contribute the changes back.

The CSS parser that it’s built on is also open source and available on GitHub. There are some known issues with the parser that I’m planning on addressing soon, but it’s generally CSS3-compliant.

I hope Nicole and I will be able to make more tools of this nature to help everyone write better front-end code. Enjoy!