Sapper

2015年09月16日

sass 学习笔记


这是精简版,详情请看 http://www.imooc.com/index/search?words=sass

什么叫Sass

  1. Sass 是Syntactically Awesome Stylesheete Sass的缩写,是由Hampton Catlin开发的。

    Sass可以简化你的Css工作流,并可以使你的Css的扩展和维护工作变的更加容易! 例如,曾几时何,因为客户的需求的变更,你必须不断的通过查找和替换来更改一个像素值, 或者,为了能够确定多栏布局中某一栏的宽度,你需要使用计算像素值软件才能搞定。Sass引 入了一些新的概念如,变量,混合,嵌套和选择器继承。Sass看起来似乎和css很像,但它没 有分号和大括号。

  2. sass文件

    以“.sass”后缀为扩展名,以严格的缩进式语法规则来书写,不带大括号({})和分号(;)

  3. scss文件(推荐)

    以“.scss”后缀为扩展名,书写和 CSS 语法书写方式非常类似。

Sass安装环境

旧时代的做法,现在不需要这样了,了解下就好。

1.安装Ruby

下载地址 http://rubyinstaller.org/downloadshttp://ruby.taobao.org/

安装注意:安装地址不能有空格

2.切换成 RubyGame 镜像

$ gem sources --remove https://rubygems.org/
$ gem sources -a https://ruby.taobao.org/
$ gem sources -l

结果是 https://ruby.taobao.org 时说明切换成功

3.安装Sass

$ gem install sass

4.安装compass

$ gem install compass

5.Sass编译成css

sass <scss路径/名字.scss> <css输出路径/名字.css>

例如:

$ sass app/style.scss css/style.css

语法

声明变量(前面必须以 $ 开头)

$a:10px;        //声明一个变量$a,可以覆盖前面定义的
$a:20px !default;    //声明一个默认变量$a,不能覆盖前面定义的

变量调用

属性值用 $a

属性或选择器用 #{$a}

父对象(&)

在伪类嵌套里讲

嵌套

选择器嵌套

nav {
    a {
        color: red;
        p { color: blue; }
    }
}

编译后

nav a { 
    color:red;
}
nav a p {
    color:blue;
}

属性嵌套

.box {
    border: {
        top: 1px solid red;
        bottom: 1px solid green;
    }
}

编译后

.box {
    border-top: 1px solid red;
    border-bottom: 1px solid green;
}

伪类嵌套

.clearfix{
    background:red;
    &:hover {
        background:blue;
    }
}

编译后

.clearfix { background:red; }
.clearfix:hover { background:blue }

注:& 指父对象,这里指 .clearfix

混合宏(自定义函数)

没有参数

@mixin border-radius{
    -webkit-border-radius: 3px;
    border-radius: 3px;
}
button{ @include border-radius; }

不带值的参数

@mixin border-radius($radius){
    -webkit-border-radius: $radius;
    border-radius: $radius;
}
button{ @include border-radius(3px); }

带值的参数(参数有默认值)

@mixin border-radius($radius:3px){
    -webkit-border-radius: $radius;
    border-radius: $radius;
}
button{@include border-radius;}
//或 button{@include border-radius();} 
//或 button{@include border-radius(5px);}//不适用默认参数

继承

.btn {
    border: 1px solid #ccc;
    padding: 6px 10px;
    font-size: 14px;
}
.btn-primary {
    background-color: #f36;
    color: #fff;
    @extend .btn;
}

编译后

.btn, .btn-primary{
    border: 1px solid #ccc;
    padding: 6px 10px;
    font-size: 14px;
}
.btn-primary {
    background-color: #f36;
    color: #fff;
}

占位符

定义一组样式,通过@extend调用才会产生代码

%pt5{
    padding-top: 5px;
}
.btn {
    @extend %mt5;
}

编译后

.btn {
    padding-top: 5px;
}

注释

使用 // 不会被编译到 css 上

支持加减乘除

.btn {
    width: 10px + 20px;
}

加减时两者类型要一样

逻辑结构

@if

@if $boolean1 {

    //$boolean1为真

}@else if $boolean2 {

    // $boolean2我真

}@else {
    // 都为假
}

@for

@for $i from 0 through 3 {
    // 相当于js的  for(var i = 0; i <= 3; i++)    
}

@for $i from 0 to 3 {
    // 相当于js的  for(var i = 0; i < 3; i++)    
}

@while

@while $x > 0 {
    // 当$x>0时进入循环体
}

@each

@each $book in $books {
    // 相当于js的 for(var book in books)    
}

内置函数

需要安装compass

字符串与数字函数

> unquote($string)        去除双引号  
> quote($string)        加上双引号

> to-upper-case($string)    字母转大写    
> to-lower-case($string)    字母转小写    

数学函数

> percentage($value)    将一个不带单位的数转换成百分比值

> round($value)        将数值四舍五入,转换成一个最接近的整数
> ceil($value)        将大于自己的小数转换成下一位整数
> floor($value)        将一个数去除他的小数部分

> abs($value)        返回一个数的绝对值

> min($numbers⋯)    找出几个数值之间的最小值
> max($numbers⋯)    找出几个数值之间的最大值

> random()        获取随机数

列表函数

> length($list)        返回一个列表的长度值
    如 length(10px 20px) 结果为 2

> nth($list, $n)        返回 $list 里的第 $n 个值

> join($list1, $list2, [$separator])    将两个列给连接在一起,变成一个列表
            ┗ 连接后的列表使用的分隔符()
                ┣auto    有时用空格( ),有时用逗号(,)  默认
                ┣comma    逗号隔开(,)
                ┗space    空格隔开( )
    如join(10px 20px,30px 40px,comma) 结果为( 10px,20px,30px,40px )

> append($list, $val, [$separator])    把 $val 加入到 $list 后面,$separator同上

> zip($lists⋯)        将几个列表结合成一个多维的列表
    如 zip(1px 2px 3px,solid dashed dotted,green blue red)
    结果为 ((1px "solid" #008000), (2px "dashed" #0000ff), (3px "dotted" #ff0000))
    注:每个列表长度要一致

> index($list, $value)    返回 $value 在 $list 中的位置值,从1开始,没找到为 false

数值单位函数

> type-of($value)    返回 $value 的类型,有 number、string、bool、color、list、null

> unit($number)        返回 $number 的单位,如 10px 的单位为 px

> unitless($number)    判断 $number 是否带有带单位

> comparable($number1, $number2)    判断两个值是否可以做加、减和合并

三元条件函数

> if($condition, $if-true, $if-false)    相当于js的 $condition ? $if-true : $if-false;

Map函数

> Map的定义:$color: (
            default: #fff,
        primary: #22ae39
            );

> map-get($map,$key)        根据给定的 key 值,返回 map 中相关的值

> map-merge($map1,$map2)    将两个 map 合并成一个新的 map

> map-remove($map,$key)        从 map 中删除一个 key,返回一个新 map

> map-keys($map)        返回 map 中所有的 key

> map-values($map)        返回 map 中所有的 value

> map-has-key($map,$key)    根据给定的 key 值判断 map 是否有对应的 value 值,
                如果有返回 true,否则返回 false

> keywords($args)        返回一个函数的参数,这个参数可以动态的设置 key 和 value

颜色函数

> rgb($red,$green,$blue)        根据红、绿、蓝三个值创建一个颜色
    如 rgb(10,10,10) 或 rgb(#ddd) 或 rgb(red)

> rgba($red,$green,$blue,$alpha)    根据红、绿、蓝和透明度值创建一个颜色
    如 rgb(10,10,10,0.4) 或 rgba(#ddd,.4) 或 rgba(red,.4) 或 rgba($color,.5);

> red($color)                从一个颜色中获取其中红色值
> green($color)                从一个颜色中获取其中绿色值
> blue($color)                从一个颜色中获取其中蓝色值

> mix($color1,$color2,[$weight])    把两种颜色混合在一起
                ┗百分百/浮点数   混合比重,50%为中介,少了就$color1量比较多

HSL函数

> hsl($hue,$saturation,$lightness)        通过色相(hue)、饱和度(saturation)和亮度
                        (lightness)的值创建一个颜色

> hsla($hue,$saturation,$lightness,$alpha)    通过色相(hue)、饱和度(saturation)、亮度
                        (lightness)和透明(alpha)的值创建一个颜色

> hue($color)                从一个颜色中获取色相(hue)值
> saturation($color)            从一个颜色中获取饱和度(saturation)值
> lightness($color)            从一个颜色中获取亮度(lightness)值

> adjust-hue($color,$degrees)        通过改变一个颜色的色相值,创建一个新的颜色

> lighten($color,$amount)        通过改变颜色的亮度值,让颜色变亮,创建一个新的颜色
> darken($color,$amount)        通过改变颜色的亮度值,让颜色变暗,创建一个新的颜色

> saturate($color,$amount)        通过改变颜色的饱和度值,让颜色更饱和,从而创建一个新的颜色
> desaturate($color,$amount)        通过改变颜色的饱和度值,让颜色更少的饱和,
                    从而创建出一个新的颜色

> grayscale($color)            将一个颜色变成灰色,相当于desaturate($color,100%)

> complement($color)            返回一个补充色,相当于adjust-hue($color,180deg)

> invert($color)            反回一个反相色,红、绿、蓝色值倒过来,而透明度不变

Opacity函数

> alpha($color) /opacity($color)                获取颜色透明度值

> opacify($color, $amount) / fade-in($color, $amount)        使颜色更不透明

> transparentize($color, $amount) / fade-out($color, $amount)    使颜色更加透明

Sass的 @ 规则

  1. @import "scss或sass文件" 不写后缀名,在scss或sass文件里导入另外一个文件

  2. @media

  3. @extend

  4. @at-root 跳出根元素

  5. debug

  6. @warm

  7. @error


Maxi Ferreira

你好!我是诀死行者,一个专注于研究诀死 (JS) 功法的修行者。很高兴在修行的路上有你的陪伴, 你可以到 GitHub 观摩我的修行成果, 也可以到我的网站查阅我的修行笔记。