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的表达式和控制命令

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

推荐阅读更多精彩内容

  • 原文标题:Gulp for Beginners作者: Zell Liew翻译:治电小白菜原文地址:https://...
    ZZES_ZCDC阅读 1,547评论 6 18
  • 在现在的前端开发中,前后端分离、模块化开发、版本控制、文件合并与压缩、mock数据等等一些原本后端的思想开始...
    Charlot阅读 5,386评论 1 32
  • 安装Gulp首先需要安装Node.js,并在控制台输入$ npm install gulp -gMac端需要写成$...
    LaBaby_阅读 868评论 0 1
  • 想想学习Sass时间也有差不多一年的光景了。在这一年来的时间中,在GitHub不断阅读Sass相关的源码。也在国外...
    小豌豆书吧阅读 7,166评论 1 24
  • 表哥大龄青年一枚,作为80后的前半拨人,眼看着比自己小十岁的人都开始结婚了。比他小一岁的堂姐已经是十岁孩子的妈妈。...
    时纯熙阅读 365评论 0 0