Stylesheet language From Wikipedia, the free encyclopedia
Sass (short for syntactically awesome style sheets) is a preprocessor scripting language that is interpreted or compiled into Cascading Style Sheets (CSS). SassScript is the scripting language itself.
![]() | |
Designed by | Hampton Catlin |
---|---|
Developer | Natalie Weizenbaum, Chris Eppstein |
First appeared | November 28, 2006 |
Stable release | |
Typing discipline | Dynamic |
OS | Cross-platform |
License | MIT License |
Filename extensions | .sass, .scss |
Website | sass-lang |
Major implementations | |
Dart | |
Influenced by | |
CSS (both "indented" and SCSS)
YAML and Haml (indented syntax) Less (SCSS) | |
Influenced | |
Less, Stylus, Tritium, Bootstrap (v4+) |
Sass consists of two syntaxes. The original syntax, called "the indented syntax," uses a syntax similar to Haml.[2][3] It uses indentation to separate code blocks and newline characters to separate rules. The newer syntax, SCSS (Sassy CSS), uses block formatting like that of CSS. It uses braces to denote code blocks and semicolons to separate rules within a block. The indented syntax and SCSS files are traditionally given the extensions .sass and .scss, respectively.[4]
CSS3 consists of a series of selectors and pseudo-selectors that group rules that apply to them. Sass (in the larger context of both syntaxes) extends CSS by providing several mechanisms available in more traditional programming languages, particularly object-oriented languages, but that are not available to CSS3 itself. When SassScript is interpreted, it creates blocks of CSS rules for various selectors as defined by the Sass file. The Sass interpreter translates SassScript into CSS. Alternatively, Sass can monitor the .sass or .scss file and translate it to an output .css file whenever the .sass or .scss file is saved.[5]
The indented syntax is a metalanguage. SCSS is a nested metalanguage and a superset of CSS, as valid CSS is valid SCSS with the same semantics.
SassScript provides the following mechanisms: variables, nesting, mixins,[3] and selector inheritance.[2]
Sass was initially designed by Hampton Catlin and developed by Natalie Weizenbaum.[6][7]
SassScript was implemented in multiple languages, the noteworthy implementations are:
Sass allows variables to be defined. Variables begin with a dollar sign ($
). Variable assignment is done with a colon (:
).[18]
SassScript supports four data types:[18]
Variables can be arguments to or results from one of several available functions.[19] During translation, the values of the variables are inserted into the output CSS document.[2]
SCSS | Sass | Compiled CSS |
---|---|---|
$primary-color: #3bbfce;
$margin: 16px;
.content-navigation {
border-color: $primary-color;
color: darken($primary-color, 10%);
}
.border {
padding: $margin / 2;
margin: $margin / 2;
border-color: $primary-color;
}
|
$primary-color: #3bbfce
$margin: 16px
.content-navigation
border-color: $primary-color
color: darken($primary-color, 10%)
.border
padding: $margin/2
margin: $margin/2
border-color: $primary-color
|
:root{
--primary-color:#3bbfce;
--secondary-color:#2b9eab;
--margin:8px;
}
.content-navigation {
border-color: var(--secondary-color)
color: var(--secondary-color);
}
.border {
padding: 8px;
margin: var(--margin);
border-color: #3bbfce;
}
|
CSS does support logical nesting, but the code blocks themselves are not nested. Sass allows the nested code to be inserted within each other.[2]
SCSS | Sass | Compiled CSS |
---|---|---|
table.hl {
margin: 2em 0;
td.ln {
text-align: right;
}
}
li {
font: {
family: serif;
weight: bold;
size: 1.3em;
}
}
|
table.hl
margin: 2em 0
td.ln
text-align: right
li
font:
family: serif
weight: bold
size: 1.3em
|
table.hl {
margin: 2em 0;
}
table.hl td.ln {
text-align: right;
}
li {
font-family: serif;
font-weight: bold;
font-size: 1.3em;
}
|
More complicated types of nesting including namespace nesting and parent references are discussed in the Sass documentation.[18]
SCSS | Sass | Compiled CSS |
---|---|---|
@mixin table-base {
th {
text-align: center;
font-weight: bold;
}
td, th {
padding: 2px;
}
}
#data {
@include table-base;
}
|
=table-base
th
text-align: center
font-weight: bold
td, th
padding: 2px
#data
+table-base
|
#data th {
text-align: center;
font-weight: bold;
}
#data td, #data th {
padding: 2px;
}
|
Sass allows for iterating over variables using @for
, @each
and @while
, which can be used to apply different styles to elements with similar classes or ids.
Sass | Compiled CSS |
---|---|
$squareCount: 4
@for $i from 1 to $squareCount
#square-#{$i}
background-color: red
width: 50px * $i
height: 120px / $i
|
#square-1 {
background-color: red;
width: 50px;
height: 120px;
}
#square-2 {
background-color: red;
width: 100px;
height: 60px;
}
#square-3 {
background-color: red;
width: 150px;
height: 40px;
}
|
Mixins also support arguments.[2]
Sass | Compiled CSS |
---|---|
=left($dist)
float: left
margin-left: $dist
#data
+left(10px)
|
#data {
float: left;
margin-left: 10px;
}
|
Sass | Compiled CSS |
---|---|
=table-base
th
text-align: center
font-weight: bold
td, th
padding: 2px
=left($dist)
float: left
margin-left: $dist
#data
+left(10px)
+table-base
|
#data {
float: left;
margin-left: 10px;
}
#data th {
text-align: center;
font-weight: bold;
}
#data td, #data th {
padding: 2px;
}
|
While CSS3 supports the Document Object Model (DOM) hierarchy, it does not allow selector inheritance. In Sass, inheritance is achieved by inserting a line inside of a code block that uses the @extend keyword and references another selector. The extended selector's attributes are applied to the calling selector.[2]
Sass | Compiled CSS |
---|---|
.error
border: 1px #f00
background: #fdd
.error.intrusion
font-size: 1.3em
font-weight: bold
.badError
@extend .error
border-width: 3px
|
.error, .badError {
border: 1px #f00;
background: #fdd;
}
.error.intrusion,
.badError.intrusion {
font-size: 1.3em;
font-weight: bold;
}
.badError {
border-width: 3px;
}
|
Sass supports multiple inheritance.[18]
At the 2012 HTML5 Developer Conference, Hampton Catlin, the creator of Sass, announced version 1.0 of libSass, an open source C++ implementation of Sass developed by Catlin, Aaron Leung, and the engineering team at Moovweb.[20][21]
According to Catlin, libSass can be "drop[ped] into anything and it will have Sass in it...You could drop it right into Firefox today and build Firefox and it will compile in there. We wrote our own parser from scratch to make sure that would be possible."[22]
The design goals of libSass are:
IDE | Software |
---|---|
Adobe Dreamweaver CC 2017 | |
Eclipse | |
Emacs | sass-mode |
JetBrains IntelliJ IDEA (Ultimate Edition) | |
JetBrains PhpStorm | |
JetBrains RubyMine | |
JetBrains WebStorm | |
Microsoft Visual Studio | Mindscape |
Microsoft Visual Studio | SassyStudio |
Microsoft WebMatrix | |
NetBeans | |
Vim | haml.zip |
Atom | |
Visual Studio Code | |
Sublime | |
Edit+ |
Seamless Wikipedia browsing. On steroids.