DEV Community

Giulia Chiola
Giulia Chiola

Posted on • Updated on • Originally published at giuliachiola.dev

Styleguide setup

Regardless of which tool I use to build my styleguides, it helps a lot to have a checklist of packages I need for (almost) every project setup.

Styles

Node-sass is a library that provides binding for Node.js to LibSass, the C version of the popular stylesheet preprocessor, Sass.

npm install node-sass --save-dev
Enter fullscreen mode Exit fullscreen mode

PostCSS is a tool for transforming styles with JS plugins. These plugins can lint your CSS, support variables and mixins, transpile future CSS syntax, inline images, and more.

npm install postcss postcss-cli postcss-preset-env postcss-import --save-dev
Enter fullscreen mode Exit fullscreen mode

To configure postcss, add .postcss.config.js in project root folder

๐Ÿ™ GitHub snippet

A mighty, modern linter that helps you avoid errors and enforce conventions in your styles.

npm install stylelint stylelint-scss stylelint-order --save-dev
Enter fullscreen mode Exit fullscreen mode

To configure stylelint, add .stylelintrc.json in project root folder

๐Ÿ™ GitHub snippet

A Sass mixin that helps you compose media queries in an elegant way.

npm install sass-mq --save-dev
Enter fullscreen mode Exit fullscreen mode

Add sass-mq configuration in styles folder src/scss/00-settings/_sass-mq-config.scss

๐Ÿ™ GitHub snippet

In a static project, as a styleguide, to use sass-mq in our styles, we have to import it from node_modules and add our configuration

// src/scss/00-settings/__settings.scss

@import 'node_modules/sass-mq/_mq.scss';
@import 'sass-mq-config';
Enter fullscreen mode Exit fullscreen mode

In projects that use webpack, we could add sass-mq using this syntax

// With webpack (and boilerplates such as create-react-app)
@import '~sass-mq';
Enter fullscreen mode Exit fullscreen mode

This project is the Sass version of Normalize.css, a collection of HTML element and attribute rulesets to normalize styles across all browsers.

npm install normalize-scss --save-dev
Enter fullscreen mode Exit fullscreen mode

Import normalize-scss from node_modules

// src/scss/02-generic/__generic.scss

@import 'node_modules/normalize-scss/sass/_normalize.scss';
Enter fullscreen mode Exit fullscreen mode

Styles structure

  • scssย folder contains BEMIT SASS file structure
  • cssย folder contains compiled CSS output
โ”œโ”€โ”€ src/
โ”‚ย ย  โ”œโ”€โ”€ scss/
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ 00-settings/
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ 01-tools/
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ 02-generic/
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ 03-elements/
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ 04-objects/
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ 06-components/
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ 07-utilities/
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ style.scss
โ”‚ย ย  โ”œโ”€โ”€ css/
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ style.css
Enter fullscreen mode Exit fullscreen mode

๐Ÿ“š More info

BEMIT: Taking the BEM Naming Convention a Step Further

Styles scripts

Use package.json scriptsย object to list all styles commands

"scripts": {
    "_____________________________Styles_____________________________": "",
    "stylelint": "stylelint 'src/scss/**/*.scss' || echo \"Stylelint failed for some file(s).\"",
    "cleanup:dev": "rimraf dist src/css/*.css",
    "scss:to:css:dev": "node-sass --output-style expanded src/scss/ -o src/css/",
    "css:to:postcss:dev": "postcss src/css --dir dist/css",
    "styles:dev": "npm run stylelint && npm run scss:to:css:dev && npm run css:to:postcss:dev",
  },
Enter fullscreen mode Exit fullscreen mode

SVG

Node.js tool for optimizing SVG files

npm install svgo --save-dev
Enter fullscreen mode Exit fullscreen mode

Create two folders, one for original SVG files src/svgย and a second one optimized SVGs src/svgo

โ”œโ”€โ”€ src/
โ”‚ย ย  โ”œโ”€โ”€ svg/
โ”‚ย ย  โ”‚ย ย  git.svg
โ”‚ย ย  โ”‚ย ย  nodejs.svg
โ”‚ย ย  โ”‚ย ย  vuejs.svg
โ”‚ย ย  โ”œโ”€โ”€ svgo/
โ”‚ย ย  โ”‚ย ย  git.svg (optimized)
โ”‚ย ย  โ”‚ย ย  nodejs.svg (optimized)
โ”‚ย ย  โ”‚ย ย  vuejs.svg (optimized)
Enter fullscreen mode Exit fullscreen mode

Add SVGO script configuration

๐Ÿ™ GitHub snippet

SVG scripts

Use package.json scriptsย object to list all SVG manipulation commands

"scripts": {
  "_____________________________SVG________________________________________________": "",
  "clean:svgo": "rimraf src/icons/svgo/*",
  "svg:optimize": "npm run clean:svgo && node scripts/svgo.js",
}
Enter fullscreen mode Exit fullscreen mode

Ok now I am ready to develop my components and build a styleguide! ๐Ÿ’ช๐Ÿป

Top comments (1)

Collapse
 
titungdup profile image
dhondup

Can we use stylelint-order to sort CSS working files?