Sass
Sass (Syntactically Awesome Stylesheets)是一种动态样式语言,Sass语法属于缩排语法,比css比多出好些功能(变量(variables)、嵌套(nested rules)、 混合(mixins)、 函数(functions)等功能),更容易阅读。
Sass的缩排语法,对于写惯css前端的web开发者来说很不直观,也不能将css代码加入到Sass里面,因此Sass语法进行了改良,Sass 3就变成了Scss(Sassy CSS)。SCSS(Sassy CSS)是CSS语法的扩展。这意味着每一个有效的CSS也是一个有效的SCSS语句,与原来的语法兼容,只是用{}取代了原来的缩进。
Sass是在服务端处理的,以前是Ruby,现在是Dart-Sass或Node-Sass。
Less也是一种动态样式语言. 对CSS赋予了动态语言的特性,如变量,继承,运算, 函数. Less 既可以在客户端上运行 (支持IE 6+, Webkit, Firefox),也可在服务端运行 (借助 Node.js)。
安装sass
node.js中使用如下命令安装sass。
npm install -g sass
变量
SCSS
$myColor: red; //全局作用域
h1 {
$myColor: green; //只在 h1 里头有用,局部作用域,要想声明为全局作用域 可以使用!global
color: $myColor;
}
p {
color: $myColor;
}
编译后的CSS
h1 {
color: green;
}
p {
color: red;
}
嵌套规则与属性
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;
}
多个嵌套
.alert, .warning {
ul, p {
margin-right: 0;
margin-left: 0;
padding-bottom: 0;
}
}
编译后的css
.alert ul, .alert p, .warning ul, .warning p {
margin-right: 0;
margin-left: 0;
padding-bottom: 0;
}
嵌套属性
font: {
family: Helvetica, sans-serif;
size: 18px;
weight: bold;
}
text: {
align: center;
transform: lowercase;
overflow: hidden;
}
编译后的css
font-family: Helvetica, sans-serif;
font-size: 18px;
font-weight: bold;
text-align: center;
text-transform: lowercase;
text-overflow: hidden;
@import
Sass导入文件类似 CSS,Sass 支持 @import 指令。
@import 指令可以让我们导入其他文件等内容。
CSS @import 指令在每次调用时,都会创建一个额外的 HTTP 请求。但,Sass @import 指令将文件包含在 CSS 中,不需要额外的 HTTP 请求。
Sass @import 指令语法如下:
@import filename; //不带后缀
Sass Partials
不希望将一个 Sass 的代码文件编译到一个 CSS 文件,可以在文件名的开头添加一个下划线。这将告诉 Sass 不要将其编译到 CSS 文件。
但是,在导入语句中我们不需要添加下划线。
_colors.scss
//_colors.scss 以_开头
$myPink: #EE82EE;
$myBlue: #4169E1;
$myGreen: #8FBC8F;
使用_color.scss
@import "colors"; //引入时不需要带_
body {
font-family: Helvetica, sans-serif;
font-size: 18px;
color: $myBlue;
}
混入@mixin @include
@mixin 指令定义一个可以在整个样式表中重复使用的样式。
@include 指令可以将混入(mixin)引入到文档中。
定义混入
@mixin important-text {
color: red;
font-size: 25px;
font-weight: bold;
border: 1px solid blue;
}
使用混入
.danger {
@include important-text;
background-color: green;
}
编译后css
.danger {
color: red;
font-size: 25px;
font-weight: bold;
border: 1px solid blue;
background-color: green;
}
混入中包含混入
混入中也可以包含混入
@mixin special-text {
@include important-text;
@include link;
@include special-border;
}
向混入传递变量
/* 混入接收两个参数 */
@mixin bordered($color, $width) {
border: $width solid $color;
}
.myArticle {
@include bordered(blue, 1px); // 调用混入,并传递两个参数
}
.myNotes {
@include bordered(red, 2px); // 调用混入,并传递两个参数
}
编译后的css
.myArticle {
border: 1px solid blue;
}
.myNotes {
border: 2px solid red;
}
继承@extend
@extend 指令告诉 Sass 一个选择器的样式从另一选择器继承。
如果一个样式与另外一个样式几乎相同,只有少量的区别,则使用 @extend 就显得很有用。
.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
.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;
}