SCSS
SCSS Introduction
SCSS stands for Sassy Cascading Style Sheets. SCSS is a preprocessor of CSS; it helps us to write CSS codes much easily. CSS is the styling language that browser understands and uses to style webpages. SCSS is a special type of file for SASS, a program written in Ruby, that assembles CSS style sheets for a browser. SASS adds lots of additional functionality to CSS like variables, nesting and more which can make writing CSS easier and faster. SCSS files are processed by the server running a web app to output a traditional CSS that the browser can understand.
The syntax of SCSS can be written faster than CSS. With nesting the syntax is better to read and easier to change code using variables.
Sample code CSS:
header {margin: 0;border: 1px solid red;}header p {font-size: 12px;font-weight: bold;color: red;}header a {text-decoration: none;}
Sample code SASS:
$color: redheadermargin: 0border: 1px solid $colorpcolor: $colorfont:size: 12pxweight: boldatext-decoration: none
Sample code SCSS:
$color: red;header {margin: 0;border: 1px solid $color;p {color: $color;font: {size: 12px;weight: bold;}}a {text-decoration: none;}}
SCSS can be separated by a semicolon and can run on the same line. SCSS is fully compatible with the syntax of CSS, while still supporting the full power of Sass.
Variables
Variables can be used to store information which can be reused throughout the stylesheet.
SCSS
$font-family: Helvetica, sans-serif;$color: #333;header {font: 100% $font- family;color: $color;}
CSS
body {font: 100% Helvetica, sans-serif;color: #333;}
Nesting
Sass will let us nest our CSS selectors in a way that follows the same visual hierarchy of its HTML.
SCSS
nav {ul {margin: 0;padding: 0;list-style: none;}li { display: inline-block; }a {display: block;padding: 6px 12px;text-decoration: none;}}
CSS
nav ul {margin: 0;padding: 0;list-style: none;}nav li {display: inline-block;}nav a {display: block;padding: 6px 12px;text-decoration: none;}
Modules
We can split the file using @use rule. This rule loads another Sass file as a module.
SCSS
$font-family: Helvetica, sans-serif;$color: #333;header {font: 100% $font- family;color: $color;}@use 'base';.nav {background-color: base.$color;color: white;}
CSS
header {font: 100% Helvetica, sans-serif;color: #333;}.nav {background-color: #333;color: white;}
Mixins
A mixin lets us make groups of CSS declarations.
SCSS
@mixin transform($property) {-webkit-transform: $property;-ms-transform: $property;transform: $property;}.box { @include transform(rotate(30deg)); }
CSS
.box {-webkit-transform: rotate(30deg);-ms-transform: rotate(30deg);transform: rotate(30deg);}
To create a mixin use the @mixin directive and give it a name. Then it can be used as a CSS declaration starting with @include followed by the name of the mixin.
Extend/Inheritance
Using @extend lets us share a set of CSS properties from one selector to another. In the example we're going to create a simple series of messaging for errors, warnings and successes using another feature which goes hand in hand with extend, placeholder classes. A placeholder class is a special type of class that only prints when it is extended, and can help keep our compiled CSS neat and clean.
SCSS
This CSS will print because %extended-style is extended.
%extended-style {border: 1px solid #ccc;padding: 10px;color: #333;}h1 {@extend %extended-style;}h2 {@extend %extended-style;border-color: green;}h3 {@extend %extended-style;border-color: red;}
CSS
This CSS will print because %message-shared is extended.
h1, h2, h3 {border: 1px solid #ccc;padding: 10px;color: #333;}h2 {border-color: green;}h3 {border-color: red;}
Operators
Sass has a handful of standard math operators like +, -, *, /, and %.
SCSS
.container {width: 100%;}.sidebar {float: left;width: 600px / 960px * 100%;}.content-container {float: right;width: 300px / 960px * 100%;}
CSS
.container {width: 100%;}.sidebar {float: left;width: 62.5%;}.content-container {float: right;width: 31.25%;}