sass使用笔记

sass(Syntactically Awesome Style Sheets)是一个css预处理器,提供了许多便利的写法。
sass坚持了DRY(don`t repeat yourself)的原则,它可以提高css的开发效率,并使css更利于维护。

1、安装

安装gulp-sass插件
安装命令如下

npm install gulp-sass --save-dev

2、使用

sass有两种后缀文件名.sass和.scss

使用.sass的时候不能使用大括号,使用回车和至少两个空格来区分选择器和规则

示例:

p
    color:#f00;
b
    background:#ddd;

使用.scss时,基本和平时写css差不多,使用大括号来区分选择器和规则。正因为scss可以兼容css,更符合我们平常的书写习惯,所以一般我们都采用scss为后缀名。

示例:

p{
    color:#f00;
}
b{
    background:#ddd;
}

gulp-sass的使用

var gulp = require('gulp');
var gulp-sass = require('gulp-sass');

gulp.task('sass',function(){
    gulp.src('./sass/**/*.scss')
    .pipe(sass(outputStyle:'compressed'))
    .pipe(gulp.dest('./css'));
});

以上为gulp-sass的基本用法,即引用gulp和gulp-sass插件,然后读取scss文件进行编译,输出格式为compressed,并将编译成功的css文件输出到css文件夹。

欲了解更多关于gulp-sass插件的用法,请点击这里跳转

3、基本用法

3.1 变量

所有变量以$开头,sass使用冒号(:)来定义一个变量。

$blue:#1875e7;
div{
    color:$blue;
}

以上代码将被编译成

div{color:#1875e7;}

如果变量需要嵌在字符串中,就必须写在#{}中

$side:left;
    div{
    border-#{side}-radius:5px;
}

以上代码将被编译成

div{border-left-radius:5px;}

3.2计算功能

sass允许在代码中使用算式。
sass中的算术操作符有:

  • 加(+)
  • 减(-)
  • 乘(*)
  • 除(/)
  • 取余(%)

注意上面的操作符只能用于单位相同的数值运算。

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

此外,两个相同单位的数值相乘无法生成有效的css

h2{font-size:5px*2px;}//invalid css

/操作符本身就是css简写语法的一部分
如:font:16px/24px Arial;
但是sass重载了这个运算符,用于执行除法操作,下面让我们看它是如何解析的:

h2{
     //不执行除法操作,原样输出
    font-size:16px/24px;
    //使用差值语法之后,原样输出
    font-size:#{$base-size}/#{$line-height};
    //使用括号包裹之后,执行除法操作
    font-size:(16px/24px);
    //使用变量,执行除法操作
    font-size:$base-size/$line-height;
    //调用函数,执行除法操作
    opacity:random(4)/5;
    //使用算术操作符,执行除法操作
    padding-right:2px/4px+3px;
}

操作符的优先级:

  • 括号优先级最高
  • 乘法,除法优先于加法,减法

写一个简单的计算示例:

$var:2;
body{
    margin:(14px/2);
    top:50px+100px;
    right:$var*10%;
}

以上代码将被编译成

body{margin:7px;top:150px;right:20%;}

3.3嵌套

就是我写代码是最最常用的用法
ps:属性也可以嵌套,比如:

p{
    border:{
        color:red;
    }
} 

注意:border后面必须加上冒号

3.4注释

sass中有两种注释

//......(编译后被省略)
/*......*/(保留到编译后)

4、代码的重用

4、1继承

sass允许一个选择器继承另一个选择器

.class1{}
.class2{
    @extend .class1;
    .......
}

4.2 Mixin

Mixin有点像C语言的宏,是可以重用的代码块
使用@Mixin定义一个代码块

@mixin left{
    float:left;
    margin-left:10px;
}

使用@include命令,调用mixin

div{
    @include left
}

mixin的强大之处在于,可以指定参数和缺省值

@mixin left($value:10px){
    float:left;
    margin-right:$value;
}

使用的时候加入参数

div{
    @include left(20px);
}

4.3 颜色函数

sass提供了一些内置的颜色函数,以便生成系列颜色

lighten(#ccc,10%);
darken(#ccc,10%);
grayscale(#ccc);
complement(#ccc);

4.4插入文件

@import命令,插入外部文件
@import “……”;
@import可以导入css文件,也可以导入sass文件
导入css文件,仍是以@import存在,这种方式在css中是不推荐使用的,因为,@import引用的CSS会等到页面全部被下载完再被加载。所以有时候浏览@import加载CSS的页面时开始会没有样式(就是闪烁),网速慢的时候还挺明显。
导入sass文件的时候,在编译的时候实际是把两个sass文件合并,编译成一个css文件。

5、高级用法

5、1条件语句

@if…@else….

@mixin txt($weight){
    @if $weight == bold {font-weight:bold;}
    @else if $weight == light {font-weight:100;}
    @else if $weight == heavy {font-weight:900;}
    @else {font-size:normal;}
}

.txt1{
    @include txt(bold);  
}

.txt2{
    @include txt(light);  
}

.txt3{
    @include txt(heavy);  
}

以上代码将被编译成:

.txt1{font-weight:blod;}
.txt2{font-weight:100;}
.txt3{font-weight:900;}

5、2循环语句

@for
@for有两种使用方式:
from start to end,遍历范围[start,end-1]
from start through end,遍历范围[start,end]

@for $i from 1 to 10{
    .border-#{$i}{
        border:#{$i}px solid blue;
    }
}

这段sass代码会被编译成

.border-1{border:1px solid blue;}
.border-2{border:2px solid blue;}
.border-3{border:3px solid blue;}
.border-4{border:4px solid blue;}
.border-5{border:5px solid blue;}
.border-6{border:6px solid blue;}
.border-7{border:7px solid blue;}
.border-8{border:8px solid blue;}
.border-9{border:9px solid blue;}

@while

 $i:1;
 @while $i<5{
    .item-#{$i}{width:2em*$i;}
    $i:$i+1;
}

以上代码将被编译成

.item-1 {width: 2em; }
.item-2 {width: 4em; }
.item-3 {width: 6em; }
.item-4 {width: 8em; }

@each
@each指令同样可以用于循环输出,和@for的区别在于,@each是通过遍历list或者map实现循环输出的。

 @each $member in a,b,c,d{
    .#{$member}{
        background-image:url("/images/#{$member}.jpg");
    }
}

以上代码将被编译成

.a{background-image:url("/image/a.jpg");}
.b{background-image:url("/image/b.jpg");}
.c{background-image:url("/image/c.jpg");}
.d{background-image:url("/image/d.jpg");}

5、3自定义函数

sass允许用户自定义函数

@function double($n){
    @return $n*2;
}
div{
    width:double(5px);
}

以上代码将被编译成

div{width:10px}

在我们的项目中经常会被用来计算百分比,或者根据html元素的font-size大小来计算rem
比如

@function to_rem($px){
    @return $px/50 + rem;
}

.a{width:to_rem(30);}

以上代码将被编译成:

.a{width:0.6rem}

本文整理自网络及《sass与compass实战》,之后将继续完善更新。
参考文章:Sass的表达式和控制命令

    原文作者:SuperSnail
    原文地址: https://www.jianshu.com/p/35dc9edcc750
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞