携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情 >>
安装
npm install -g sass
使用变量
变量可以存储字符串、数字、颜色值、布尔值、列表、null值。
sass变量,使用$符号。
//index.scss
$color:#000;
.aa{
background: $color;
}
运行sass index.scss
.aa{
background: #000;
}
引用父元素
.aa{
width: 100px;
height:100px;
background: red;
&:hover{
background: green;
}
}
编译后
.aa {
width: 100px;
height: 100px;
background: red;
}
.aa:hover {
background: green;
}
作用域
$red:red;
.aa{
color:$red;
}
//局部作用域
.bb{
$red:#000;
color:$red;
}
.cc{
color:$red;
}
编译后:
.aa {
color: red;
}
.bb {
color: #000;
}
.cc {
color: red;
}
!global
利用!global关键词来更改全局变量的值。如果全局没有设置这个变量,则会报错
$red:red;
.aa{
color:$red;
}
.bb{
$red:#000 !global;
color:$red;
}
.cc{
color:$red;
}
编译后:
.aa {
color: red;
}
.bb {
color: #000;
}
.cc {
color: #000;
}
如以下,不会编译,会报错
$red:red;
.aa{
color:$red;
}
.bb{
$reds:#000 !global;
color:$red;
}
.cc{
color:$reds;
}
嵌套
样式嵌套
.nav{
font-size:12px;
color: #333;
.nav-list{
background:red;
}
}
编译后:
.nav{
font-size:12px;
color: #333;
.nav-list{
background:red;
}
}
嵌套属性
.aa{
font:{
size:12px;
family:'微软雅黑';
weight:90;
}
text:{
align:center;
overflow:hidden;
}
}
编译后:
.aa {
font-size: 12px;
font-family: "微软雅黑";
font-weight: 90;
text-align: center;
text-overflow: hidden;
}
@import
sass可以帮助我们减少css重复代码,节省开发时间,可以按照不同属性创建不同类型的文件。
sass支持@important指令,@import指令可以让我们导入其他文件等内容。
css @import指令在每次调用的时候,都会创建一个额外的http请求。但sass@import指令将文件包含在css中,不需要额外的http请求。
包含文件时,不需要制定文件后缀,sass会自动添加后缀.scss。此外也可以导入css文件。
语法:
@import var
//var.scss
$red: red;
$block: #000;
$height: 30px;
@import 'bb';
//bb.css
ul{
list-style: none;
}
//aa.scss
@import 'var';
.nav{
background: $red;
height: 30px;
color: $block;
}
编译后:
ul {
list-style: none;
}
.nav {
background: red;
height: 30px;
color: #000;
}
Partials
如果你不希望将一个 Sass 的代码文件编译到一个 CSS 文件,你可以在文件名的开头添加一个下划线。这将告诉 Sass 不要将其编译到 CSS 文件。但是,在导入语句中我们不需要添加下划线。
语法:
_filename;
//_var.scss
$red: red;
$block: #000;
$height: 30px;
//bb.scss
@import 'var';
.nav{
background: red;
height: 30px;
color: #000;
}
如果要导入改文件,则不需要使用下划线
编译后
.nav {
background: red;
height: 30px;
color: #000;
}
注意: 请不要将带下划线与不带下划线的同名文件放置在同一个目录下,比如,_colors.scss 和 colors.scss 不能同时存在于同一个目录下,否则带下划线的文件将会被忽略。
@mixin @include
混入,通过mixin指令来定义
@mixin允许我们定义一个可以在整个样式表中重复使用的样式。
@include可以将混入引入文档中
编译前:
@mixin clear-float{
clear: float;
}
.aa{
@include clear-float;
}
编译后:
.aa {
clear: float;
}
混入中也可以包含混入
编译前:
@mixin floatM {
float: left;
}
@mixin clear-float{
clear: float;
@include floatM;
}
.aa{
@include clear-float;
}
编译后:
.aa {
clear: float;
float: left;
}
向混入传递变量
混入可以接收变量,我们可以向混入传递变量。
定义可以接收混入的变量:
编译前:
@mixin floatM($director) {
float: $director;
}
.aa{
@include floatM(left)
}
编译后:
.aa {
float: left;
}
混入的参数定义默认值:
@mixin floatM($director:left) {
float: $director;
}
.aa{
@include floatM();
}
编译后:
.aa {
float: left;
}
可变参数:
有时不能确定一个混入和一个函数使用多少个参数,这时我们就可以使用...来设置可变参数。
编译前
@mixin box-shadow($shadow...) {
box-shadow: $shadow
}
.aa{
@include box-shadow(0 4px 5px #666,2px 6px 10px #999);
}
编译后:
.aa {
box-shadow: 0 4px 5px #666, 2px 6px 10px #999;
}
浏览器前缀使用混入也很方便
@extend与继承
@extends指令告诉sass一个选择器的样式从另一个选择器继承。
如果一个样式与另一个样式几乎相同,只有少量的区别,则使用@extend就显得很有用。
@extend很好的体现了代码的复用。
.aa{
width: 100px;
height:100px;
background: red;
}
.bb{
@extend .aa;
color: pink;
}
编译后:
.aa, .bb {
width: 100px;
height: 100px;
background: red;
}
.bb {
color: pink;
}
sass函数
字符串函数