stylelint-config

My idea of how CSS should be written.

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
stylelint-config
000.1.16 years ago6 years agoMinified + gzip package size for stylelint-config in KB

Readme

Stylelint Config
Greenkeeper badge

Colors

Color Hex Case

Specify hex colors in lowercase.
Rule
"color-hex-case": "lower"

Example
// Bad

a {
  color: #FFF;
}

// Good

a {
  color: #000;
}

a {
  color: #fff;
}

Color Hex Length

Specify short notation for hex colors.
Rule
"color-hex-length": "short"

Example
// Bad

a {
  color: #ffffff;
}

a {
  color: #fffffaa;
}

// Good

a {
  color: #fff;
}

a {
  color: #fffa;
}

a {
  color: #a4a4a4;
}

Color Named

Colors must never be named.
Rule
"color-named": "never"

Example
// Bad

a {
  color: black;
}

// Good

a {
  color: #000;
}

a {
  color: rgb(0, 0, 0);
}

a {
  color: var(--foo-color-white);
}

a {
  color: $blue;
}

a {
  color: @blue;
}

No Invalid Hex

Disallow invalid hex colors.
Rule
"color-no-invalid-hex": true

Example
// Bad

a {
  color: #00;
}

a {
  color: #fff1az;
}

a {
  color: #12345aa;
}

// Good

a {
  color: #000;
}

Functions

Skipped for now: http://stylelint.io/user-guide/rules/#function

Numbers

Number Leading Zero

There must never be a leading zero.
Rule
"number-leading-zero": "never"

Example
// Bad

a {
  line-height: 0.5;
}

a {
  transform: translate(2px, 0.4px);
}

// Good

a {
  line-height: .5;
}

a {
  transform: translate(2px, .4px);
}

Numbers No Trailing Zeros

Numbers must have no trailing zeros.
Rule
"number-no-trailing-zeros": true

Example
// Bad

a {
  top: 1.0px;
}

a {
  top: 1.01000px;
}

// Good

a {
  top: 1px;
}

a {
  top: 1.01px;
}

Strings

String Quotes

Strings must always be wrapped with double quotes.
Rule
"string-quotes": "double"

Example
// Bad

a {
  content: 'x';
}

a[id='foo'] {
  display: none;
}

// Good

a {
  content: "x";
}

a[id="foo"] {
  display: none;
}

Length

Length Zero No Unit

Disallow units for zero lengths.
Rule
"length-zero-no-unit": true

Example
// Bad

a {
  top: 0px;
}

a {
  top: 0.000em;
}

// Good

a {
  top: 0;
}

Units

Unit Case

Specify units in lowercase.
Rule
"unit-case": "lower"

Example
// Bad

a {
  width: 10PX;
}

a {
  width: 10Px;
}

a {
  width: 10PIXEL;
}

// Good

a {
  width: 10px;
}

a {
  width: calc(10px * 2);
}

Values

Value Keyword Case

Specify keyword values in lowercase.
Rule
"value-keyword-case": "lower"

Example
// Bad

a {
  display: Block;
}

a {
  display: BLOCK;
}

// Good

a {
  display: block;
}

Value No Vendor Prefix

Avoid vendor prefixes for values and use autoprefixer instead.
Rule
"value-no-vendor-prefix": true

Example
// Bad

.foo {
  display: -webkit-flex;
}

.foo {
  max-width: -moz-max-content;
}

.foo {
  background: -webkit-linear-gradient(bottom, #000, #fff);
}

// Good

.foo {
  display: flex;
}

.foo {
  max-width: max-content;
}

.foo { background: linear-gradient(bottom, #000, #fff); }

Value Lists

Value lists must always have a single space after the commas and be written in a single line.
Rule Rule Rule Rule
"value-list-comma-newline-after": "never-multi-line",
"value-list-comma-newline-before": "never-multi-line",
"value-list-comma-space-after": "always",
"value-list-comma-space-before": "never"

Example
// Bad

a {
  background-size: 100px,150px;
}

a {
  background-size: 100px ,150px;
}

// Nope

a {
  background-size: 100px,
                   150px;
 }

a {
  background-size: 100px
                   , 150px;
}

// Good

a {
  background-size: 100px, 150px;
}

Shorthand Property

Shorthand properties must not have redundant values.
Rule
"shorthand-property-no-redundant-values": true

Example
// Bad

.foo {
  margin: 1px 1px;
}

.foo {
  margin: 1px 1px 1px 1px;
}

.foo {
  padding: 1px 2px 1px;
}

.foo {
  border-radius: 1px 2px 1px 2px;
}

// Good

.foo {
  margin: 1px;
}

.foo {
  margin: 1px 1px 1px 2px;
}

.foo {
  padding: 1px 1em 1pt 1pc;
}

.foo {
  border-radius: 10px / 5px;
}

Properties

Case

Properties must be specified in lowercase.
Rule
"property-case": "lower"

Example
// Bad

a {
  Width: 1px
}

a {
  WIDTH: 1px
}

// Good

a {
  width: 1px
}

a {
  animation-duration: 3s;
}

No Vendor Prefix

Properties must be specified without vendor prefixes, use autoprefixer instead
Rule
"property-no-vendor-prefix": true

Example
// Bad

a {
  -webkit-animation-duration: 3s;
}

// Good

a {
  animation-duration: 3s;
}

Declaration

Bangs

Important declarations should be avoid if possible but if used the bang of declarations must have white space before but not after.
Rule
"declaration-bang-space-after": "never",
"declaration-bang-space-before": "always"

Example
// Bad

a {
  color: #fff ! important;
}

a {
  color: #000!important;
}

// Good

a {
  color: #f00 !important;
}

Colon

There must always be a single space after the colon but not before.
Rule Rule
"declaration-colon-space-after": "always",
"declaration-colon-space-before": "never"

Example
// Bad

a {
  color :#f00;
}

a {
  color:#000;
}

a {
  color : #fff;
}

// Good

a {
  color: #000;
}

Property Value Blacklist

Blacklist of disallowed property and value pairs within declarations.
  • Border: Disallow the use of the word none for borders, use 0 instead
  • Transition: Disallow the use of all within transitions.

Rule
"declaration-property-value-blacklist": {
  "border": ["none"],
  "transition": [/all/]
}

Example
// Bad

a {
  border: none;
  transition: all 1s linear;
}

// Good

a {
  border: 0;
  transition: height 1s linear;
}

Declaration Blocks

No Duplicated Properties

Consecutive duplicated properties can be used , they can prove to be useful fallbacks for older browsers.
Rule
"declaration-block-no-duplicate-properties": [true, {
  "ignore" : ["consecutive-duplicates"]
}]

Example
// Bad

p {
  font-size: 16px;
  font-weight: 400;
  font-size: 1rem;
}

// Good

p {
  font-size: 16px;
  font-size: 1rem;
  font-weight: 400;
}

No Ignored Properties

Avoid property values that are ignored due to another property value in the same rule.
Rule
"declaration-block-no-ignored-properties": true

Example
// Bad

a {
  display: inline;
  width: 100px;
}

a {
  display: inline;
  height: 100px;
}

a {
  display: inline;
  margin: 10px;
}

a {
  display: block;
  vertical-align: baseline;
}

a {
  display: flex;
  vertical-align: baseline;
}

a {
  position: absolute;
  vertical-align: baseline;
}

a {
  float: left;
  vertical-align: baseline;
}

// Good

a {
  display: inline;
  margin-left: 10px;
}

a {
  display: inline;
  margin-right: 10px;
}

a {
  display: inline;
  padding: 10px;
}

a {
  display: inline-block;
  width: 100px;
}

a {
  display: table-cell;
  vertical-align: baseline;
}

a {
  position: relative;
  vertical-align: baseline;
}

No Shorthand Property Overrides

Avoid shorthand properties that override related longhand properties.
Rule
"declaration-block-no-shorthand-property-overrides": true

Example
// Bad

a {
  padding-left: 10px;
  padding: 20px;
}

a {
  transition-property: opacity;
  transition: opacity 1s linear;
}

a {
  border-top-width: 1px;
  top: 0;
  bottom: 3px;
  border: 2px solid blue;
}

// Good

a {
  padding: 10px;
  padding-left: 20px;
}

a {
  transition-property: opacity;
}

a {
  transition: opacity 1s linear;
}

Properties Order

Prefixed properties must always be alphabetically ordered.
Rule
"declaration-block-properties-order": "alphabetical"

Example
// Bad

a {
  top: 0;
  color: pink;
}

a {
  -moz-transform: scale(1);
  transform: scale(1);
  -webkit-transform: scale(1);
}

// Good

a {
  color: pink;
  top: 0;
}

a {
  /* stylelint-disable property-no-vendor-prefix */  
  -moz-transform: scale(1);
  -webkit-transform: scale(1);
  transform: scale(1);
  /* stylelint-enable property-no-vendor-prefix */
}

Semicolon New Line After

Require a newline and disallow whitespace after but never before the semicolons of declaration blocks.
Rule Rule
"declaration-block-semicolon-newline-after": "always",
"declaration-block-semicolon-newline-before": "never-multi-line"

Example
// Bad

a { color: pink; top: 0; }

a {
  color: pink
  ; top: 0;
}

// Good

a {
  color: #000;
  top: 0;
}

a {
  color: #f00; /* end-of-line comment */
  top: 0;
}

Trailing Semicolon

There must always be a trailing semicolon.
Rule
"declaration-block-trailing-semicolon": "always"

Example
// Bad

a {
  color: #fff
}

a {
  background: #fff;
  color: #000
}

a {
  @include foo
}

// Good

a {
  background: #fff;
  color: #000;
  @include foo;
}

Blocks

Closing Brace Newline After

Require a newline before and after the closing brace of blocks.
Rule Rule
"block-closing-brace-newline-after": ["always", {
  "ignoreAtRules": ["if", "else"]
}],
"block-closing-brace-newline-before": "always"

Example
// Bad

a { color: pink; } b { color: red; }

a { color: pink;
} b { color: red; }

// Good

a { color: pink; }
b { color: red; }

No Empty

Disallow empty blocks.
Rule
"block-no-empty": true

Example
// Bad

a {}

a { }

@media print { a {} }

// Good

a {
  color: #abc;
}

@media print {
  a {
    color: #fff;
  }
}

No Single Line

Disallow single-line blocks.
Rule
"block-no-single-line": true

Example
// Bad

a,
b { color: pink; }

a { color: pink; top: 1px; }

@media print {
  a { color: pink; }
}

a {
  color: red;
  @media print { color: pink; }
}

// Good

a {
  color: pink;
}

a,
b {
  color: pink;
}

@media print {
 a {
   color: pink;
 }
}

a {
  color: red;

  @media print {
    color: pink;
  }
}

Opening Brace Space Before

Require a single space before the opening brace of blocks.
Rule
"block-opening-brace-space-before": "always"

Example
// Bad

a{
  color: #f0f;
}

// Good
a {

  color: #f0f;
}

Selectors

Combinator Space

Require a single before and after the combinators of selectors.
Rule Rule
"selector-combinator-space-after": "always",
"selector-combinator-space-before": "always"

Example
// Bad

a +b {
  color: #fff;
}

a>b {
  color: #000;
}

// Good

a + b {
  color: #fff;
}

a ~ b {
  color: #fff;
}

Max Specificity

Limit the specificity of selectors.
Visit the Specificity Calculator for visual representation of selector specificity.
This rule ignores selectors with variable interpolation (#{$var}, @{var}, $(var)).
This rule ignores selectors containing the :not() or :matches() pseudo-classes.
This rule resolves nested selectors before calculating the specificity of a selector.
Rule
"selector-max-specificity": "0,4,0"
Example
// Bad

#id {
  color: #000;
}

.foo .baz .bar .boo {
  color: #fff;
}

.foo .baz {
  & .bar span {
    display: block;
  }
}

.foo {
  color: #f00;

  &.baz .bar p {
    color: #0f0;
  }
}

// Good

div {
  color: #fff;
}

.foo div {
  color: #f00;
}

.foo div {
  & .bar div a {
    color: #fff;
  }
}

.foo {
  & .baz {
    color: #fff;
  }
}

.foo {
  color: #fff;

  & .baz div {
    color: #fff;
  }
}

No ID

Disallow id selectors.
Rule
"selector-no-id": true

Example
// Bad

#foo {
  color: #f00;
}

No Universal

Disallow the universal selector.
Rule
"selector-no-universal": true

Example
// Bad

* {
  color: #000;
}

.foo * {
  color: #000;
}

No Vendor Prefix

Disallow vendor prefixes for selectors, prefer using autoprefixer.
Rule
"selector-no-vendor-prefix": true

Example
// Bad

input::-moz-placeholder {
  color: eee;
}

:-webkit-full-screen a {
  color: ff0;
}

// Good

input::placeholder {
  color: #eee;
}

:full-screen a {
  color: #ff0;
}

Pseudo Class Case

Pseudo-class selectors must be written in lowercase.
Rule
"selector-pseudo-class-case": "lower"

Example
// Bad

a:Hover
b:hOvEr,
em:HOVER {
  color: #f00;
}

// Good

a:hover {
  color: #f00;
}

Selector Lists

Comma Newline

Require a newline after the commas of selector lists but never before.
Rule Rule
"selector-list-comma-newline-after": "always",
"selector-list-comma-newline-before": "never-multi-line"

Example
// Bad

a,b {
  color: #fff;
}

a
, b {
  color: #fff;
}

// Good

a,
b {
  color: #fff;
}

Rules

Nested Empty Line Before

There must always be an empty line before rules. First nested selectors and selectors after comments will be ignored.
Rule
"rule-nested-empty-line-before": ["always", {
  "except": ["first-nested"],
  "ignore" : ["after-comment"]
}]

Example
// Bad

div {

  a {
    color: #fff;
  }
  b {
    color: #000;
  }
}

// Good

div {
  a {
    color: #fff;
  }

  b {
    color: #000;
  }
  // No Comment
  em {
    color: #aaa;
  }
}

Non Nested Empty Line Before

Require or disallow an empty line before non-nested rules.
If the rule is the very first node in a stylesheet then it is ignored.
Rule
"rule-non-nested-empty-line-before": "always"

Example
// Bad

a {
  color: #fff;
}
b {
  color: #000;
}

// Good

a {
  color: #fff;
}

b {
  color: #000;
}

Media Feature

Colon Space

Require a single space after but never before the colon in media features.
Rule Rule
"media-feature-colon-space-after": "always",
"media-feature-colon-space-before": "never"

Example
// Bad

@media (min-width:600px) {
  a {
    color: #fff;
  }
}

@media (max-width : 600px) {
  a {
    color: #000;
  }
}

// Good

@media (min-width: 600px) {
  a {
    color: #fff;
  }
}

No Missing Punctuation

Disallow missing punctuation for non-boolean media features.
Rule
"media-feature-no-missing-punctuation": true

Example
// Bad

@media (max-width 600px) {
  a {
    color: #fff;
  }
}

@media (width   20em) {
  a {
    color: #fff;
  }
}

// Good

@media (max-width: 600px) {
  a {
    color: #fff;
  }
}

@media (width >= 20em) {
  a {
    color: #fff;
  }
}

Range Operator Space

Require a single space before and after the range operator in media features.
Rule Rule
"media-feature-range-operator-space-after": "always",
"media-feature-range-operator-space-before": "always"

Example
// Bad

@media (max-width>=600px) {
  a {
    color: #fff;
  }
}

@media (max-width >=600px) {
  a {
    color: #fff;
  }
}

// Good

@media (max-width >= 600px) {
  a {
    color: #fff;
  }
}

At-rule

Empty Line Before

Require an empty line before at-rules.
If the at-rule is the very first node in a stylesheet then it is ignored.
Rule
"at-rule-empty-line-before": ["always", {
  "except": ["first-nested"],
  "ignore" : ["after-comment", "blockless-group"],
  "ignoreAtRules": ["else"]
}],

Example
// Bad

a {
  color: #fff;
  @media (max-width >= 600px) {
    color: #000;
  }
}

// Good

a {
  color: #fff;

  @media (max-width >= 600px) {
    color: #000;
  }
  // No Comment
  @media (max-width >= 1200px) {
    color: #f0f;
  }
}

Name Case

At-rules names must be in lowercase.
Rule
"at-rule-name-case": "lower"

Example
// Bad

@Charset 'UTF-8';

@MEDIA (min-width: 50em) {
  a {
    color: #fff;
  }
}

// Good

@charset 'UTF-8';

@media (min-width: 50em) {
  a {
    color: #fff;
  }
}

Name Space After

Require a single space after at-rule names.
Rule
"at-rule-name-space-after": "always"

Example
// Bad

@charset"UTF-8";

@media(min-width: 700px) {
  a {
    color: #fff;
  }
}

@media  (min-width: 700px) {
  a {
    color: #fff;
  }
}

@media
(min-width: 700px) {
  a {
    color: #fff;
  }
}

// Good

@charset "UTF-8";

@import url("x.css");

@media (min-width: 700px) {
  a {
    color: #fff;
  }
}

Comments

Whitespace Inside

Require whitespace on the inside of comment markers.
Any number of asterisks are allowed at the beginning or end of the comment. So /** comment **/ is treated the same way as /* comment */.
Rule
"comment-whitespace-inside": "always"

Example
// Bad

/*comment*/

/*comment */

/** comment**/

// Good

/* comment */

/** comment **/

/**
 * comment
 */

/*     comment
*/

General

Indentation

Always indent at-rules, rules, comments, declarations, inside parentheses and multi-line values by 2 spaces.
Rule
"indentation": 2

Example
// Bad

@media print {
a {
top: 10px;
}
}

@media print {
a {
  top: 10px;
  }
}

@media print {
    a {
      top: 10px;
    }
}

// Good

@media print {
  a {
    top: 10px;
  }
}

Max Empty Lines

Limit the number of adjacent empty lines to one.
Rule
"max-empty-lines": 1

Example
// Bad

a {
  color: #fff;
}


b {
  color: #000;
}

/*
  Comment strings are also checked


  So the following is a warning
*/

// Good

a {
  color: #fff;
}

b {
  color: #000;
}

/**
 * Comment
 *
 * This is not a warning
 */

 /*
  Another Comment

  Also not a warning
*/
 ```

### Max Nesting Depth

Limit the allowed nesting depth to 3.

[Rule](http://stylelint.io/user-guide/rules/max-nesting-depth/)
"max-nesting-depth": 3
This rule works by checking rules' and at-rules' actual "nesting depth" against your specified max. Here's how nesting depths works:
a { & b { / nesting depth 1 /
& .foo { /* nesting depth 2 */
  @media print { /* nesting depth 3 */
    & .baz { /* nesting depth 4 */
      color: #f00;
    }
  }
}
} }
Note that root-level at-rules will not be included in the nesting depth calculation, because most users would take for granted that root-level at-rules are "free" (because necessary). So both of the following .foo rules have a nesting depth of 2, and will therefore pass if your max is less than or equal to 2:
a { b { / 1 /
.foo {} /* 2 */
} }
### No Duplicate Selectors

Disallow duplicate selectors within a stylesheet.

[Rule](http://stylelint.io/user-guide/rules/no-duplicate-selectors/)
"no-duplicate-selectors": true
__Example__
// Bad
.foo, .bar, .foo { color: #fff; }
.foo {} .bar {} .foo {}
.foo, .bar { color: #fff; }
.bar, .foo { color: #fff; }
// Good
.foo { color: #000; }
@media (min-width: 10px) { .foo {
color: #fff;
} }
.foo { .foo {
color: #fff;
} }
a b { color: #fff; }
a { & b, & c {
color: #000;
} }
### No EOL Whitespace

Disallow end-of-line whitespace.

[Rule](http://stylelint.io/user-guide/rules/no-eol-whitespace/)
"no-eol-whitespace": true
__Example__
a { color: #f00; }·
a { color: #f00; }····
/ Comment strings are also checked···· so the following is a warning /
### No Extra Semicolons

Disallow extra semicolons.

[Rule](http://stylelint.io/user-guide/rules/no-extra-semicolons/)
"no-extra-semicolons": true
__Example__
// Bad
@import "x.css"; ;
.foo { color: #fff;; }
### No Missing End Of Source Newline

Disallow missing end-of-source newlines.

[Rule](http://stylelint.io/user-guide/rules/no-missing-end-of-source-newline/)
"no-missing-end-of-source-newline": true
__Example__
//Good
a { color: pink; } \n ```