一、什么是SASS
SASS在CSS的基础上做了一些扩展,使用SASS你可以使用一些简单的编程思想进来编写CSS。比如,SASS中可以定义变量、混合、嵌套以及
函数等功能。只不过SASS不像CSS,可以直接运用到项目中,如果你需要将样式运用到项目中,有一个步骤是必须经过的——SASS转译成CSS。
到目前为止,将SASS转译成CSS并不是件困难的事情。可以通过命令行工具或者第三方插件来完成SASS向CSS的转译工作,并且转译出来的CSS代码,格式优美,且符合CSS的标准。
SASS发展到今天,变化非常大,功能也非常强。同时他的语法也有所改变。直到写这篇文章之时,SASS具有两种语法。新的主要语法(SASS 3
)称作SCSS (Sassy CSS),同时支持CSS3的语法。也就是说只要CSS3支持的在SCSS中也被支持。SCSS文件扩展名为’.scss’,这也是当下使用最多的。
二、安装和使用
SASS是Ruby语言写的,但是两者的语法没有关系。不懂Ruby,照样使用。只是必须先安装Ruby,然后再安装SASS。
在安装的时候,请勾选Add Ruby executables to your PATH这个选项,添加环境变量,不然以后使用编译软件的时候会提示找不到ruby环境
安装完ruby之后,在开始菜单中,找到刚才我们安装的ruby,打开Start Command Prompt with Ruby
假定你已经安装好了Ruby,接着在命令行输入下面的命令:
gem install sass
按回车键确认,等待一段时间就会提示你sass安装成功。最近因为墙的比较厉害,如果你没有安装成功,那么请参考下面的淘宝的RubyGems镜像安装sass,如果成功则忽略。
如果要安装beta版本的,可以在命令行中输入
gem install sass --pre
你还可以从sass的Git repository来安装,git的命令行为
git clone git://github.com/nex3/sass.gitcd sassrake install
升级sass版本的命令行为
gem update sass
查看sass版本的命令行为
sass -v
你也可以运行帮助命令行来查看你需要的命令
sass -h
干净的SASS项目
所谓的“干净的SASS”项目指的就是不使用其他任何SASS库,简单点说,就是项目先在SASS中开发,然后转译成CSS。我们来看看这样的项目是如何创建的。
首先进入到你本地项目目录下,我的一般放在Sites
中,如下所示:
$ cd Sites
这个时候就进入了项目目库中:
/Users/airen/Sites
例如我们要创建一个项目,其名称叫作“mySass”:
$ mkdir mySass
此时mySass
这个项目就在/Users/airen/Sites
中了,要是你不放心,你可以使用ls
命令查验一下:
$ ls
为了让项目规化的更完美一些,我把.scss
的SASS文件都放在sass
目录中,而需要转译出来的.css
文件都将放在css
目录中。因此,我们还需要在mySass
项目中创建sass
和css
两个文件夹:
$ cd mySass $ mkdir sass $ mkdir css
接下来打开你的编辑器,新建一个文件,并且在里面编辑一段简单的SASS代码,如下所示:
$main-color: #ce4dd6; $style: solid; .navbar { border-bottom: { color: $main-color; style: $style; } } a { color: $main-color; &:hover { border-bottom: 1px $style; } }
并且将此文件命名为style.scss
保存在mySass/sass
下。
Compass创建SASS项目
上面简单的介绍了一个净身的SASS项目,简单就不用说了。接下来我们一起看看如何通过Compass来创建一个SASS项目。
同样打开你的命令终端,并且进入到Sites
目录下。例如我们要创建一个compassSass
的项目放在Sites
目录下,我们就可以这样做:
$ compass create compassSass
这句命令一完,你的终端中会出现很多信息,首先会告诉你创建了一个compassSass
项目,并且自动在这个项目中创建了哪些文件:
+compassSass |--+sass |-----screen.scss |-----print.scss |-----ie.scss |--+stylesheets |-----ie.css |-----print.css |-----screen.css |---config.rb
除了创建了相关文件之外,还会告诉你一些其他的信息。其中有一个config.rb
文件非常重要,其主要是用来配置Compass创建的项目运行环境。所以在修改这个配置文件的时候,大家需要小心处理。
# Require any additional compass plugins here. # Set this to the root of your project when deployed: http_path = "/" css_dir = "stylesheets" sass_dir = "sass" images_dir = "images" javascripts_dir = "javascripts" # You can select your preferred output style here (can be overridden via the command line): # output_style = :expanded or :nested or :compact or :compressed # To enable relative paths to assets via compass helper functions. Uncomment: # relative_assets = true # To disable debugging comments that display the original location of your selectors. Uncomment: # line_comments = false # If you prefer the indented syntax, you might want to regenerate this # project again passing --syntax sass, or you can uncomment this: # preferred_syntax = :sass # and then run: # sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass
这样你就可以在sass
目录中创建你需要的.scss
文件,你也可以直接在screen.scss
文件中编辑SASS代码。例如此处,将上例中style.scss
的SASS代码放置在screen.scss
中。
/* Welcome to Compass. * In this file you should write your main styles. (or centralize your imports) * Import this file using the following HTML or equivalent: * <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css" /> */ @import "compass/reset"; $main-color: #ce4dd6; $style: solid; .navbar { border-bottom: { color: $main-color; style: $style; } } a { color: $main-color; &:hover { border-bottom: 1px $style; } }
在Compass创建的项目中,会自动通过@import
导入样式
@import "compass/reset";
另外,如果你不想使用SCSS,只想着旧人,不爱新欢,那么你可以在后面添加一个参数-x sass
:
$ compass create compassSass -x sass
SASS转译成CSS
既然.scss
能通过sass
命令转译成.css
样式
$ sass sass/style.scss css/style.css
CSS转译成SASS
既然.scss
能通过sass
命令转译成.css
样式,那么我们是否可以将.css
转译成.scss
呢?事实是可以的,我们可以通过sass-convert
命令:
$ sass-convert css/style.css style.scss
sass-convert
除了可以将.css
样式转译成.scss
文件之外,还可以通过这个命令对.sass
和.scss
之间样式转译。
SASS提供四个编译风格的选项
* --style nested:嵌套缩进的css代码,它是默认值。
* --style expanded:没有缩进的、扩展的css代码。
* --style compact:简洁格式的css代码。
* --style compressed:压缩后的css代码。
举例
sass --watch sass/test.scss:css/test.css --style compressed
--watch 可以让SASS监听某个文件或目录,一旦源文件有变动,就自动生成编译后的版本。
三、基本用法
3.1 变量
SASS允许使用变量,所有变量以$开头。
$blue : #1875e7; div { color : $blue; }
如果变量需要镶嵌在字符串之中,就必须需要写在#{}之中。
$side : left; .rounded { border-#{$side}-radius: 5px; }
3.2 计算功能
SASS允许在代码中使用算式:
body { margin: (14px/2); top: 50px + 100px; right: $var * 10%; }
3.3 嵌套
SASS允许选择器嵌套。比如,下面的CSS代码:
div h1 { color : red; }
可以写成:
div { h1 { color:red; } }
属性也可以嵌套,比如border-color属性,可以写成:
p { border: { color: red; } }
注意,border后面必须加上冒号。
在嵌套的代码块内,可以使用$引用父元素。比如a:hover伪类,可以写成:
a { &:hover { color: #ffb3ff; } }
3.4 注释
SASS共有两种注释风格。
标准的CSS注释 /* comment */ ,会保留到编译后的文件。
单行注释 // comment,只保留在SASS源文件中,编译后被省略。
在/*后面加一个感叹号,表示这是"重要注释"。即使是压缩模式编译,也会保留这行注释,通常可以用于声明版权信息。
/*!
重要注释!
*/
四、代码的重用
4.1 继承
SASS允许一个选择器,继承另一个选择器。比如,现有class1:
.class1 { border: 1px solid #ddd; }
class2要继承class1,就要使用@extend命令:
.class2 { @extend .class1; font-size:120%; }
4.2 Mixin
Mixin有点像C语言的宏(macro),是可以重用的代码块。
使用@mixin命令,定义一个代码块。
@mixin left { float: left; margin-left: 10px; }
使用@include命令,调用这个mixin。
div { @include left; }
mixin的强大之处,在于可以指定参数和缺省值。
@mixin left($value: 10px) { float: left; margin-right: $value; }
使用的时候,根据需要加入参数:
div { @include left(20px); }
下面是一个mixin的实例,用来生成浏览器前缀。
@mixin rounded($vert, $horz, $radius: 10px) { border-#{$vert}-#{$horz}-radius: $radius; -moz-border-radius-#{$vert}#{$horz}: $radius; -webkit-border-#{$vert}-#{$horz}-radius: $radius; }
使用的时候,可以像下面这样调用:
#navbar li { @include rounded(top, left); } #footer { @include rounded(top, left, 5px); }
4.3 颜色函数
SASS提供了一些内置的颜色函数,以便生成系列颜色。
lighten(#cc3, 10%) // #d6d65c darken(#cc3, 10%) // #a3a329 grayscale(#cc3) // #808080 complement(#cc3) // #33c
4.4 插入文件
@import命令,用来插入外部文件。
@import "path/filename.scss";
如果插入的是.css文件,则等同于css的import命令。
@import "foo.css";
五、高级用法
5.1 条件语句
@if可以用来判断:
p { @if 1 + 1 == 2 { border: 1px solid; } @if 5 < 3 { border: 2px dotted; } }
配套的还有@else命令:
@if lightness($color) > 30% { background-color: #000; } @else { background-color: #fff; }
5.2 循环语句
SASS支持for循环:
@for $i from 1 to 10 { .border-#{$i} { border: #{$i}px solid blue; } }
也支持while循环:
$i: 6; @while $i > 0 { .item-#{$i} { width: 2em * $i; } $i: $i - 2; }
each命令,作用与for类似:
@each $member in a, b, c, d { .#{$member} { background-image: url("/image/#{$member}.jpg"); } }
5.3 自定义函数
SASS允许用户编写自己的函数。
@function double($n) { @return $n * 2; } #sidebar { width: double(5px); }结束