SCSS / SASS

Sass (or as we commonly use - Scss), is a preprocessed stylesheet language. It adds many features over plain CSS and generally makes working with it on larger projects more sane.

There are two compiling tools for working with Sass: * NodeSass * Compass

We primarily work with NodeSass as it is considerable faster when compiling and can be used in conjunction with Gulp, Webpack and other tools.

Node Sass

You can use Node Sass in place of Compass as long as you have included any missing Compass source SCSS files in your project as Node does not have them baked in by default.

Sass with Gulp

We commonly use Sass in conjunction with the Gulp task runner. There is a package for gulp integration. See the gulp-sass package for documentation on how to integrate with your gulpfile.js

Gulp Sass and Compass

Magento 1 uses the Compass mixins that are not provided out of the box and will fail compilation if they are not found, to get around this and to avoid using compass (which is slow) we can use compass-importer which will handle importing the stylesheets.

See the package page for more information.

If for what ever reason you can not using the importer, you can manually download the compass mixin files and place them in the correct places for your project.

Features

Nested rules

One of the big benefits of using Scss (or Less for that matter) is the ability to use nested selectors.

For example the following CSS:

1
2
3
4
5
6
7
.post {

}
.post .title, .post .alt-title  {
}
.post .alt-title {
}

Can be written as:

1
2
3
4
5
6
7
8
.post {
    .title {

    }
    .alt-title {
        @extend .title;
    }
}

Partial files and organisation

Scss files can be split in to multiple partials and imported in to a top level stylesheet. These partials are never compile on their own and have to be imported.

As an extra added benefit, you can prefix the name of the partial Scss file with a _ to prevent it being picked up by the compiler, this marks the file as an explicit partial.

So your big stylesheet.scss file with 10,000+ lines can become multiple smaller sheets making it easier to work with and lends a hand to using source maps.

1
2
3
4
5
|-- theme
|   |-- _contact-form7.scss
|   |-- _theme.scss
|   `-- _theme_variables.scss
|-- theme.scss

Importing

We can import other stylesheets and partials.

1
@import "src/my-partial";

Note that you do not need to use the .scss extension (optional) or the _ file name prefix (also optional) Sass will interpret the filename correctly.

Resources