参考:
中文文档:http://www.css88.com/doc/sass/
官方网站:https://sass-lang.com/
Freecodecamp: https://learn.freecodecamp.org/front-end-libraries/sass
一, 简介
CSS不是一种编程语言。你可以用它开发网页样式,但是没法用它编程。它没有变量,也没有条件语句,只是一行行单纯的描述,写起来相当费事。
有人就开始为CSS加入编程元素,这被叫做”CSS预处理器”(css preprocessor)。
它的基本思想是,用一种专门的编程语言,进行网页样式设计,然后再编译成正常的CSS文件。
sass可以让你使用一些css本身没有的东西,比如变量、嵌套、混合、继承和一些其他特别的特性,让使用css变得更加得心应手。
熟悉sass后会发现它的功能特别强大,可以批量产生CSS语句,可以称为 CSS 生产工厂。
SASS本身的功能点不是特别多,理解起来也不难,但是要熟练使用不是特别容易,它不仅仅需要知道语法,更重要的是一种结构化的思想。
如果结构化构建批量的CSS语句,只有有了这个架构,才能够轻松地使用SASS。
二, 安装使用
SASS是Ruby语言写的,但是两者的语法没有关系。不懂Ruby,照样使用。只是必须先安装Ruby,然后再安装SASS。
假定你已经安装好了Ruby,接着在命令行输入下面的命令:
gem install sass
然后,就可以使用了。
SASS文件就是普通的文本文件,里面可以直接使用CSS语法。文件后缀名是.scss,意思为Sassy CSS。
下面的命令,可以在屏幕上显示.scss文件转化的css代码。(假设文件名为test。)
sass test.scss
如果要将显示结果保存成文件,后面再跟一个.css文件名。
sass test.scss test.css
SASS的官方网站,提供了一个在线转换器。你可以在那里,试运行下面的各种例子。
三, 功能点
第一, 变量
例如:
$main-fonts: Arial, sans-serif;
$headings-color: green;
//To use variables:
h1 {
font-family: $main-fonts;
color: $headings-color;
}
第二, 嵌套nest
例如:
nav {
background-color: red;
}
nav ul {
list-style: none;
}
nav ul li {
display: inline-block;
}
可以写成:
nav {
background-color: red;
ul {
list-style: none;
li {
display: inline-block;
}
}
}
注意,它只反映的是Html 中元素的嵌套关系
第三, Mixin-函数
例如:
@mixin box-shadow($x, $y, $blur, $c){
-webkit-box-shadow: $x, $y, $blur, $c;
-moz-box-shadow: $x, $y, $blur, $c;
-ms-box-shadow: $x, $y, $blur, $c;
box-shadow: $x, $y, $blur, $c;
}
div {
@include box-shadow(0px, 0px, 4px, #fff);
}
第四, @if, @else if, @else
@mixin text-effect($val) {
@if $val == danger {
color: red;
}
@else if $val == alert {
color: yellow;
}
@else if $val == success {
color: green;
}
@else {
color: black;
}
}
第五, @for, @each, @while
例如:
@for $i from 1 through 12 {
.col-#{$i} { width: 100%/12 * $i; }
}
生成:
.col-1 {
width: 8.33333%;
}
.col-2 {
width: 16.66667%;
}
...
.col-12 {
width: 100%;
}
@each $color in blue, red, green {
.#{$color}-text {color: $color;}
}
A map has slightly different syntax. Here's an example:
$colors: (color1: blue, color2: red, color3: green);
@each $key, $color in $colors {
.#{$color}-text {color: $color;}
}
生成
.blue-text {
color: blue;
}
.red-text {
color: red;
}
.green-text {
color: green;
}
$x: 1;
@while $x < 13 {
.col-#{$x} { width: 100%/12 * $x;}
$x: $x + 1;
}
第六, 继承extend
例如:
.panel{
background-color: red;
height: 70px;
border: 2px solid green;
}
.big-panel{
@extend .panel;
width: 150px;
font-size: 2em;
}
不仅可以添加,还可以覆盖。
第七, Partials
相当于module的概念,在命名时要以 _ 作为前缀,用.scss作为后缀,用来标明是partials,
使用@import引用
// In the main.scss file use _mixins.scss partials
@import 'mixins'