预处理器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;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,110评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,443评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,474评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,881评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,902评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,698评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,418评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,332评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,796评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,968评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,110评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,792评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,455评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,003评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,130评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,348评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,047评论 2 355

推荐阅读更多精彩内容