3. 使用 Sass (Using Sass)

Sass 可以通过以下三种方式使用:作为命令行工具;作为独立的 Ruby 模块 (Ruby module);或者作为 Rack-enabled 框架的插件(例如 Ruby on Rails 与 Merb)。无论哪种方式都需要先安装 Sass gem (Windows 系统需要先安装 Ruby):

  1. gem install sass

在命令行中运行 Sass:

  1. sass input.scss output.css

监视单个 Sass 文件,每次修改并保存时自动编译:

  1. sass --watch input.scss:output.css

监视整个文件夹:

  1. sass --watch app/sass:public/stylesheets

更多命令的用法请通过 sass —help 获取帮助。

在 Ruby 中使用 Sass 也非常容易,Sass gem 安装完毕后运行 require "sass" 然后按照下面的方法使用 Sass::Engine

  1. engine = Sass::Engine.new("#main {background-color: #0000ff}", :syntax => :scss)
  2. engine.render #=> "#main { background-color: #0000ff; }\n"

3.1. Rack/Rails/Merb Plugin

在 Rails 3 之前的版本中使用 Sass,需要在 environment.rb 文件中添加:

  1. config.gem "sass"

Rails 3 则需要在 Gemfile 中添加:

  1. gem "sass"

在 Merb 中使用 Sass,需要在 config/dependencies.rb 中添加:

  1. dependency "merb-haml"

在 Rack 中使用 Sass,需要在 config.ru 中添加:

  1. require 'sass/plugin/rack'
  2. use Sass::Plugin::Rack

样式文件与 views 不同,不包含任何动态内容,因此 CSS 只需要在 Sass 文件被修改后再编译生成。默认情况下 .sass.scss 文件放置在 public/stylesheets/sass 中(可通过 :template_location 修改路径),编译生成的 CSS 文件放置在 public/stylesheets 中。例如 public/stylesheets/sass/main.scss 编译生成 public/stylesheets/main.css

3.2. 缓存 (Caching)

Sass 自动缓存编译后的模板与 partials,这样做能够显著提升重新编译的速度,尤其在处理由 @import 导入多个子文件的大型项目时。

单独使用 Sass,缓存内容保存在 .sass-cache 文件夹中。在 Rails 和 Merb 项目中缓存文件保存在 tmp/sass-cache 文件夹中(可通过 :cache_location 修改路径)。禁用缓存可将 :cache 设为 false

3.3. 配置选项 (Options)

暂未翻译

3.4. 判断语法格式 (Syntax Selection)

Sass 命令行工具根据文件的拓展名判断所使用的语法格式,没有文件名时 sass 命令默认编译 .sass 文件,添加 —scss 选项或者使用 scss 命令编译 SCSS 文件。

3.5. 编码格式 (Encodings)

在 Ruby 1.9 及以上环境中运行 Sass 时,Sass 对文件的编码格式比较敏感,首先会根据 CSS spec 判断样式文件的编码格式,如果失败则检测 Ruby string encoding。也就是说,Sass 首先检查 Unicode byte order mark,然后是 @charset 声明,最后是 Ruby string encoding,假如都没有检测到,默认使用 UTF-8 编码。

与 CSS 相同,使用 @charset 可以声明特定的编码格式。在样式文件的起始位置(前面没有任何空白与注释)插入 @charset "encoding-name", Sass 将会按照给出的编码格式编译文件。注意所使用的编码格式必须可转换为 Unicode 字符集。

Sass 以 UTF-8 编码输出 CSS 文件,当且仅当编译后的文件中包含非 ASCII 字符时,才会在输出文件中添加 @charset 声明,而在压缩模式下 (compressed mode) 使用 UTF-8 byte order mark 代替 @charset 声明语句。