简介 Sass 是对 css 的扩展,让css语言更加强大,优雅。


首先说说如何将.sass转成.css吧

//初始化
npm init
npm install node-sass --save-dev

//添加到package.json中,其中文件样式可自定义
"scripts": {
  "css-build": "node-sass --omit-source-map-url sass/mystyles.scss css/mystyles.css",
  "css-watch": "npm run css-build -- --watch",
  "start": "npm run css-watch"
}

//启动转化
npm run css-build

sas文件的后缀名是.scss或.sass


基础语法


  1. 变量: Sass使用$符号来声明变量
  • $blue:blue;
  • 直接使用
    div { color : $blue; }

    在Sass中,变量是有作用域的,类似ES6中的let,sass变量支持块级作用域(花括号{}包裹区域),也就是有全局变量和局部变量之分
    也可以使用 !global 将局部变量转换为全局变量





在sass中,&表示父元素

$a-color: white !default
a
  &:hover
    color: $a-color
//输出为
a:hover {
  color: white; }

当有多级嵌套样式时,&表示它所以祖先元素的拼接
此外,&还可以作为选择器的一部分

$main-color: red
.main
  &-content
    color: $main-color
//输出为
.main-content {
  color: red; }



注释方法:

  1. 多行注释 /* */
  2. 单行注释 //
  3. !多行注释:/* ! * / 通常用于添加版权信息

区别 :

  • 单行注释不会输出到css文件中,但多行注释会
  • 单行注释和多行注释不会输出到压缩css文件中,但!多行注释会



支持运算

举个例子
$num1: 10px
$num2: 20px
.side
  font-size: $num1+$num2
  height: $num1 - $num2
  width: $num1%$num2
	
输出为:
.side {
  font-size: 30px;
  height: -10px;
  width: 10px; }

特殊的除法,只有下面三种情况才被视为除法运算:

  • 如果值被圆括号包裹 (20px / 10px)
  • 如果值是算术表达式的一部分:(10px+20px/10px)
  • 如果值的一部分是变量或函数的返回值: $width / 10

跟js一样,+还可以连接字符串

 color: e + -resize 
 输出为
 color: e-resize;



控制语句

  1. @if 类似于js中的if语句,当 @if 的表达式返回值不是false或者null时,条件成立,输出{}内代码;

$num3: 1
.side-bar
  @if $num3 > 2
    color: red
  @else if $num3 > 0
    color: black
  @else
    color: blue
		
		输出为
		
		.side-bar {
  color: black;
  1. @for 与js类似,但是语法有所不同

  • form through
@for $num5 from 1 through 5
  .lg-#{$num5}
    font-size: 10px * $num5
	
	输出为
	
	.lg-1 {
  font-size: 10px; }

.lg-2 {
  font-size: 20px; }

.lg-3 {
  font-size: 30px; }

.lg-4 {
  font-size: 40px; }

.lg-5 {
  font-size: 50px; }
  • from to
@for $num6 from 0 to 7
  .ln-#{$num6}
    width: 10px * $num6

输出为

.ln-0 {
  width: 0px; }

.ln-1 {
  width: 10px; }

.ln-2 {
  width: 20px; }

.ln-3 {
  width: 30px; }

.ln-4 {
  width: 40px; }

.ln-5 {
  width: 50px; }

.ln-6 {
  width: 60px; }




  1. @each 功能与@for类似,但使用语法不同
@each $icon in user,nav,person
  .#{$icon}-icon 
    background-image: url('./images/#{$icon}.png')
	输出为
.user-icon {
  background-image: url("./images/user.png"); }

.nav-icon {
  background-image: url("./images/nav.png"); }

.person-icon {
  background-image: url("./images/person.png"); }

对于多维数组

@each $font,$size in(large-1,10px),(large-2,20px)
  .#{$font}
    font-size: $size
输出为
.large-1 {
  font-size: 10px; }

.large-2 {
  font-size: 20px; }



代码重用

  1. MIxin

@mixin clearfix
  &:after
    content: ""
    display: block
    height: 0
    clear: both
    visibility: hidden

.mi
  @include clearfix
	输出为
	
.mi:after {
	content: "";
	display: block;
	height: 0;
	clear: both;
	visibility: hidden; }

  1. Mixin 还可以带参数和默认值

@mixin text-font($size,$weight,$color: block)
  font:
    size: $size
    weight: $weight
  color: $color

p
  @include text-font(10px,blod)
	 输出为
	 
	 p {
  font-size: 10px;
  font-weight: blod;
  color: block; }
	
	
	 
	 还可以输出不定长参数呢
@mixin box-shadow($shadows...)    
  box-shadow: $shadows;  

@mixin 可以用 = 表示,而 @include 可以用 + 表示

@include 不仅可以用在块内,还可以直接用在最外层




导入外部文件

import "color.scss"

1. 博文内容来自 TG
2. 博文内容来自bulima