美文网首页
Sass语法(1)

Sass语法(1)

作者: VinSmokeW | 来源:发表于2020-06-02 11:40 被阅读0次

1.变量

在Sass中可以定义变量,变量以$开头+变量名,使用冒号(:)来为变量赋值(相当于传统的=号)。字符串不需要引号。

$red: #132132; 
  boby {
   background-color : $red;
  }

可以为变量定义后面添加 !default来设置默认变量。

/* blue覆盖red */
$color: bule;
$color: red !default;
body {
    color: $color;
    border: 1px solid $color;
}

按照常规的覆盖方案,似乎用不着设置默认变量,只需要把被覆盖的变量放在上方,如下所示。

/* blue覆盖red */
$color: red;
$color: bule;
body {
    color: $color;
    border: 1px solid $color;
}

但是如果是为局部变量设置默认变量那就不一样,代码如下所示。

/* blue覆盖red */
$color: bule;
body {
    $color: red !default;
    color: $color;
    border: 1px solid $color;
}

当然这样的技巧还有很多。

还可以把变量嵌入sass任何地方中,从而动态调整属性。格式为#{$变量名}。

$side:top; 
div { 
    border-#{$side}-radius:10px;
}

2.嵌套

Sass 的嵌套分为三种:

  • 选择器嵌套
  • 属性嵌套
  • 伪类嵌套

在sass选择器嵌套中,可以在内部使用&字符代替当前选择器,具体效果如下。

scss文件:

nav {
    a {
        color: red;

        header & {
            color:green;
        }
    }
}
css效果:

nav a {
  color:red;
}

header nav a {
  color:green;
}

在sass属性嵌套中,可以把属性前缀名拆开来设置属性,具体效果如下

scss文件:

/* 注意,border后面必须加上冒号。 */
.box {
    border: {
       top: 1px solid red;
       bottom: 1px solid green;
    }
}
css效果:

.box {
  border-top: 1px solid red;
  border-bottom: 1px solid green;
}
伪类嵌套和属性嵌套非常类似,也需要借助&符号一起配合使用
scss文件:

.clearfix{
&:before,
&:after {
    content:"";
    display: table;
  }

css效果:

.clearfix:before, .clearfix:after {
  content: "";
  display: table;
}

3.计算

在sass中可以使用常规的+(加)、-(减)、*(乘)、/(除)、%(求模)。在运算中,操作符的优先级和常规编程语法一样:

1.括号优先级最高
2.乘法,除法优先于加法,减法

加法必须要单位相同,或者只为其中一边添加单位。减法也同理。

h2 {
    font-size:5px + 2em;  //错误!!!编译报错
    font-size:5px + 2;    //7px
    font-size:5 - 2px;    //3px
}

p {
  color: #010203 + #040506;  // 颜色也可以做加法运算
}

乘法和加减法有所不同,在乘法中其中一个因数是倍数,所以只能有一个因数带单位,如下所示。

body {
    font-size: 30 * 1.1px;  // 33px
    font-size: 30px * 1.1;  // 33px
    font-size: 30px * 1.1px;  // 报错 
}

p {
  color: #010203 * 2;  // 颜色也可以做乘法运算
}

除法与乘法不同,除法符号/,在css某些属性的简写下,是可以直接书写的。
比如:
font: 16px/24px Arial;
由于这样的css属性,所以sass重载了该符号,不能直接当除法使用。

所以在如在以下情况,是不做除法运算的。

nav {
    //不执行除法操作
   margin:16px / 24px;

    //使用变量嵌入,不执行除法操作
    $base-size: 18px;
    $line-height: 10px;
    font-size: #{$base-size} / #{$line-height};
}

在如下情况是做除法运算的,但是和乘法不同,允许被除数和除数都带相同单位。

//使用括号之后,执行除法操作,结果为2,而不是2px
font-size: (10px / 5px);

//若除法结果不带单位,可以加上一个带单位的数,结果为5em。
font-size: (10px / 5px) + 3em;  

//使用变量,执行除法操作,结果为2,而不是2px
$base-size: 10px;
$line-height: 5px;
font-size: $base-size / $line-height;

//使用算术操作符,执行除法操作
 font-size: 2px / 4px + 3px;

而且和乘法不一样的是,被除数是必须带单位,除数则根据需要可带单位,或者不带单位(被除数 / 除数 = 商)。具体效果如下所示:

.box {
     margin:(10px / 5);  // 结果为2px,有单位

     margin:(10px / 5px);  // 结果为2,无单位

     margin:(10 / 5);  //结果为2,和上面等价
      
     margin:(10 / 5px);  //报错  
}

4.注释

在sass中有两种注释,一种是编译后注释内容会被忽略,另一种情况是编译后注释内容会保存。

// (编译后被省略)

/* (保留到编译后) */

5.混合宏@mixin

  • 混合宏是一个可以复用的代码块,定义好之后可在其他代码块中调用。类似一个方法。

无参数混合宏
在 Sass 中,使用“@mixin”来声明一个混合宏,调用一个宏命令为@include mixinName。如:

/* 定义宏命令 */
@mixin border-radius{
    -webkit-border-radius: 5px;
    border-radius: 5px;
}
.nav { 
    @include border-radius;  // 调用宏命令
}

border-radius是混合宏的名称。

带参数混合宏
除了声明一个不带参数的混合宏之外,还可以在定义混合宏时带有参数,如:

@mixin box($radius: 5px, $margin: 1px) {
    -webkit-border-radius: $radius;
    border-radius: $radius;
    margin: $margin;
}
.nav{ 
    @include box(10px, 5px);  // 调用宏命令
    @include box($margin: 5px);  // 只为margin传值,radius使用默认值
}

若调用时不传参数,则默认为redius=5px,margin=1px。

多值的混合宏:
有一个特别的参数“…”。当混合宏传的参数过多之时,可以使用参数来替代。

@mixin box-shadow($shadow...) {
  -webkit-box-shadow:$shadow;
  box-shadow:$shadow;
}
.nav {
  @include box-shadow(0 2px 2px rgba(0,0,0,.3), 
                      0 3px 3px rgba(0,0,0,.3),
                      0 4px 4px rgba(0,0,0,.3));
}

6.继承

  • 在 Sass 中也可以继承,可以继承类中的样式代码块。在 Sass中通过关键词 “@extend”来继承已存在的类样式块,从而实现代码的继承。如下所示:
.line {
  border: 1px solid #eee;
  font-size: 16px;
}
.h2 {
  background-color: yellow;
  @extend .line;
}
.h3 {
  background-color: red;
  @extend .line;
}

7.占位符

占位符是解决了早期继承中代码冗余的情况(不过现在的sass版本,继承已经没有这个问题了,但调用混合宏会有代码冗余)。什么叫代码冗余?早期继承会产生这样的问题,css无法成解析成组选择器。占位符格式为%name,name必须以字母或下划线开头。以上面代码为例,早期不用占位符来继承解析出来的css如下。

/* -----------.scss文件--------------- */
.line {
  border: 1px solid #eee;
  font-size: 16px;
}
.h2 {
  background-color: yellow;
  @extend .line;
}
.h3 {
  background-color: red;
  @extend .line;
}
/* -----------.css文件--------------- */
.line {
  border: 1px solid #eee;
  font-size: 16px;
}
.h2 {
  background-color: yellow;
  border: 1px solid #eee;
  font-size: 16px;
}
.h3 {
  background-color: red;
  border: 1px solid #eee;
  font-size: 16px;
}

如果使用占位符,代码相对简洁,同时父类不会编译出来,不用考虑到父类编译出来对整个样式的影响。这样就可以通过占位符的相互继承关系,在样式中调用。代码如下所示:

/* -----------.scss文件--------------- */
%line {
  border: 1px solid #eee;
  font-size: 16px;
}
.h2 {
  background-color: yellow;
  @extend %line;
}
.h3 {
  background-color: red;
  @extend %line;
}
/* -----------.css文件--------------- */
.h2, .h3 {
  border: 1px solid #eee;
  font-size: 16px;
}
.h2 {
  background-color: yellow;
}
.h3 {
  background-color: red;
}

在对基类继承、占位继承、混合宏调用的使用的场合要把握好。

结语
以上是sass的基础部分,到这里就结束了,sass的细节问题还需要大家在掌握基础的层次上深入学习。接下来会在学习的过程中继续更新Sass语法(2)

原文链接:https://www.jianshu.com/p/368859f69f8c

相关文章

  • Sass系列(二):sass的基本用法

    sass的语法格式 sass有两种语法格式: sass语法格式(老版本sass语法格式) 文件后缀名为.sass ...

  • Sass入门篇

    卸载 Sassgem uninstall sass Sass 语法格式这里说的 Sass 语法是 Sass 的最初...

  • SASS - 简介

    SASS – 简介 SASS – 环境搭建 SASS – 使用Sass程序 SASS – SASS – 语法 SA...

  • SASS - 使用Sass程序

    SASS – 简介 SASS – 环境搭建 SASS – 使用Sass程序 SASS – SASS – 语法 SA...

  • SASS - 环境搭建

    SASS – 简介 SASS – 环境搭建 SASS – 使用Sass程序 SASS – SASS – 语法 SA...

  • SASS - 操作符

    SASS – 简介 SASS – 环境搭建 SASS – 使用Sass程序 SASS – SASS – 语法 SA...

  • SASS- 局部文件(Partial)

    SASS – 简介 SASS – 环境搭建 SASS – 使用Sass程序 SASS – SASS – 语法 SA...

  • SASS - @extend(继承)指令

    SASS – 简介 SASS – 环境搭建 SASS – 使用Sass程序 SASS – SASS – 语法 SA...

  • SASS - 函数

    SASS – 简介 SASS – 环境搭建 SASS – 使用Sass程序 SASS – SASS – 语法 SA...

  • SASS - 输出格式

    SASS – 简介 SASS – 环境搭建 SASS – 使用Sass程序 SASS – SASS – 语法 SA...

网友评论

      本文标题:Sass语法(1)

      本文链接:https://www.haomeiwen.com/subject/fkfuzhtx.html