安装
快速入门
使用变量
嵌套CSS 规则
导入SASS文件
静默注释
混合器
使用选择器继承来精简CSS
小结
中文文档
特色功能
语法格式
使用 Sass
CSS 功能拓展
注释 /* */ 与 //
SassScript
@-Rules 与指令
控制指令
混合指令
函数指令
输出格式
拓展 Sass
控制指令 - Sass基础文档 - 笔下光年
网站首页
控制指令
SassScript 提供了一些基础的控制指令,比如在满足一定条件时引用样式,或者设定范围重复输出格式。控制指令是一种高级功能,日常编写过程中并不常用到,主要与混合指令 (mixin) 配合使用,尤其是用在 Compass 等样式库中。 ### 8.1. if() The built-in if() function allows you to branch on a condition and returns only one of two possible outcomes. It can be used in any script context. The if function only evaluates the argument corresponding to the one that it will return – this allows you to refer to variables that may not be defined or to have calculations that would otherwise cause an error (E.g. divide by zero). ### 8.2. @if 当 @if 的表达式返回值不是 false 或者 null 时,条件成立,输出 {} 内的代码: ```sass p { @if 1 + 1 == 2 { border: 1px solid; } @if 5 < 3 { border: 2px dotted; } @if null { border: 3px double; } } ``` 编译成: ```sass p { border: 1px solid; } ``` `@if` 声明后面可以跟多个 `@else if` 声明,或者一个 `@else` 声明。如果 `@if` 声明失败,Sass 将逐条执行 `@else if` 声明,如果全部失败,最后执行 `@else` 声明,例如: ```sass $type: monster; p { @if $type == ocean { color: blue; } @else if $type == matador { color: red; } @else if $type == monster { color: green; } @else { color: black; } } ``` 编译成: ```sass p { color: green; } ``` ### 8.3. @for `@for` 指令可以在限制的范围内重复输出格式,每次按要求(变量的值)对输出结果做出变动。这个指令包含两种格式:`@for $var from <start> through <end>`,或者 `@for $var from <start> to <end>`,区别在于 through 与 to 的含义:当使用 through 时,条件范围包含 `<start>` 与 `<end>` 的值,而使用 to 时条件范围只包含 `<start>` 的值不包含 `<end>` 的值。另外,`$var` 可以是任何变量,比如 `$i`;`<start>` 和 `<end>` 必须是整数值。 ```sass @for $i from 1 through 3 { .item-#{$i} { width: 2em * $i; } } ``` 编译成: ```sass .item-1 { width: 2em; } .item-2 { width: 4em; } .item-3 { width: 6em; } ``` ### 8.4. @each `@each` 指令的格式是 `$var in <list>`, `$var` 可以是任何变量名,比如 `$length` 或者 `$name`,而 `<list>` 是一连串的值,也就是值列表。 `@each` 将变量 $var 作用于值列表中的每一个项目,然后输出结果,例如: ```sass @each $animal in puma, sea-slug, egret, salamander { .#{$animal}-icon { background-image: url('/images/#{$animal}.png'); } } ``` 编译成: ```sass .puma-icon { background-image: url('/images/puma.png'); } .sea-slug-icon { background-image: url('/images/sea-slug.png'); } .egret-icon { background-image: url('/images/egret.png'); } .salamander-icon { background-image: url('/images/salamander.png'); } ``` #### 8.4.1 Multiple Assignment The @each directive can also use multiple variables, as in @each $var1, $var2, ... in . If is a list of lists, each element of the sub-lists is assigned to the respective variable. For example: ```sass @each $animal, $color, $cursor in (puma, black, default), (sea-slug, blue, pointer), (egret, white, move) { .#{$animal}-icon { background-image: url('/images/#{$animal}.png'); border: 2px solid $color; cursor: $cursor; } } ``` 编译成: ```sass .puma-icon { background-image: url('/images/puma.png'); border: 2px solid black; cursor: default; } .sea-slug-icon { background-image: url('/images/sea-slug.png'); border: 2px solid blue; cursor: pointer; } .egret-icon { background-image: url('/images/egret.png'); border: 2px solid white; cursor: move; } ``` Since maps are treated as lists of pairs, multiple assignment works with them as well. For example: ```sass @each $header, $size in (h1: 2em, h2: 1.5em, h3: 1.2em) { #{$header} { font-size: $size; } } ``` 编译成: ```sass h1 { font-size: 2em; } h2 { font-size: 1.5em; } h3 { font-size: 1.2em; } ``` ## 8.5. @while @while 指令重复输出格式直到表达式返回结果为 false。这样可以实现比 @for 更复杂的循环,只是很少会用到。例如: ```sass $i: 6; @while $i > 0 { .item-#{$i} { width: 2em * $i; } $i: $i - 2; } ``` ```sass .item-6 { width: 12em; } .item-4 { width: 8em; } .item-2 { width: 4em; } ```
上一篇:
@-Rules 与指令
下一篇:
混合指令