预处理器Sass用法指南

一、什么是Sass

Sass是一种css的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得css的开发变动简单可维护。

这篇文章总结了sass的主要用法,平常就可以不用每次去看官方文档了。

使用Sass的好处

Sass的学名叫做“预处理器”,就是在css的基础上,引入变量、嵌套、mixin(混合)、运算以及函数等功能,增加了代码的灵活性,可以让我们使用更少的代码实现同样的效果,而且代码的整洁度,可读性更强,可以把反复用到的“css”属性定义成变量,然后通过变量名引用它们。

二、常用的Sass知识

1、变量

必须以$开头,如果变量需要镶嵌在字符串之中,就必须需要写在#{}之中。

nth()方法,第一个参数为变量名称,第二个参数为变量的第几个值,从1开始数

例1:声明一个字体变量

    $font-size:16px;
    div{
        font-size: $font-size;
    }

例2:将变量嵌入到字符串中

$radius:radius;
.rounded{
  border-#{$radius}:10px;
  border: solid 1px #{$fontColor};
}

例3:使用nth()调取变量的值

  $linkColor:green red!default;
    div{
        color: nth($linkColor,1);
        &:hover{
            color:nth($linkColor,2);
        }
    }

2、sass中的map

语法

Sass 的 map 常常被称为数据地图,也有人称其为数组,它是以 key:value 成对出现

map数据以key:value的形式赋予,其中key和value是成对,并且每队之间用(,)分隔,其中最后一组没有(,)
map-get($map, key) 获取指定的值
用法:

$map: ( 
  key1: value1,
  key2: value2,
  key3: value3
)
.btn {  
  color: map-get($btn-colors, key3);
 }

列如:

$fontColor:red;
$map:(
  jd:red,
  tb:orange,
  vp:hotpink
);
h1{
    color: map-get($map , jd );
}

3、判断@if

@if 指令是一个 SassScript,它可以根据条件来处理样式块,如果条件为 true 返回一个样式块,反之 false 返回另一个样式块。在 Sass 中除了 @if 之,还可以配合 @else if 和 @else 一起使用.

例1:单独使用@if

$status:true;
h1{
   @if $status {
       color: red;
   }

例2:根据传入的值进行判断

$status:login;
h1{
    @if $status == login {
        color: blue;
    }@else if $status == error{
        color: red;
    }@else{
        color: black;
    }
}

4、循环

4.1: @for循环

for循环有两种形式 ↓

  • @for $i from 1 to 4 { 语句;}不包含结束值
  • @for $i from 1 through 4{ 语句;} 包含结束值

$i表示变量,start表示起始值,end表示结束值,这两个的区别是关键字through表示包括end这个数,而to则不包括end这个数。

例1:through关键字

ul {
  list-style: none;
}
@for $i from 1 through 4 {
    li:nth-child(#{$i}){
        background: url(../images/#{$i}.png);
        float: left;
        width: 200px;
        height: 200px;
        margin: 0 20px 20px 0;
        background-size: cover;
    }
}

例1:to关键字

ul {
  list-style: none;
}
@for $i from 1 to 3{
  li:nth-child(#{$i}){
 
  background: url(../../images/#{$i}.jpg);
  float: left;
  width: 200px;
  height: 200px;
  margin: 0 20px 20px 0;
   background-size:cover;
  }
}

4.2: @each循环

  • @each 循环就是去遍历一个列表,然后从列表中取出对应的值。
  • @each 循环指令的形式:

@each $var in <list>

列如:each 可以循环map

$style:(h1:20px,h2:10px,h3:6px);
@each $h,$s in $style{
  #{$h}{
    font-size:$s
  }
}

5、sass中的mixin(混合)

概念:

Mixins是SASS中的一个强大的功能。使用@mixin根据功能定义一个模块,然后在需要使用的地方通过@include来调用声明的mixins。其主要功能是可以让你的代码简洁高效.

基本使用

例1: 基本的使用button的样式mixin,进行调用

@mixin button {  
    font-size: 1em;  
    padding: 0.5em 1.0em;  
    text-decoration: none;  
    color: #fff;  
}

//引用
.btn{
  @include button;
}

例2:mixin也可以传递参数

@mixin button($background) {  
    font-size: 1px;  
    padding: 0.5px 1.0px;  
    text-decoration: none;  
    color: #fff;  
    background: $background;  
}

注意到参数被设置为一个变量并成为backround属性的值。如果我们想创建一个绿色的按钮,那么就可以使用以下代码:

进行调用
.button-green {  
    @include button(green);  
}

多个参数也可以使用逗号隔开,也都可以设置默认参数

例3:在例1的基础上增加$color,同时给背景设置默认颜色

@mixin button($backgroundColor,$color:red){
    font-size:1px;
    padding:0.5px 2px;
    text-decoration: none;
    color:$color;
    background: $backgroundColor;
}
.button-green{
    @include button(green);
}

6、Sass 嵌套

6.1后代嵌套和子嵌套,css选择器嵌套类似于HTML的嵌套规则
.box{
    width:100px;
    height:100px;
    //后代嵌套
    .middle{
        width:50px;
        height:50px;
        //子嵌套
        >.small{
            width:25px;
            height:25px;
        }
    }
}
6.2 属性嵌套

属性前缀相同嵌套

font: {
  family: Helvetica, sans-serif;
  size: 18px;
  weight: bold;
}

复合属性的同一和分解

.left{
   border:1px solid #000{
       left:none;
       bottom:{
           width:3px;
       }
   };
}

7、自定义函数

语法:

@function 函数名(形参) {
   @return;
 }

函数可以有多个语句组成,但是必须设定返回值(return)。但是混合(mixin)就可以不用设置返回值即可操作。函数(function)传入的值也可以带有变量

例1:在函数内对宽度进行运算

@function getWidth($w) {
  @return $w * 2;
}

.main{
  max-width: #{getWidth(20)}px;
}

8、sass的继承

语法:@extend

选择器1{属性1:属性值1}
选择器2{@extend 选择器1}//继承选择器1的全部样式
&//父选择器

例1:

.big{
    border:2px solid red;
}
.small{
    @extend .big;
}
继承结果.png

9、导入

就是将函数、变量、样式语句分离,全放在一个文件太杂乱
用法:

@import '文件名';

**实现步骤:1.创建一个被导入文件variate.scss

$color: yellow;
$fontColor:red;
$map:(
  jd:red,
  tb:orange,
  vp:hotpink
);

2.在主sass文件夹导入

@import '../utils/variate.scss';

h1{
    color: map-get($map , jd );
}

注意:包含文件时不需要指定文件后缀,Sass 会自动添加后缀 .scss。
也可以导入 CSS 文件。
导入后我们就可以在主文件中使用导入文件等变量。

10、sass的运算

一般的编程语法中都支持使用运算,Sass 中同样可以做各种数学运算,包括最基本的加减乘除运算、变量运算、颜色运算、字符运算等。

  • 加减乘除:
h1{
    color: map-get($map , jd );
    font-size:16px + 10; // ! 加法运算
}
h2 {
    color: map-get($map , tb );
    font-size:16px - 2; // ! 减法运算
}
h3{
    color: map-get($map , vp );
    font-size:12px * 2; // ! 乘法运算
}
h4{
    color: map-get($map , vp );
    font-size:(24px / 2); // ! 除法运算
}

注意:每个运算符前后必须有空格;除法运算,要进行运算需要用()号括起来;不然会原样输出

  • 变量运算
$one: 1px;
$two: 2px;
$three: 3px;
h1{
    color: map-get($map , jd );
    font-size: $one+$two+$three; 
}
  • 颜色运算
    (颜色会采用十六进制的,如黑色#000000)
p {
  color: #010203 + #040506;
  // color: #010203 * 2;
}
  • 字符运算
$content: 'hello' + 'world';
.box:before {
   content: $content;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容