使用 Sass (Using Sass)
Sass 有三种使用方式:作为命令行工具,作为独立的 Ruby 模块 (Ruby module),或者作为 Rack-enabled 框架的插件,包括 Ruby on Rails 与 Merb。
无论使用哪种方式都需要首先安装 Sass gem :
1 | gem install sass |
如果你使用的是 Windows ,你可能首先需要安装 Ruby
如果要在命令行中运行 Sass ,只要使用
1 | sass input.scss output.css |
你还可以使用 Sass 命令来监视某个 Sass 文件的改动,并自动编译来更新 CSS :
1 | sass --watch input.scss:output.css |
如果你的目录里有很多 Sass 文件,你也可以使用 Sass 命令来监视整个目录 :
1 | sass --watch app/sass:public/stylesheets |
SASS提供四个编译风格的选项:
nested:嵌套缩进的 css 代码,它是默认值。
expanded:没有缩进的、扩展的 css 代码。
compact:简洁格式的 css 代码。
compressed:压缩后的 css 代码。
生产环境当中,一般使用最后一个选项:
1 | sass --style compressed test.sass test.css |
使用 sass –help 可以列出完整的帮助文档
基本用法
1 变量
SASS 允许使用变量,所有变量以 $ 开头
1 | $blue : #1875e7; |
如果变量需要镶嵌在字符串之中,就必须需要写在 #{} 之中
1 | $side : left; |
2 计算功能
SASS 允许在代码中使用算式
1 | body { |
3 嵌套
SASS 允许选择器嵌套。比如,下面的 CSS 代码:
1 | div h1 { |
可以写成:
1 | div { |
属性也可以嵌套,比如 border-color 属性,可以写成:
1 | p { |
- 注意,border 后面必须加上冒号。
在嵌套的代码块内,可以使用 & 引用父元素。比如 a:hover 伪类,可以写成:
1 | a { |
4 注释
SASS 共有两种注释风格
- 标准的CSS注释 / comment / ,会保留到编译后的文件。
- 单行注释 // comment,只保留在SASS源文件中,编译后被省略。
- 在/*后面加一个感叹号,表示这是”重要注释”。即使是压缩模式编译,也会保留这行注释,通常可以用于声明版权信息。
1 | /*! |
代码的重用
1 继承
SASS 允许一个选择器,继承另一个选择器。比如,现有 class1:
1 | .class1 { |
class2 要继承 class1,就要使用 @extend 命令:
1 | .class2 { |
2 Mixin
Mixin 有点像 C 语言的宏(macro),是可以重用的代码块。
使用@mixin命令,定义一个代码块。
1 | @mixin left { |
使用 @include 命令,调用这个 mixin。
1 | div { |
mixin 的强大之处,在于可以指定参数和缺省值。
1 | @mixin left($value: 10px) { |
使用的时候,根据需要加入参数:
1 | div { |
下面是一个 mixin 的实例,用来生成浏览器前缀。
1 | @mixin rounded($vert, $horz, $radius: 10px) { |
使用的时候,可以像下面这样调用:
1 | #navbar li { @include rounded(top, left); } |
3 颜色函数
SASS 提供了一些内置的颜色函数,以便生成系列颜色。
1 | lighten(#cc3, 10%) // #d6d65c |
4 插入文件
@import 命令,用来插入外部文件。
1 | @import "path/filename.scss"; |
如果插入的是 .css 文件,则等同于 css 的 import 命令。
1 | @import "foo.css"; |
高级用法
1 条件语句
@if 可以用来判断:
1 | p { |
配套的还有 @else 命令:
1 | @if lightness($color) > 30% { |
2 循环语句
SASS支持for循环:
1 | @for $i from 1 to 10 { |
也支持 while 循环:
1 | $i: 6; |
each 命令,作用与 for 类似:
1 | @each $member in a, b, c, d { |
3 自定义函数
SASS 允许用户编写自己的函数。
1 | @function double($n) { |