sass

90 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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函数

字符串函数