Concept
What is sass
Sass stands for Syntactically Awesome Style Sheets , a preprocessing CSS language. Your Css syntax will be written as Sass, then will be compiled through Css.
There are many types of CSS Preprocessor:
- Sass
- Stylus
- Less
- ….
In this article I will introduce Sass.
What is scss
Sass itself has 2 types of writing, scss is the style of writing created after. One style has a .sass extension, the second is a scss with a .scss extension.
How to write sass :
1 2 3 | .f16 <span class="token property">font-size</span> <span class="token punctuation">:</span> 153cm <span class="token punctuation">;</span> |
How to write scss :
1 2 3 4 | <span class="token selector">.f16</span> <span class="token punctuation">{</span> <span class="token property">font-size</span> <span class="token punctuation">:</span> 153cm <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
both render css
1 2 3 4 | <span class="token selector">.f16</span> <span class="token punctuation">{</span> <span class="token property">font-size</span> <span class="token punctuation">:</span> 153cm <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Sass utilities
- It has been a long time and has been widely used
- Save time Css code
- Has a large community
- High css compatibility.
Sass writing rules
I prefer to use Scss over Sass, because the syntax still retains curly braces (similar to Css’s syntax) so it is easy to understand.
Nested Rule
For example, I have a html paragraph
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <span class="token doctype"><!DOCTYPE html></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> html</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> link</span> <span class="token attr-name">rel</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> stylesheet <span class="token punctuation">"</span></span> <span class="token attr-name">href</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> mystyle.css <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> body</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> nav</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> ul</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> li</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> a</span> <span class="token attr-name">href</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> # <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> HTML <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> a</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> li</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> li</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> a</span> <span class="token attr-name">href</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> # <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> CSS <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> a</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> li</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> li</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> a</span> <span class="token attr-name">href</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> # <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> SASS <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> a</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> li</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> ul</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> nav</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> body</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> html</span> <span class="token punctuation">></span></span> |
With pure Css syntax, we will have to write the following
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <span class="token selector">nav ul</span> <span class="token punctuation">{</span> <span class="token property">margin</span> <span class="token punctuation">:</span> 0 <span class="token punctuation">;</span> <span class="token property">padding</span> <span class="token punctuation">:</span> 0 <span class="token punctuation">;</span> <span class="token property">list-style</span> <span class="token punctuation">:</span> none <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">nav li</span> <span class="token punctuation">{</span> <span class="token property">display</span> <span class="token punctuation">:</span> inline-block <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">nav a</span> <span class="token punctuation">{</span> <span class="token property">display</span> <span class="token punctuation">:</span> block <span class="token punctuation">;</span> <span class="token property">padding</span> <span class="token punctuation">:</span> 6px 12px <span class="token punctuation">;</span> <span class="token property">text-decoration</span> <span class="token punctuation">:</span> none <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
However, we can skip the need to rewrite the order of the tags when styling with scss
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <span class="token selector">nav </span> <span class="token punctuation">{</span> <span class="token selector">ul </span> <span class="token punctuation">{</span> <span class="token property">margin</span> <span class="token punctuation">:</span> 0 <span class="token punctuation">;</span> <span class="token property">padding</span> <span class="token punctuation">:</span> 0 <span class="token punctuation">;</span> <span class="token property">list-style</span> <span class="token punctuation">:</span> none <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">li </span> <span class="token punctuation">{</span> <span class="token property">display</span> <span class="token punctuation">:</span> inline-block <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">a </span> <span class="token punctuation">{</span> <span class="token property">display</span> <span class="token punctuation">:</span> block <span class="token punctuation">;</span> <span class="token property">padding</span> <span class="token punctuation">:</span> 6px 12px <span class="token punctuation">;</span> <span class="token property">text-decoration</span> <span class="token punctuation">:</span> none <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
Variable
Allows us to define variables, convenient when defining fonts, common typefaces in a project.
Variable in Sass has different scopes: global and regular scope
For example:
1 2 3 4 5 6 7 8 9 10 11 | <span class="token property"><span class="token variable">$myColor</span></span> <span class="token punctuation">:</span> red <span class="token punctuation">;</span> <span class="token selector">h1 </span> <span class="token punctuation">{</span> <span class="token property"><span class="token variable">$myColor</span></span> <span class="token punctuation">:</span> green <span class="token punctuation">;</span> <span class="token property">color</span> <span class="token punctuation">:</span> <span class="token variable">$myColor</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">p </span> <span class="token punctuation">{</span> <span class="token property">color</span> <span class="token punctuation">:</span> <span class="token variable">$myColor</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
1 2 3 4 5 6 7 8 9 10 11 12 | <span class="token doctype"><!DOCTYPE html></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> html</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> link</span> <span class="token attr-name">rel</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> stylesheet <span class="token punctuation">"</span></span> <span class="token attr-name">href</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> mystyle.css <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> body</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> h1</span> <span class="token punctuation">></span></span> Hello World <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> h1</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> p</span> <span class="token punctuation">></span></span> This is a paragraph. <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> p</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> body</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> html</span> <span class="token punctuation">></span></span> |
Card
will be red, not blue.
If you use the global scope as follows, then <p> will be green
1 2 3 4 5 6 7 8 9 10 11 | <span class="token property"><span class="token variable">$myColor</span></span> <span class="token punctuation">:</span> red <span class="token punctuation">;</span> <span class="token selector">h1 </span> <span class="token punctuation">{</span> <span class="token property"><span class="token variable">$myColor</span></span> <span class="token punctuation">:</span> green !global <span class="token punctuation">;</span> <span class="token property">color</span> <span class="token punctuation">:</span> <span class="token variable">$myColor</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">p </span> <span class="token punctuation">{</span> <span class="token property">color</span> <span class="token punctuation">:</span> <span class="token variable">$myColor</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Mixin
In sass, @mixin allows us to create code that can be reused.
@include allows us to directly include the code we have created using ** @mixin **
For example:
1 2 3 4 5 6 7 8 | <span class="token keyword">@mixin</span> <span class="token selector">important-text </span> <span class="token punctuation">{</span> <span class="token property">color</span> <span class="token punctuation">:</span> red <span class="token punctuation">;</span> <span class="token property">font-size</span> <span class="token punctuation">:</span> 25px <span class="token punctuation">;</span> <span class="token property">font-weight</span> <span class="token punctuation">:</span> bold <span class="token punctuation">;</span> <span class="token property">border</span> <span class="token punctuation">:</span> 1px solid blue <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
1 2 3 4 5 | <span class="token selector">.danger </span> <span class="token punctuation">{</span> <span class="token keyword">@include</span> important-text <span class="token punctuation">;</span> <span class="token property">background-color</span> <span class="token punctuation">:</span> green <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Mixins can include other mixins or pass variables into mixins
1 2 3 4 | <span class="token keyword">@mixin</span> <span class="token selector">special-text </span> <span class="token punctuation">{</span> <span class="token keyword">@include</span> important-text <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
1 2 3 4 5 6 7 8 9 10 11 12 | <span class="token keyword">@mixin</span> <span class="token function">bordered</span> <span class="token punctuation">(</span> <span class="token property"><span class="token variable">$color</span></span> <span class="token punctuation">:</span> blue, <span class="token property"><span class="token variable">$width</span></span> <span class="token punctuation">:</span> 50px <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token property">border</span> <span class="token punctuation">:</span> <span class="token variable">$width</span> solid <span class="token variable">$color</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">.myArticle </span> <span class="token punctuation">{</span> <span class="token keyword">@include</span> <span class="token function">bordered</span> <span class="token punctuation">(</span> blue, 1px <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Call mixin with two values</span> <span class="token punctuation">}</span> <span class="token selector">.myNotes </span> <span class="token punctuation">{</span> <span class="token keyword">@include</span> <span class="token function">bordered</span> <span class="token punctuation">(</span> red, 2px <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Call mixin with two values</span> <span class="token punctuation">}</span> |
Extend
@extend allows us to share a css style set with other elements.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <span class="token selector">.button-basic </span> <span class="token punctuation">{</span> <span class="token property">border</span> <span class="token punctuation">:</span> none <span class="token punctuation">;</span> <span class="token property">padding</span> <span class="token punctuation">:</span> 15px 30px <span class="token punctuation">;</span> <span class="token property">text-align</span> <span class="token punctuation">:</span> center <span class="token punctuation">;</span> <span class="token property">font-size</span> <span class="token punctuation">:</span> 16px <span class="token punctuation">;</span> <span class="token property">cursor</span> <span class="token punctuation">:</span> pointer <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">.button-report </span> <span class="token punctuation">{</span> <span class="token keyword">@extend</span> .button-basic <span class="token punctuation">;</span> <span class="token property">background-color</span> <span class="token punctuation">:</span> red <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">.button-submit </span> <span class="token punctuation">{</span> <span class="token keyword">@extend</span> .button-basic <span class="token punctuation">;</span> <span class="token property">background-color</span> <span class="token punctuation">:</span> green <span class="token punctuation">;</span> <span class="token property">color</span> <span class="token punctuation">:</span> white <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
When compiled into css
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <span class="token selector">.button-basic, .button-report, .button-submit</span> <span class="token punctuation">{</span> <span class="token property">border</span> <span class="token punctuation">:</span> none <span class="token punctuation">;</span> <span class="token property">padding</span> <span class="token punctuation">:</span> 15px 30px <span class="token punctuation">;</span> <span class="token property">text-align</span> <span class="token punctuation">:</span> center <span class="token punctuation">;</span> <span class="token property">font-size</span> <span class="token punctuation">:</span> 16px <span class="token punctuation">;</span> <span class="token property">cursor</span> <span class="token punctuation">:</span> pointer <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">.button-report</span> <span class="token punctuation">{</span> <span class="token property">background-color</span> <span class="token punctuation">:</span> red <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">.button-submit</span> <span class="token punctuation">{</span> <span class="token property">background-color</span> <span class="token punctuation">:</span> green <span class="token punctuation">;</span> <span class="token property">color</span> <span class="token punctuation">:</span> white <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Import
@import allows us to include the contents of one file into another file
Css imports invoke HTTP requests every time they are imported, while sass @import implements imports in CSS, improving performance.
For example:
style.scss
1 2 3 4 5 6 7 8 | <span class="token selector">html, body, ul, ol </span> <span class="token punctuation">{</span> <span class="token property">margin</span> <span class="token punctuation">:</span> 0 <span class="token punctuation">;</span> <span class="token property">padding</span> <span class="token punctuation">:</span> 0 <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
main.scss
1 2 3 4 5 6 7 8 | <span class="token keyword">@import</span> <span class="token string">"reset"</span> <span class="token punctuation">;</span> <span class="token selector">body </span> <span class="token punctuation">{</span> <span class="token property">font-family</span> <span class="token punctuation">:</span> Helvetica, sans-serif <span class="token punctuation">;</span> <span class="token property">font-size</span> <span class="token punctuation">:</span> 18px <span class="token punctuation">;</span> <span class="token property">color</span> <span class="token punctuation">:</span> red <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Sass partial
By default, Sass will compile all files via css. However, when importing in sass , we do not need to compile via css. So we can use partial to skip compiling via css. The syntax is to add “_” before the file name.
For example:
_style.scss (will not be compiled via css)
1 2 3 4 | <span class="token property"><span class="token variable">$myPink</span></span> <span class="token punctuation">:</span> #EE82EE <span class="token punctuation">;</span> <span class="token property"><span class="token variable">$myBlue</span></span> <span class="token punctuation">:</span> #4169E1 <span class="token punctuation">;</span> <span class="token property"><span class="token variable">$myGreen</span></span> <span class="token punctuation">:</span> #8FBC8F <span class="token punctuation">;</span> |
Conclude
When working on a project, having to write sass is inevitable because sass is very popular nowadays.
Sass has many syntax utilities that allow us to reduce code time. Thanks for watching the article.