sass学习笔记(下)

简介: sass学习笔记


## 在指令中延伸

在指令中使用@extend时有一些限制,sass不可以将@media层外的css规则延伸给指令层内的css,这样会生成大量的无用代码。如下面例子是可行的:

```
@media print {
    .error {
        border: 1px #f00;
        background-color: #fdd; 
    }
    .seriousError {
        @extend .error;
        border-width: 3px;
    }
}
```

但不可以这样:

```
.error {
    border: 1px #f00;
    background-color: #fdd;
}
@media print {
    .seriousError {
        @extend .error;
        border-width; 3px;
    }
}
```

# 控制指令


## @if

当@if的表达式返回值不是false或者null时,条件成立,输出{} 内的代码:

```
p {
    @if 1 + 1 == 2 {border: 1px solid; }
    @if 5 < 3 {border: 2px dotted;}
    @if null {border: 3px double;}
}
```

编译为

`p { border; 1px solid;}`

与别的语言相同的,也有else if和 if这些这里不过多说明


## @for

这个指令包含两种格式:

`@for $var from <start> through <end>`

`@for $var from <start> to <end>`

```
@for $i from 1 through 3 {
    .item-#{$i} {
        width: 2em * $i;
    }
}
```

编译为

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

## @each

遍历数组,@each指令的格式是`$var in <list>`

```
@each $animal in puma, sea-slug, egret, salamander {
    .#{$animal}-icon {
        background-image: url('/images/#{$animal}.png');
    }
}
```

## @while

@while指令重复输出格式直到表达式返回结果为false,这样可实现比@for更复杂的循环,只是很少会用到

```
$i: 6;
@while $i > 0 {
    .item-#{$i} {
        width: 2em * $i;
    }
    $i: $i - 2;
}
```

# 混合指令

混合指令(mixin)用于定义可重复使用的样式,避免了使用无语意的class

## 定义混合指令

混合指令的用法是在@mixin后添加名称与样式

```
@mixin large-text {
    font: {
        family: Arial;
        size: 20px;
        weight: bold;
    }
    color: #ff0000;
}
```

## 引用混合样式@include

使用@include指令引用混合样式,格式是在其后添加混合名称,以及需要的参数

```
.page-title {
    @include large-text;
    padding: 4px;
    margin-top: 10px;
}
```

混合样式中也可以包含其他混合样式

```
@mixin compound {
    @include highlighted-background;
    @include header-text;
}
@mixin highlighted-background {
    background-color: #fc0;
}
@mixin header-text {
    font-size: 20px;
}
```

## 参数

参数用于给混合指令中的样式设定变量,并且赋值使用

```
@mixin sexy-border($color, $width) {
    border: {
        color: $color;
        width: $width;
        style: dashed;
    }
}
p{ @include sexy-border(blue, lin) }
```

混合指令也可以使用给变量赋值的方法给参数设定默认值,然后,当这个指令被引用的时候,如果没有给参数赋值,则自动使用默认值

```
@mixin sexy-border($color, $width: 1in) {
    border: {
        color: $color;
        width: $width;
        style: dashed;
    }
}
p {@include sexy-border(blue)}
h1 {@icnlude sexy-border(blue, 2in)}
```

## 参数变量

如果不能确定混合指令需要使用多少个参数,可以使用参数变量...声明

```
@mixin box-shadow($shadow...) {
    box-shadow: $shadow;
}
.shadows {
    @include box-shadow(0px 4px 5px #666, 2px 6px 10px #999);
}
```

编译为

```
.shadowed {
    box-shadow: 0px 4px 5px #666, 2px 6px 10px #999;
}
```


# 函数指令

sass支持自定义函数,并能在任何属性值或者sassscript中使用

```
$grid-width: 40px;
$gutter-width: 10px;
@function grid-width($n) {
    @return $n * $grid-width + ($n - 1) * $gutter-width;
}
#sidebar { width: grid-width(5); }
```
目录
相关文章
|
24天前
|
前端开发 开发者
stylus、sass、less区别, Sass 、LESS是什么
【4月更文挑战第1天】stylus、sass、less区别, Sass 、LESS是什么
9 0
|
3月前
|
前端开发 开发者 Ruby
Sass、LESS区别是什么?大家为什么要使用他们?
Sass(Syntactically Awesome Style Sheets)和LESS(Leaner CSS)是两种流行的CSS预处理器,它们在原生CSS的基础上提供了一些额外的功能和语法。
90 1
|
4月前
|
Web App开发 前端开发 iOS开发
Sass 安装
Sass 安装
30 0
|
5月前
|
前端开发 Shell 开发工具
sass/scss 入门
sass/scss 入门
39 0
|
6月前
|
iOS开发
|
9月前
|
前端开发
初学Sass
初学Sass
51 0
|
前端开发 JavaScript
sass学习笔记(上)
sass学习笔记
87 0
|
监控 前端开发
|
前端开发 Shell 开发工具
前端自动化系列之less、scss、sass、stylus css预处理器
前端自动化系列之less、scss、sass、stylus css预处理器
213 0
|
前端开发 JavaScript
sass变量详解——你不知道的sass。
写在前面: 现在一直使用sass写css,当初入门的时候,看的很多教程,当时看的云里雾里的,现在看来还是蛮详细的,就是一点,不够小白。本人文章类型一直比较偏小白的,想要更好的为不会用sass提供一点学习的资料,相信本文对想要学习sass的人,还是有极大的参考价值的。里面有些细节,也许对已经学会使用sass的大手子也有一定的参考价值。 变量是什么? w3c关于JavaScript 变量的介绍: 上面一大堆巴拉巴拉的东西,可以先这么理解,把变量看作一个存放东西的盒子,可以将钥匙、手机、饮料等物品存放在这个盒子中,也可以在需要的时候换成我们想存放的新物品,那里面的旧的东西就存不了。
367 0
sass变量详解——你不知道的sass。