The Absolute Beginner’s Guide to Sass

css

What is Sass?

Sass stands for Syntactically Awesome Stylesheets Sass, and was created by Hampton Catlin.

It’s a way to simplify your CSS workflow, making development and maintenance tasks easier.

For instance, have you ever had to do a find-and-replace in your stylesheet to change a particular HEX color for a particular indecisive client?

Or had to open up the calculator app to figure out a column width in a multi-column design?

Sass introduces new concepts such as variables, mixins, nestings and selector inheritance.

Sass looks similar to CSS, but without the semi-colons and curly braces.

Given the following CSS:


#skyscraper_ad
{
  display: block;
  width: 120px;
  height: 600px; 
}

#leaderboard_ad 
{
  display: block;
  width: 728px;
  height: 90px; 
}

You’d write the following in Sass:


#skyscraper_ad
  display: block
  width: 120px
  height: 600px

#leaderboard_ad 
  display: block
  width: 728px
  height: 90px

Sass uses two-space indentations to define code nesting.

Now that you see how Sass is written, let’s look at some of the things that makes Sass so awesome.

Variables

To declare a variable in Sass you do $ followed by the name of the variable, in this case red, a colon and then the value of that varible.


$red: #FF4848

Sass has built-in functions like darken and lighten that you can use to modify variables.

In this example the paragraphs will be a darker red than the h1 tags.


$red: #FF4848
$fontsize: 12px
h1
  color: $red

p
  color: darken($red, 10%)

You can perform operations such as add and subtract variables of the same type. If we wanted to manually darken a color slightly all we would do is subtract away a small HEX value say of #101. If we wanted to adjust a font size by 10px all we would do is add it.


p.addition_and_subtraction
  color: $red - #101
  font-size: $fontsize + 10px

Nesting

There are two types of nesting.

Selector Nesting

“Selector nesting” is the first type of nesting.

Nesting your Sass is similar to how you would nest your HTML.


$fontsize: 12px

.speaker
  .name
    font:
      weight: bold
      size: $fontsize + 10px
  .position
    font:
      size: $fontsize

If you look at the generated CSS, you can see that nesting the .name class under the .speaker class generates the CSS selector .speaker .name.


.speaker .name {
  font-weight: bold;
  font-size: 22px; }
.speaker .position {
  font-size: 12px; }

Property Nesting

“Property nesting” is the second type of nesting.

You can nest properties with the same prefix.


$fontsize: 12px

.speaker
  .name
    font:
      weight: bold
      size: $fontsize + 10px
  .position
    font:
      size: $fontsize

In the above example here we have font: and then on a new line and an extra indentation of two spaces, and then what you’d typically put put after the hyphenated prefix.

So when we write the property font: a new line, an extra two spaces, the property weight:, it becomes the CSS property of font-weight:.


.speaker .name {
  font-weight: bold;
  font-size: 22px; }
.speaker .position {
  font-size: 12px; }

All hyphenated selectors are supported.

Nesting like this is an awesome way to organise and structure your CSS, and keeps you from unnecessarily repeating yourself.

Mixins

Mixins are another awesome feature of Sass.

Mixins allow you to reuse whole blocks of Sass code, you can even pass arguments to them! What’s also cool is that you can specify default values.

To define a mixin, use the @mixin Sass keyword, followed by the name you’ve chosen for the mixin. If you require any parameters, include a pair of parentheses and your arguments. If you want to add any default values, add a colon followed by the desired value.

Including the mixin is easy, use the @include Sass keyword followed by the mixin name with any parameters declared in parentheses.

Take the following example:


@mixin border-radius($amount: 5px)
  -moz-border-radius: $amount
  -webkit-border-radius: $amount
  border-radius: $amount

h1
  @include border-radius(2px)

.speaker
  @include border-radius

The above Sass will get compiled down to the following CSS:


h1 {
  -moz-border-radius: 2px;
  -webkit-border-radius: 2px;
  border-radius: 2x; }

.speaker {
  -moz-border-radius: 5px;
  -webkit-border-radius: 5px;
  border-radius: 5px; }  

We specified the radius in h1, but for the .speaker we didn’t specify anything, therefore the default of 5px is used.

Selector Inheritance

Selector Inheritance allows you to tell any selector to inherit all the styles from another selector, which is pretty awesome.

To use it, use the Sass keyword @extend, followed by a selector you want to inherit from, and all of the selector’s style properties will be inherited.


h1
  border: 4px solid #ff9aa9

.speaker
  @extend h1
  border-width: 2px 

The above is compiled to:


h1, .speaker {
  border: 4px solid #ff9aa9; }

.speaker {
  border-width: 2px; }

Try Sass

Try Online

You can also try Sass online without installing it on your local machine.

You need to select the Indented Syntax at the bottom before rendering.

Installation

Sass is a Ruby gem. Assuming you have Ruby gems installed simply run gem install sass in your terminal.

Sass can be used as a command line tool to process your Sass files into CSS files.

You can do this by typing sass --watch sass_folder:stylesheets_folder where sass_folder is the folder of where your sass files are kept (file extensions must be .sass) and stylesheets_folder is your output folder. The --watch option means it’ll watch this folder and if we make any changes to files they will get converted as soon as you save them.

Converting CSS to Sass

You start using Sass in your exisiting projects by using sass-convert.

Enter the folder you want to convert in your terminal and type in sass-convert --from css --to sass -R . where -R means recursively and . means the current directory.

A Note on Sassy CSS (SCSS)

In this post I’ve only covered the Sass Indented Syntax. However, there is a newer format called SCSS, or Sassy CSS. The difference is that Sassy CSS looks more like what you’re used to with CSS, but it has “Sassy” features like variables, mixins, nesting and selector inheritance.

Conclusion

Sass is really awesome at keeping your styling well structured and DRY. There’s even projects like Compass that uses mixins to include CSS frameworks rather than cluttering your HTML with unsemantic classes.

So what are you waiting for? Try Sass in your next project!

Andrew Chalkley

I'm an alien, I'm a legal alien, I'm an Englishman in Portland. All of my professional life I've worked with computers online. I'm a polyglot programmer and like using the right tools for the job. In my spare time I enjoy spending time with my young family and when I get chance, sticking opponents in Halo 4. You can find me in most places @chalkers.

Comments

Comments are closed.