When comparing Stylus vs Sass, the Slant community recommends Sass for most people. In the question“What are the best CSS preprocessors/postprocessors?” Sass is ranked 1st while Stylus is ranked 2nd. The most important reason people chose Sass is:
You are able to declare custom functions with Sass (for example, converting units) which can be easily invoked, even when using shorthand properties. This results in cleaner, more reusable code.
Ranked in these QuestionsQuestion Ranking
Pros
Pro Clean syntax
Stylus has an extremely terse syntax. Colons, semicons and braces are all optional allowing you to write Stylus code however you want.
hover-darken(percent)
if @background
&:hover
background: darken(@background, percent)
.test
background: blue
hover-darken(50%)
The hierarchy is required to be whitespace indented which makes it easier to identify which parent selectors child selectors belong to.
Pro Powerful feature set
Not only does Stylus support all the features from Less and Sass, it provides features not found anywhere else:
- You can get properties from parents and pull them into children and/or mixins - if the property isn't found, it will bubble up until it finds a match
- Introspective API, where a CSS block can tell if it’s at root level or not and change its output based on this
- Splats - taking variable amount of arguments in as an array
- Automatically vendor prefixes @keyframes
- Pass a CSS literal block wherever you want
- Convert files to base64
Pro Transparent mixins
One of Stylus' distinguishing features is transparent mixins: reusuable, possibly dynamic styles that look exactly like native CSS properties. This is particularly useful for using future non-prefixed properties and having them transparently expand to their prefixed counterparts without any special, preprocessor-specific syntax.
Pro Easy to integrate in projects already using npm
Stylus runs on node.js which makes it very easy to integrate into your project if you're using npm.
Pro Powerful @extend support
@extend gives inheritance and unlike for other preprocessors, you can pass any CSS selector, not just classes.
Pro Awesome error reporting
Stylus has clear and detailed error reporting that includes stack traces and line numbers.
Pro Lots of mixin libraries
Nib is Stylus's answer to Compass, but with the advantage of transparent mixins.
Ride css add dozens of useful mixins to Stylus. Compatible with axis, nib and other mixins libraries.
Roots is a awesome toolkit that contains a CSS library for Stylus that provides the benefits of Nib and more. It is essentially a collection of mixins that add a variety of enhancements to the Stylus workflow.
Pro Convert files to base64
Stylus can also convert files to base64 which provides the following advantages:
- Easier to maintain
- Gives you the cleanliness of a URL link resource as well the benefits of base64 encoding
- Reducing the number of requests
Pro Easier to learn than some of its competitors
Pro Can do rgba(#hex, alpha)
Pro Great documentation
Pro Large set of built-in functions
Functions like max(), min(), sum(), all collour handling functions are all there.
Pro It has the biggest feature set. Can do more then less or sass
Pro Powerful advanced function features
You are able to declare custom functions with Sass (for example, converting units) which can be easily invoked, even when using shorthand properties. This results in cleaner, more reusable code.
Pro Nested selectors
Sass allows you to nest selectors which results in code that is both faster to write and cleaner to read.
For example, this:
.parent
color: blue
.child
color: yellow
Will compile to this:
.parent {
color: blue;
}
.parent .child {
color: yellow;
}
Pro Rapid development
Another big advantage for Sass is the very active community pushing the development forward at a rapid pace. Sass is constantly coming out with bug fixes, and are often the first to come out with improvements.
This is an important factor to keep in mind when picking a preprocessor to invest your time into.
Pro Extends CSS maintaining compatibility with CSS standards specification
It comes with two possible syntaxes:
- Sass - No parens or semicolons allowed and the nesting is dictated with whitespace.
- SCSS - SCSS syntax is a superset of CSS – which means SCSS can be written as CSS, but has been expanded to include the features of Sass as well.
SCSS is easier to pick up for beginners and Sass has a cleaner syntax. Having both syntaxes means you can pick the one that best suits your coding style.
The mandatory syntax rules for both SCSS and Sass results in a more consistent code. For a more detailed analysis between Sass and SCSS go here. To see a nice comparison of the Sass syntax against CSS and SCSS go here.
Pro Output minified CSS
Sass simplifies minifying CSS files by offering a one-line command that will output a minified version.
Pro Easy to learn
It's very comfortable and easy to write/learn Sass, even for beginners.
Pro Compass framework provides added features
Sass can be used with a framework called Compass, which provides additional functions and mixins which can reduce the amount of code you have to write.
For example, Compass will take care of vendor prefixes.
This:
div {
background-image: -webkit-linear-gradient(#F00, #000);
background-image: -moz-linear-gradient(#F00, #000);
background-image: -o-linear-gradient(#F00, #000);
background-image: linear-gradient(#F00, #000);
}
Can be written as:
.gradient {
@include background-image(linear-gradient(#F00, #000));
}
For a full list of features, check out the Compass documentation.
Pro Source maps support
Rather than being limited to editing the outputted CSS file in devtools, with source maps you are able to manipulate the original .scss file.
Pro Libsass - C/C++ port of Sass
There is also a C/C++ port of the Sass CSS precompiler called Libsass that decouples Sass from Ruby. It is very fast, portable and easy to build and integrate with a variety of platforms and languages.
Pro New sass package means you no longer need external dependencies
The latest implementation of Sass is written in Dart, and compiles to pure JS with no native code or external dependencies, means you no longer need Ruby or libSass.
Pro Easy to use with ruby apps
Since it's written in Ruby, it's easier and faster to use with Ruby apps.
Cons
Con Community is weak, feels more like a pet project
Con Not under active development
Development of stylus has stagnated, there are lots of known bugs and it does not work well newer features like CSS Grid or custom poperties. See https://github.com/stylus/stylus/issues
Con Ambiguous syntax
The Stylus syntax is very loose and that leads to ambiguity where some definitions can mean different things. For example, hashed objects cannot be used when you choose to omit colons in your definitions, because the dot notated object getters could also be a nested class selector. As a result, you lose being able to use hashed object getters if you decided to write Stylus without colons.
Con Not as popular as Less and Sass
Stylus is younger than both Less and Sass, and not yet at the same level of popularity. As a result, Stylus currently has a smaller and less active community than the two more popular options.
Con Inconsistent style/flavour in different projects
Due to having such a loose syntax, the coding style can vary between different Stylus projects, making it hard to apply styles from other projects that use a different syntax style — at least if you care for consistency.
Con Heavily reliant on whitespaces
Stylus relies heavily on whitespaces to separate and define code blocks. While this makes for a cleaner syntax, it's also easier to make mistakes when indenting stuff, especially when working with someone else's code where you don't use the same style of indentation.
Con Requires Ruby or libSass
To compile Sass, it needs either Ruby or libSass installed locally.
Con Noisy syntax
There is many unnecessary characters when using the SCSS syntax.
{}:;@
However using the Sass syntax eliminates them.