4.0.0 • Published 6 years ago
@thibaudcolas/stylelint-config-cookbook v4.0.0
@thibaudcolas/stylelint-config-cookbook
Shareable stylelint config for CSS and SCSS, with a strict baseline
Usage
Install stylelint and the config:
npm install --save-dev stylelint @thibaudcolas/stylelint-config-cookbookThen configure stylelint to use this config. As a stylelint.config.js in the root of your project:
module.exports = {
// https://github.com/thibaudcolas/stylelint-config-cookbook
extends: "@thibaudcolas/stylelint-config-cookbook",
};Tips
- Use Stylelint’s
--report-needless-disablesflag to ensure you do not use morestylelint-disablecomments than needed.
Related tools
To get the most out of this config, it is assumed that projects have the following tools set up:
- Prettier for automated formatting of stylesheets.
- Browserslist for the definition of target browsers (along with autoprefixer and @babel/preset-env).
Conventions
The overarching principle behind this config is to make it simpler to maintain stylesheets in large-scale projects. This means:
- Support for large-scale CSS architectures like ITCSS.
- Mandatory reusable values (via variables and functions) for properties that impact the overall consistency of the UI, e.g. colors and attributes of fonts.
- A low maximum specificity, to prevent abuse of the CSS cascade (or altogether discourage usage of styles overrides beyond single components).
- Blanket ban of CSS/SCSS features that make it harder to maintain stylesheets – id selectors (never), element selectors (max 1), nested properties, etc).
Rules
Cookbook config
color-named:neverdeclaration-block-no-shorthand-property-overridesshorthand-property-no-redundant-valuesdeclaration-no-importantselector-max-id:0selector-max-type:1selector-no-qualifying-typemax-nesting-depth:3selector-max-specificity:0,3,0value-no-vendor-prefixfunction-calc-no-invalidproperty-no-vendor-prefixselector-no-vendor-prefixmedia-feature-name-no-vendor-prefixat-rule-no-vendor-prefixscss/at-rule-no-unknownscss/declaration-nested-properties:neverscss/selector-no-redundant-nesting-selectorscss/percent-placeholder-pattern:^do-not-use-placeholders$scss/at-function-named-arguments:alwaysscss/at-mixin-named-arguments:alwaysscss/dollar-variable-no-missing-interpolationscss/at-mixin-argumentless-call-parentheses:alwaysscss/media-feature-value-dollar-variable:alwaysscss/no-duplicate-dollar-variablesscss/no-duplicate-mixinsscss/map-keys-quotes:alwaysscss/function-unquote-no-unquoted-strings-insidescss/function-quote-no-quoted-strings-insidescss/dimension-no-non-numeric-valuesscss/comment-no-loudscss/at-import-partial-extension:neverscss/at-if-no-nullscss/at-each-key-value-single-lineplugin/declaration-block-no-ignored-propertiesscale-unlimited/declaration-strict-value:/color/, z-index, font-size, font-family, ignoreKeywords: currentColor, inherit, transparent, initialplugin/no-unsupported-browser-features:true, ignore: user-select-none, css3-cursors, viewport-units, outline, css-appearancea11y/content-property-no-static-valuea11y/font-size-is-readablea11y/media-prefers-reduced-motiona11y/no-obsolete-attributea11y/no-obsolete-elementa11y/no-text-align-justifyorder/order:dollar-variables, custom-properties, type: at-rule, hasBlock: false, declarations, rules, type: at-rule, hasBlock: trueorder/properties-order:groupName: All, properties: all, groupName: Position, properties: position, top, right, bottom, left, z-index, groupName: Display mode, properties: box-sizing, display, groupName: Flexbox, properties: flex, flex-basis, flex-direction, flex-flow, flex-grow, flex-shrink, flex-wrap, groupName: Grid, properties: grid, grid-area, grid-template, grid-template-areas, grid-template-rows, grid-template-columns, grid-row, grid-row-start, grid-row-end, grid-column, grid-column-start, grid-column-end, grid-auto-rows, grid-auto-columns, grid-auto-flow, grid-gap, grid-row-gap, grid-column-gap, groupName: Align, properties: align-content, align-items, align-self, groupName: Justify, properties: justify-content, justify-items, justify-self, groupName: Order, properties: order, groupName: Box model, properties: float, width, min-width, max-width, height, min-height, max-height, padding, padding-top, padding-right, padding-bottom, padding-left, margin, margin-top, margin-right, margin-bottom, margin-left, overflow, overflow-x, overflow-y, -webkit-overflow-scrolling, -ms-overflow-x, -ms-overflow-y, -ms-overflow-style, clip, clear, groupName: Typography, properties: font, font-family, font-size, font-style, font-weight, font-variant, font-size-adjust, font-stretch, font-effect, font-emphasize, font-emphasize-position, font-emphasize-style, -webkit-font-smoothing, -moz-osx-font-smoothing, font-smooth, hyphens, line-height, color, text-align, text-align-last, text-emphasis, text-emphasis-color, text-emphasis-style, text-emphasis-position, text-decoration, text-indent, text-justify, text-outline, -ms-text-overflow, text-overflow, text-overflow-ellipsis, text-overflow-mode, text-shadow, text-transform, text-wrap, -webkit-text-size-adjust, -ms-text-size-adjust, letter-spacing, word-break, word-spacing, word-wrap, overflow-wrap, tab-size, white-space, vertical-align, list-style, list-style-position, list-style-type, list-style-image, groupName: Accessibility & Interactions, properties: pointer-events, -ms-touch-action, touch-action, cursor, visibility, zoom, table-layout, empty-cells, caption-side, border-spacing, border-collapse, content, quotes, counter-reset, counter-increment, resize, user-select, nav-index, nav-up, nav-right, nav-down, nav-left, groupName: Background & Borders, properties: background, background-color, background-image, -ms-filter: \\'progid: DXImageTransform.Microsoft.gradient, filter: progid: DXImageTransform.Microsoft.gradient, filter: progid: DXImageTransform.Microsoft.AlphaImageLoader, filter, background-repeat, background-attachment, background-position, background-position-x, background-position-y, background-clip, background-origin, background-size, background-blend-mode, isolation, border, border-color, border-style, border-width, border-top, border-top-color, border-top-style, border-top-width, border-right, border-right-color, border-right-style, border-right-width, border-bottom, border-bottom-color, border-bottom-style, border-bottom-width, border-left, border-left-color, border-left-style, border-left-width, border-radius, border-top-left-radius, border-top-right-radius, border-bottom-right-radius, border-bottom-left-radius, border-image, border-image-source, border-image-slice, border-image-width, border-image-outset, border-image-repeat, outline, outline-width, outline-style, outline-color, outline-offset, box-shadow, mix-blend-mode, filter: progid: DXImageTransform.Microsoft.Alpha(Opacity, -ms-filter: \\'progid: DXImageTransform.Microsoft.Alpha, opacity, -ms-interpolation-mode, groupName: SVG Presentation Attributes, properties: alignment-baseline, baseline-shift, dominant-baseline, text-anchor, word-spacing, writing-mode, fill, fill-opacity, fill-rule, stroke, stroke-dasharray, stroke-dashoffset, stroke-linecap, stroke-linejoin, stroke-miterlimit, stroke-opacity, stroke-width, color-interpolation, color-interpolation-filters, color-profile, color-rendering, flood-color, flood-opacity, image-rendering, lighting-color, marker-start, marker-mid, marker-end, mask, shape-rendering, stop-color, stop-opacity, groupName: Transitions & Animation, properties: transition, transition-delay, transition-timing-function, transition-duration, transition-property, transform, transform-origin, animation, animation-name, animation-duration, animation-play-state, animation-timing-function, animation-delay, animation-iteration-count, animation-direction
Rules of stylelint-config-standard
at-rule-name-space-after:alwayscolor-hex-length:shortcomment-empty-line-before:always, except: first-nested, ignore: stylelint-commandscomment-whitespace-inside:alwayscustom-property-empty-line-before:always, except: after-custom-property, first-nested, ignore: after-comment, inside-single-line-blockdeclaration-bang-space-after:neverdeclaration-bang-space-before:alwaysdeclaration-block-single-line-max-declarations:1declaration-empty-line-before:always, except: after-declaration, first-nested, ignore: after-comment, inside-single-line-blockfunction-name-case:lowerfunction-whitespace-after:alwayslength-zero-no-unitmedia-feature-colon-space-after:alwaysmedia-feature-colon-space-before:nevermedia-feature-parentheses-space-inside:nevermedia-feature-range-operator-space-after:alwaysmedia-feature-range-operator-space-before:alwaysselector-attribute-brackets-space-inside:neverselector-attribute-operator-space-after:neverselector-attribute-operator-space-before:neverselector-pseudo-class-parentheses-space-inside:neverselector-pseudo-element-colon-notation:doubleselector-type-case:lowervalue-keyword-case:lowerblock-no-emptycolor-no-invalid-hexcomment-no-emptydeclaration-block-no-duplicate-properties:true, ignore: consecutive-duplicates-with-different-valuesfont-family-no-duplicate-namesfont-family-no-missing-generic-family-keywordfunction-calc-no-unspaced-operatorfunction-linear-gradient-no-nonstandard-directionkeyframe-declaration-no-importantmedia-feature-name-no-unknownno-descending-specificityno-duplicate-at-import-rulesno-duplicate-selectorsno-empty-sourceno-invalid-double-slash-commentsproperty-no-unknownselector-pseudo-class-no-unknownselector-pseudo-element-no-unknownselector-type-no-unknownstring-no-newlineunit-no-unknownselector-attribute-quotes:alwaysat-rule-semicolon-space-before:never
Disabled rules
Rules that are turned off on purpose.
at-rule-no-unknownat-rule-empty-line-beforeat-rule-name-caseat-rule-semicolon-newline-afterblock-closing-brace-empty-line-beforeblock-closing-brace-newline-afterblock-closing-brace-newline-beforeblock-closing-brace-space-beforeblock-opening-brace-newline-afterblock-opening-brace-space-afterblock-opening-brace-space-beforecolor-hex-casedeclaration-block-semicolon-newline-afterdeclaration-block-semicolon-space-afterdeclaration-block-semicolon-space-beforedeclaration-block-trailing-semicolondeclaration-colon-newline-afterdeclaration-colon-space-afterdeclaration-colon-space-beforefunction-comma-newline-afterfunction-comma-space-afterfunction-comma-space-beforefunction-max-empty-linesfunction-parentheses-newline-insidefunction-parentheses-space-insideindentationmax-empty-linesmedia-feature-name-casemedia-query-list-comma-newline-aftermedia-query-list-comma-space-aftermedia-query-list-comma-space-beforeno-eol-whitespaceno-missing-end-of-source-newlinenumber-leading-zeronumber-no-trailing-zerosproperty-caserule-empty-line-beforeselector-combinator-space-afterselector-combinator-space-beforeselector-descendant-combinator-no-non-spaceselector-list-comma-newline-afterselector-list-comma-space-beforeselector-max-empty-linesselector-pseudo-class-caseselector-pseudo-element-caseunit-casevalue-list-comma-newline-aftervalue-list-comma-space-aftervalue-list-comma-space-beforevalue-list-max-empty-linesno-extra-semicolonslinebreaksmax-line-lengthfunction-comma-newline-beforevalue-list-comma-newline-beforedeclaration-block-semicolon-newline-beforeblock-closing-brace-space-afterblock-opening-brace-newline-beforeselector-list-comma-newline-beforeselector-list-comma-space-aftermedia-query-list-comma-newline-beforeat-rule-name-newline-afterno-empty-first-lineunicode-bomstring-quotes
Unused rules
Rules that are not configured.
a11y/line-height-is-vertical-rhythmeda11y/media-prefers-color-schemea11y/no-display-nonea11y/no-outline-nonea11y/no-spread-texta11y/selector-pseudo-class-focuscomment-word-blacklistcustom-media-patterncustom-property-patterndeclaration-block-no-redundant-longhand-propertiesdeclaration-property-unit-blacklistdeclaration-property-unit-whitelistdeclaration-property-value-blacklistdeclaration-property-value-whitelistfont-family-name-quotesfont-weight-notationfunction-blacklistfunction-url-no-scheme-relativefunction-url-quotesfunction-url-scheme-blacklistfunction-url-scheme-whitelistfunction-whitelistkeyframes-name-patternlinebreaksmedia-feature-name-blacklistmedia-feature-name-value-whitelistmedia-feature-name-whitelistno-empty-first-lineno-unknown-animationsnumber-max-precisionproperty-blacklistproperty-whitelistscss/partial-no-importscss/selector-nest-combinatorsselector-attribute-operator-blacklistselector-attribute-operator-whitelistselector-class-patternselector-combinator-blacklistselector-combinator-whitelistselector-max-attributeselector-max-classselector-max-combinatorsselector-max-compound-selectorsselector-max-pseudo-classselector-max-universalselector-nested-patternselector-pseudo-class-blacklistselector-pseudo-class-whitelistselector-pseudo-element-blacklistselector-pseudo-element-whitelisttime-min-millisecondsunit-blacklistunit-whitelistvalue-keyword-casescss/dollar-variable-patternscss/at-function-patternscss/at-import-partial-extension-blacklistscss/at-import-partial-extension-whitelistscss/dollar-variable-defaultscss/no-dollar-variablesscss/selector-no-union-class-namescss/function-color-relativescss/at-rule-conditional-no-parenthesesat-rule-blacklistat-rule-property-requirelistat-rule-whitelistcolor-no-hexselector-id-patternorder/properties-alphabetical-orderscss/at-else-closing-brace-newline-afterscss/at-else-closing-brace-space-afterscss/at-else-empty-line-beforescss/at-else-if-parentheses-space-beforescss/at-extend-no-missing-placeholderscss/at-function-parentheses-space-beforescss/at-if-closing-brace-newline-afterscss/at-if-closing-brace-space-afterscss/at-import-no-partial-leading-underscorescss/at-mixin-parentheses-space-beforescss/at-mixin-patternscss/declaration-nested-properties-no-divided-groupsscss/dollar-variable-colon-newline-afterscss/dollar-variable-colon-space-afterscss/dollar-variable-colon-space-beforescss/dollar-variable-empty-line-beforescss/double-slash-comment-empty-line-beforescss/double-slash-comment-inlinescss/double-slash-comment-whitespace-insidescss/operator-no-newline-afterscss/operator-no-newline-beforescss/operator-no-unspaced