Sass初学

Sass作为css预处理器的一种,极大方便了我们编写css代码。与Less相比较,我个人更加喜欢使用Sass,因为它的代码风格更加接近高级程序设计语言。
Sass上手并不难,可以参考官方文档学习。

安装Sass

1.安装ruby

Sass依赖于ruby,可以点击这里安装,在安装过程中勾选Add Ruby executables to your PATH。

2.安装Sass

安装好ruby后,打开Start Command Prompt with Ruby,输入下面命令来进行安装。

gem install sass

可以通过

sass -v

来查看版本,这也正说明了Sass已经安装成功了。

编译Sass

1.命令行编译

单文件一次性编译

sass style.scss style.css

单文件监听

sass --watch style.scss:style.css

2.Koala

在Less初学篇里已经介绍过,Koala同样可以编译Sass文件,但是这里需要注意,ruby环境默认是不支持中文编码的,因此需要将Koala文件夹中的\rubygems\gems\sass-版本\lib\sass里面的engine.rb添加一行代码Encoding.default_external = Encoding.find('utf-8')(放在所有require xxx后面即可)。

3.使用sublime的插件或者webstorm

sublime支持安装编译Sass文件的插件,webstorm本身就自带编译Sass,这里就不详细介绍了。

4.使用在线编译器

戳这里

Sass常用语法

sass有两种后缀名文件:一种后缀名为sass,不使用大括号和分号;另一种就是scss(支持css3,推荐使用)

1.文件导入

使用@import "文件名"来导入css或scss文件,如果导入的是scss文件,那么被导入的文件(一个或多个)都会被编译最终只生成一个css文件。导入的scss文件可以省去后缀。如果导入的是css文件,那么它将以被导入的形式出现在那么最终生成的css中。

@import "style"//省略后缀的style.scss


2.注释

与Less相同,Sass有两种注释:编译到css文件的/**/和不被保存的//。

3.变量

使用"$变量名"的方式来声明一个变量,与Less的@变量名不同,Sass的这种声明方式更加接近高级程序设计语言。

$color:blue;
.div{
    background-color:$color;
}

特殊变量:一般用于属性,形式为#{变量名}。

$var:left;
.div{
    border-#{$var}:1px solid black;//border-left
}


4.嵌套

Sass支持选择器的嵌套,使得父子关系和代码结构更加清晰。

.father{
    width:100px;
    height:100px;
    .son{
        background-color:blue;
        &:hover{
             background-color:red;//&匹配它的上一级选择器
        }
    }
}

属性嵌套

.div{
    width:100px;
    height:100px;
    border:{    //注意有:
        radius:10px;//相当于border-radius:10px
    }
}

@at-root
@at-root可以让它后面的选择器跳出嵌套,自己作为根。

.father{
    .son{
        @at-root .skip{
        }
    }
}
//.father{}
//.father .son{}
//.skip{}


5.mixin 混合

mixin可以实现类似于函数的功能,它可以无参,可以有参,也可以指定默认参数。用法和Less相似。
通过@mixin来创建一个混合,通过@include来使用它。

通过无参的mixin来创建一个代码块

@mixin init{
    width:100px;
    height:100px;
    background-color:blue;
}
//调用这个代码块
.div{
    @include init;
}

为mixin指定参数和缺省值

@mixin width($width:50){   //可以指定默认值,这里是50
  width:$width px;
}
.div1{
  @include width(200); //200px
}
.div2{
  @include width();  //50px

mixin允许有多个参数

@mixin mul($width:100,$height:100,$background:blue){
  width:$width px;
  height:$height px;
  background-color: $background;
}
.div{
  @include mul();
}

mixin最常用的地方就是css3的hack代码(如border-radius等)

@mixin rounded($v,$h,$radius:5px){
  -webkit-border-#{$v}-#{$h}-radius: $radius;
  -moz-border-radius-#{$v}#{$h}: $radius;
  border-#{$v}-#{$h}-radius: $radius;
}


6.继承

Sass的继承类似于高级程序设计语言的继承,可以使用@extend从一个选择器(占位符)继承它的样式。

.father{
  width:100px;
  height:100px;
  background-color: black;
}
.son{
  @extend .father;  //继承了.father的所有样式
  border-width:2px;
}

占位符:要实现继承必须有父类,也就是必须要有一个选择器来实现被继承,但是这个父选择器最终也会被编译成css样式。Sass提供了占位符这个功能来实现类似于接口的功能,可以为占位符设定样式,占位符可以被继承并且它最终不会被编译到css文件中,这个功能大大减少了css代码。

%father{
  width:100px;
  height:100px;
  background-color: black;
}
.son{
  @extend %father;  //继承了%father的样式,但是%father最终不会被编译
  border-width:2px;
}


7.函数

Sass提供了一些函数,其中最常用的是color函数。用户也可以自己定义函数。
常用的color函数:lighten($color,$amount)和darken($color,$amount)代表颜色减淡和加深,第一个参数为颜色,第二个参数为百分比。

body{
  background-color: lighten(black,50%);//gray
}

自定义函数

@function myfunction($width){
  @return $width*2 px;
}
.div3{
  width:myfunction(300);
}


8.运算

Sass支持变量之间以及变量直接和数值的运算,要注意运算符前面要有一个空格。用法同Sass,这里就不详细叙述了。
条件语句@if和@else:

$var:100;
.div{
    @if($var==100){
    width:100px;
}
    @else{
    width:200px;
}

三目判断if(condition,true,false)第一个参数代表条件,第二个参数代表为真的时候的值,第三个代表为假的时候的值。

$var:100;
.div{
    width:if($var==100,200px,300px);   //width:200px
}

循环@for、@while

@mixin block{
    width:100px;
    height:100px;
    background-color:black;
}
@for $i from 1 through 10{    //through包括10而to不包括10
  .item-#{$i}{
    @include block;//.item-1 —— .item10:{}
  }
}

使用@each来遍历
单个list字段

$i:1,2,3,4,5,6,7,8,9,10;
@each $temp in $i{
  .item-#{$temp}{
    border:1px solid red;
  }
}

多个list字段

$i:(1,blue),(2,grey),(3,yellow),(4,red),(5,black),(6,green),(7,white),(8,gold),(9,blue),(10,red);
@each $temp1,$temp2 in $i{
  .item-#{$temp1}{
    background-color: $temp2;
  }
}

遍历map字段

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

推荐阅读更多精彩内容