Sass(css)预处理器的特性

1、变量

使用变量来存储需要再css中复用的信息,使用$去声明一个变量

<style lang='scss' scoped>
$bg_color:red;
.container{
    width: 20px;
    height: 20px;
    background-color: $bg_color;
}
</style>

2、嵌套

以嵌套的方式使用css,父级元素包子级元素


3、引入

@import '位置/文件名' : 引入.scss文件,将多个.scss文件合并成一个

可以引入代码片段,也可以引入某个变量

(1) 引入代码片段 ( b中引入a)

可以看出a是可以使用中b的变量。当引入.css时不允许存在变量

​ a.scss

.inter{
    width: 10px;
    height: 10px;
    background-color:$inter_color1;
}

​ b.scss

$bg_color:red;
$inter_color:green;
$inter_color1:blue;
.container{
    width: 20px;
    height: 20px;
    background-color: $bg_color;
}

.inter1{
    width: 10px;
    height: 10px;
    background-color:$inter_color;
}

@import 'a';

(2) 引入变量 此时显示颜色为blue

​ a.scss

$inter_color:blue;

​ b.scss

$bg_color:red;
$inter_color:green;
.container{
    width: 20px;
    height: 20px;
    background-color: $bg_color;
}

@import 'a';

.inter{
    width: 10px;
    height: 10px;
    background-color:$inter_color;
}

备注:与css3中的引入不同,@import url('a')需要加载;而sass的@import则不需要加载

我们可以将公共变量放在一个.scss中,使样式代码更加清晰

4、混合(Mixin)

用于分组需要在页面中复用的css声明,通过向Mixin传递变量参数让代码更加灵活

声明:@mixin 名字(变量)

调用:@include 名字(数值)

页面:

<div class="divView">123</div>

声明

@mixin divStyle($divWidth, $divHeight, $divColor) {
    width: $divWidth;
    height: $divHeight;
    background-color: $divColor
}

调用

.divView {
    @include divStyle(80px, 50px, blue)
}

思考:可以用于多浏览器适配,例如

@mixin border-radius($radius) {
          border-radius: $radius;
      -ms-border-radius: $radius;
     -moz-border-radius: $radius;
  -webkit-border-radius: $radius;
}

.box {
  @include border-radius(10px);
}

5、继承

使用@extend在选择器之间复用css属性,避免产生冗余代码

公用代码片段使用 % 声明,使用 @extend 继承

// 该代码没有被继承,不会输出到最终的css中
%box-other {
    border: 1px solid #000;
}
// 该代码被继承,会输出到最终的css中
%box-common {
    border: 1px solid green
}
.box1 {
    @extend %box-common ;
    width:50px;
    height: 50px;
}
.box2 {
    @extend %box-common ;
    width: 100px;
    height: 200px;
}

6、操作符

sass提供了标准的算术运算符,例如 +、-、*、/、%,可以让开发人员更容易将像素转换成百分比

$width:600px;
.box1 {
    width: $width / 1000px * 100%;
    height: 200px;
    background-color: $inter_color;
}

转换代码 ==》

.box1 {
    width: 60%;
    height: 200px;
    background-color: green;
}

7、引用父级 &

“&” 会使用父级选择器替换全部出现的位置

伪类选择器使用场景:

.container {
    width: $width;
    height: $height;
    background-color: $bg_color;

    &:hover {
        background-color: $inter_color
    }
}

当子类元素class的开头是父元素时也可以使用

<div class="container">
    <div class="container_divView">123</div>
</div>
.container {
    width: $width;
    height: $height;
    background-color: $bg_color;

    &_divView {
        font-size:20px
    }
}

8、嵌套属性

css许多属性都有相同的命名空间,比如font-family,font-size,font-weight等,

scss中只需要编写命名空间一次,后续嵌套的子属性都将位于该命名空间之下

/*===== SCSS =====*/
.demo {
  // 命令空间后带有冒号:
  font: {
    family: fantasy;
    size: 30em;
    weight: bold;
  }
}

/*===== CSS =====*/
.demo {
  font-family: fantasy;
  font-size: 30em;
  font-weight: bold; 
  }