CSS 的预处理器 Sass

最近经常接触 Jekyll,进而又认识到 Sass(从 Sass 3 开始的新语法规则被称为 SCSS,即 Sassy CSS) 这个 CSS 的处理器,同时 Compass 又是一个高效的开发 Sass 的利器。

闲话少说,RubyGems 下的安装

$ gem install sass
$ gem install compass

创建一个新项目

$ cd /your/jekyll/path
$ compass create .

其中 config.rb 文件可以对之进行一些修改,譬如输出格式

:nested		# 默认值,嵌套缩进
:expanded	# 无缩进、扩展
:compact	# 简洁格式
:compressed	# 压缩后

以下是我的配置

# Require any additional compass plugins here.

# Set this to the root of your project when deployed:
http_path = "/"
css_dir = "style/css"
sass_dir = "style/_sass"
images_dir = "style/images"
javascripts_dir = "style/js"

# You can select your preferred output style here (can be overridden via the command line):
# output_style = :expanded or :nested or :compact or :compressed
output_style = :compressed

当然也可以不运行 compass create . 来创建目录,只需 touch config.rb,且填充以上内容即可

实时监控 Sass 目录,使之修改保存后,即可编译成对应目录的 CSS

$ compass watch .

由于此过程会生成 .sass-cache目录,提交到代码库时,将 .sass-cache 写入 .gitignore

$ cat .gitignore
_site/*
_theme_packages/*

Thumbs.db
.DS_Store

!.gitkeep

.rbenv-version
.rvmrc
.sass-cache

不过,Jekyll 2.4.0 开始内置 Sass 预处理器,可以直接生成页面需要的样式。GitHub Pages 服务已经支持 Jekyll 2.4.0 版本。详情访问:使用 Jekyll 内置的 Sass 预处理器

以下是我的目录结构

assets
├── _sass
│   ├── _bootstrap.scss
│   ├── _custom.scss
│   ├── _font-awesome.scss
│   ├── _havee.scss
│   ├── _pygments.scss
│   ├── bootstrap
│   │   ├── _alerts.scss
│   │   ├── _badges.scss
│   │   ├── _breadcrumbs.scss
│   │   ├── _button-groups.scss
│   │   ├── _buttons.scss
│   │   ├── _carousel.scss
│   │   ├── _close.scss
│   │   ├── _code.scss
│   │   ├── _component-animations.scss
│   │   ├── _dropdowns.scss
│   │   ├── _forms.scss
│   │   ├── _glyphicons.scss
│   │   ├── _grid.scss
│   │   ├── _input-groups.scss
│   │   ├── _jumbotron.scss
│   │   ├── _labels.scss
│   │   ├── _list-group.scss
│   │   ├── _media.scss
│   │   ├── _mixins.scss
│   │   ├── _modals.scss
│   │   ├── _navbar.scss
│   │   ├── _navs.scss
│   │   ├── _normalize.scss
│   │   ├── _pager.scss
│   │   ├── _pagination.scss
│   │   ├── _panels.scss
│   │   ├── _popovers.scss
│   │   ├── _print.scss
│   │   ├── _progress-bars.scss
│   │   ├── _responsive-embed.scss
│   │   ├── _responsive-utilities.scss
│   │   ├── _scaffolding.scss
│   │   ├── _tables.scss
│   │   ├── _theme.scss
│   │   ├── _thumbnails.scss
│   │   ├── _tooltip.scss
│   │   ├── _type.scss
│   │   ├── _utilities.scss
│   │   ├── _variables.scss
│   │   ├── _wells.scss
│   │   └── mixins
│   │       ├── _alerts.scss
│   │       ├── _background-variant.scss
│   │       ├── _border-radius.scss
│   │       ├── _buttons.scss
│   │       ├── _center-block.scss
│   │       ├── _clearfix.scss
│   │       ├── _forms.scss
│   │       ├── _gradients.scss
│   │       ├── _grid-framework.scss
│   │       ├── _grid.scss
│   │       ├── _hide-text.scss
│   │       ├── _image.scss
│   │       ├── _labels.scss
│   │       ├── _list-group.scss
│   │       ├── _nav-divider.scss
│   │       ├── _nav-vertical-align.scss
│   │       ├── _opacity.scss
│   │       ├── _pagination.scss
│   │       ├── _panels.scss
│   │       ├── _progress-bar.scss
│   │       ├── _reset-filter.scss
│   │       ├── _resize.scss
│   │       ├── _responsive-visibility.scss
│   │       ├── _size.scss
│   │       ├── _tab-focus.scss
│   │       ├── _table-row.scss
│   │       ├── _text-emphasis.scss
│   │       ├── _text-overflow.scss
│   │       └── _vendor-prefixes.scss
│   └── font-awesome
│       ├── _bordered-pulled.scss
│       ├── _core.scss
│       ├── _fixed-width.scss
│       ├── _icons.scss
│       ├── _larger.scss
│       ├── _list.scss
│       ├── _mixins.scss
│       ├── _path.scss
│       ├── _rotated-flipped.scss
│       ├── _spinning.scss
│       ├── _stacked.scss
│       └── _variables.scss
├── css
│   └── style.scss
├── fonts
│   ├── FontAwesome.otf
│   ├── fontawesome-webfont.eot
│   ├── fontawesome-webfont.svg
│   ├── fontawesome-webfont.ttf
│   ├── fontawesome-webfont.woff
│   ├── glyphicons-halflings-regular.eot
│   ├── glyphicons-halflings-regular.svg
│   ├── glyphicons-halflings-regular.ttf
│   └── glyphicons-halflings-regular.woff
├── img
│   ├── loading.gif
│   └── url.png
└── js
    ├── bootstrap.min.js
    ├── jquery.min.js
    └── webcore.js

这里是本人博客的 SCSS:assets/_sass

关于 Sass 的具体用法,可以查看:SASS用法指南 - 阮一峰的网络日志