Tutorial
- Sass stands for Syntactically Awesome Stylesheet
- Sass is an extension to CSS
- Sass is a CSS pre-processor
- Sass is completely compatible with all versions of CSS
- Sass reduces repetition of CSS and therefore saves time
- Sass was designed by Hampton Catlin and developed by Natalie Weizenbaum in 2006
- Sass is free to download and use
Stylesheets are getting larger, more complex, and harder to maintain. This is where a CSS pre-processor can help. Sass lets you use features that do not exist in CSS, like variables, nested rules, mixins, imports, inheritance, built-in functions, and other stuff.
A browser does not understand Sass code. Therefore, you will need a Sass pre-processor to convert Sass code into standard CSS. This process is called transpiling. So, you need to give a transpiler (some kind of program) some Sass code and then get some CSS code back.
- Sass String Functions
- Sass Numeric Functions
- Sass List Functions
- Sass Map Functions
- Sass Selector Functions
- Sass Introspection Functions
- Sass Color Functions
- Operating system - Sass is platform independent
- Browser support - Sass works in Edge/IE (from IE 8), Firefox, Chrome, Safari, Opera
- Programming language - Sass is based on Ruby
Read more about Sass at the official Sass web site: https://sass-lang.com/
There are several ways to install Sass in your system. There are many
applications
that will get you up and running with Sass in a few minutes for Mac, Windows, and Linux.
Some of these are free, but some are paid apps.
Applications
Command Line
- sass source/stylesheets/index.scss build/stylesheets/index.css
- npm install -g sass
- choco install sass
- brew install sass/sass/sass
You can read more about them here: sass-lang.com/install
Variables are a way to store information that you can re-use later.
- strings
- numbers
- colors
- booleans
- lists
- nulls
$variablename: value;
The default behavior for variable scope can be overridden by using the
!global switch. !global indicates that a variable is global,
which
means that it is accessible on all levels
@include keyword.
Sass lets you nest CSS selectors in the same way as HTML
Look at an example of some Sass code for a site's navigation:
SCSS Syntax:
nav {
ul {
margin: 0;
padding: 0;
list-style: none;
}
li {
display: inline-block;
}
a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
}
CSS Output:
nav ul {
margin: 0;
padding: 0;
list-style: none;
}
nav li {
display: inline-block;
}
nav a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
Notice that in Sass, the ul, li, and a
selectors are nested inside the nav selector.
SCSS Syntax:
font: {
family: Helvetica, sans-serif;
size: 18px;
weight: bold;
}
text: {
align: center;
transform: lowercase;
overflow: hidden;
}
CSS Output:
font-family: Helvetica, sans-serif; font-size: 18px; font-weight: bold; text-align: center; text-transform: lowercase; text-overflow: hidden;
Just like CSS, Sass also supports the @import directive.
The @import directive allows you to include the content of one file in
another.
The CSS @import directive has a major drawback due to performance issues;
it
creates an extra HTTP request each time you call it. However, the Sass
@import
directive includes the file in the CSS; so no extra HTTP call is required at runtime!
@import filename;
Tip: You do not need to specify a file extension, Sass automatically assumes that
you
mean a .sass or .scss file. You can also import CSS files. The @import
directive imports the file and any variables or mixins defined in the imported file can
then
be used in the main file
@import "variables"; @import "colors"; @import "reset";By default, Sass transpiles all the .scss files directly. However, when you want
to
import a file, you do not need the file to be transpiled directly.
Sass has a mechanism for this: If you start the filename with an underscore, Sass will
not
transpile it. Files named this way are called partials in Sass.
So, a partial Sass file is named with a leading underscore:
_filename;
The @mixin directive lets you create CSS code that is to be reused
throughout the website.
The @include directive is created to let you use
(include) the mixin.
A mixin is defined with the @mixin directive.
SCSS @mixin Syntax:
@mixin name {
property: value;
property: value;
property: value;
...
}
SCSS Syntax:
@mixin important-text {
color: red;
font-size: 25px;
font-weight: bold;
border: 1px solid blue;
}
@mixin important-text { } and
@mixin
important_text { } are considered as the same mixin!
The @include directive is used to include a mixin.
SCSS @include mixin Syntax:
selector {
@include: mixin-name;
}
SCSS Syntax:
.danger {
@include important-text;
}
The @extend directive lets you share a set of CSS properties from
one
selector to another
The @extend directive is useful if you have almost identically styled
elements
that only differ in some small details
The following Sass example first creates a basic style for buttons (this style will be
used
for most buttons). Then, we create one style for a "Report" button and one style for a
"Submit" button. Both "Report" and "Submit" button inherit all the CSS properties from
the
.button-basic class, through the @extend directive. In addition, they have
their own colors defined
SCSS Syntax:
.button-basic {
border: none;
padding: 15px 30px;
text-align: center;
font-size: 16px;
cursor: pointer;
}
.button-report {
@extend .button-basic;
background-color: red;
}
.button-submit {
@extend .button-basic;
background-color: green;
color: white;
}
CSS Output:
.button-basic,
.button-report,
.button-submit {
border: none;
padding: 15px 30px;
text-align: center;
font-size: 16px;
cursor: pointer;
}
.button-report {
background-color: red;
}
.button-submit {
background-color: green;
color: white;
}
By using the @extend directive, you do not need to specify several classes
for
an element in your HTML code, like this:
<button
class="button-basic button-report"> Report
this</button>
You just need to specify .button-report to get both sets of styles.
The @extend directive helps keep your Sass code very DRY.