sass语法
数据
变量名以$符号开头
1 | $key: value; |
数据类型
- 数字(例如 1.2、13、10px)
- 文本字符串,无论是否有引号(例如 “foo”、’bar’、baz)
- 颜色(例如 blue、#04a3f9、rgba(255, 0, 0, 0.5))
- 布尔值(例如 true、false)
- 空值(例如 null)
- 值列表,用空格或逗号分隔(例如 1.5em 1em 0 2em、Helvetica, Arial, sans-serif)
#{}强制以字符串形式输出,不进行运算
1 | $number: 1; |
编译为
1 | .gird-1: { |
运算
所有数据类型都支持等式运算 (== and !=)。 另外,每种数据类型也有其支持的特殊运算符。
数字运算
SassScript 支持数字的标准运算(加 +、减 -、乘 *、除 /和取模 %),并且,如果需要的话,也可以在不同单位间做转换:
1 | p { |
被编译为:
1 | p { |
数字也支持关系运算(<、>、<=、>=), 等式运算(==、!=)被所有数据类型支持。
除法运算和 /
CSS 允许 / 出现在属性值里,作为分隔数字的一种方法。 既然 SassScript 是 CSS 属性语法的扩展, 他就必须支持这种语法,同时也允许 / 用在除法运算上。 也就是说,默认情况下,在 SassScript 里用 / 分隔的两个数字, 都会在 CSS 中原封不动的输出。
然而,在以下三种情况中,/ 会被解释为除法运算。 这就覆盖了绝大多数真正使用除法运算的情况。 这些情况是:
- 如果数值或它的任意部分是存储在一个变量中或是函数的返回值。
- 如果数值被圆括号包围。
- 如果数值是另一个数学表达式的一部分。
例如:
1 | p { |
被编译为:
1 | p { |
如果你希望在纯 CSS 中使用变量和 /, 你可以用 #{} 包住变量。 例如:
1 | p { |
被编译为:
1 | p { |
@ 规则和指令
Sass 支持所有 CSS3 的 @ 规则, 以及一些 Sass 专属的规则,也被称为“指令(directives)”。 这些规则在 Sass 中具有不同的功效,详细解释如下。 也可参考 控制指令(control directives) 和 mixin 指令(mixin directives)。
@import
Sass 扩展了 CSS 的 @import 规则,让它能够引入 SCSS 和 Sass 文件。 所有引入的 SCSS 和 Sass 文件都会被合并并输出一个单一的 CSS 文件。 另外,被导入的文件中所定义的变量或 mixins 都可以在主文件中使用。
Sass 会在当前目录下寻找其他 Sass 文件, 如果是 Rack、Rails 或 Merb 环境中则是 Sass 文件目录。 也可以通过 :load_paths 选项 或者在命令行中使用 –load-path 选项来指定额外的搜索目录。
@import 根据文件名引入。 默认情况下,它会寻找 Sass 文件并直接引入, 但是,在少数几种情况下,它会被编译成 CSS 的 @import 规则:
- 如果文件的扩展名是 .css。
- I如果文件名以 http:// 开头。
- 如果文件名是 url()。
- 如果 @import 包含了任何媒体查询(media queries)。
如果上述情况都没有出现,并且扩展名是 .scss 或 .sass, 该名称的 Sass 或 SCSS 文件就会被引入。 如果没有扩展名, Sass 将试着找出具有 .scss 或 .sass 扩展名的同名文件并将其引入。
@extend 继承
1 | .error { |
@if
1 | $type: monster; |
@for
1 | @for $i from 1 through 3 { |
@each
1 | @each $animal in puma, sea-slug, egret, salamander { |
@while
1 | $i: 6; |
@mixin定义一个混淆
1 | @mixin large-text { |
1 | @mixin clearfix { |
@include调用一个混淆
1 | .page-title { |
1 | @mixin silly-links { |
Arguments带参数的混淆
1 | @mixin sexy-border($color, $width) { |
@mixin参数设置默认值
1 | @mixin sexy-border($color, $width: 1in) { |
@include参数带关键字
1 | p { @include sexy-border($color: blue); } |
@content
1 | @mixin apply-to-ie6-only { |
编译为
1 | * html #logo { |
Function
1 | $grid-width: 40px; |
编译为
1 | #sidebar { |