(转载学习)Sass使用指南
本文为转载学习
原文链接:http://www.ruanyifeng.com/blog/2012/06/sass.html
为CSS加入编程元素,这种叫做"CSS预处理器"(css preprocessor)。它的基本思想是,用一种专门的编程语言,进行网页样式设计,然后再编译成正常的CSS文件。
各种"CSS预处理器"之中,SASS拥有很多优点,一下是用法总结:
1、什么是SASS
SASS是一种css的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开啊,变得简单和可维护。
2、安装和使用
2.1 安装
SASS是Ruby语言写的,但是两者的语法没有关系。不懂Ruby,照样可以使用。只是必须先安装Ruby,然后再安装SASS。
假定已经装好了Ruby,接着在命令行输入下面的命令:
gem install sass
然后就可以使用了。
2.2 使用
SASS文件就是普通的文本文件,里面可以直接使用CSS语法。文件后缀名是.scss,意思是Sassy CSS。
下面的命令,可以在屏幕上显示.scss文件转化的css代码。(假设文件名为test)
sass test.scss
如果要将显示结果保存成文件,后面再跟一个.css文件名
sass test.scss test.css
SASS提供四个编译风格的选项
- nested:嵌套缩进的css代码,它是默认值
- expanded:没有缩进的、扩展的css代码
- compact:简洁格式的css代码
- compressed:压缩后的css代码
生产环境当中,一般使用最后一个选项。
sass --style compressed test.sass test.css
也可以让让SASS监听某个文件或目录,一旦原文件有改动,就自动生成编译后的版本。
//watch a file sass --watch input,scss:output.css //watch a directory sass --watch app/sass:public/stylesheets
SASS的官方网站,提供了一个在线转换器,可以在那里进行下面各种例子
3、基本用法
3.1 变量
SASS允许使用变量,所有变量以$开头。
1 $blue : #1875e7; 2 3 div { 4 color : $blue; 5 }
如果变量需要镶嵌在字符串之中,就必须写在#{}之中
1 $side : left; 2 3 .rounded { 4 border-#{$side}-radius:5px; 5 }
3.2 计算功能
SASS允许在代码中使用算式:
1 body { 2 margin : (14px/2); 3 top : 50px + 100px; 4 right : $var * 10%; 5 }
3.3 嵌套
SASS允许选择器嵌套,比如下面的CSS代码:
1 div h1 { 2 color : red; 3 }
也可以写成
1 div { 2 h1 { 3 color : red; 4 } 5 }
属性可以嵌套,比如border-color属性,可以写成:
1 p { 2 border : { 3 color : red; 4 } 5 }
在border后面必须加上冒号。
在嵌套的代码块内,可以使用$引用父元素。比如a:hover伪类,可以写成:
1 a { 2 &:hover { color : #ffb3ff;} 3 }
3.4 注释
SASS共有两种注释风格。
标准的CSS注释/* comment */,会保留到编译后的文件。
单行注释 //comment,只保留在SASS源文件中,编译后被省略
在/*后面加一个感叹号,表示这是"重要注释"。即使是被压缩模式编译,也会保留这行注释,通常可以用于声明版权信息。
1 /*! 2 重要注释! 3 */
4、代码的重用
4.1 继承
SASS允许一个选择器,继承另一个选择器。比如,现有class1
.class1 { border: 1px solid #ddd; }
class2要继承class1,就要使用@extend命令:
.class2 { @extend .class1; font-size:120%; }
4.2 Mixin
div { @include left; }
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、高级用法
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); }
评论引用:
说:LESS还是差了不少的,没有@extend,没有属性嵌套,没有@if和@for,我用下来还有不少bug(比如从javascript拿到的数据无法参与计算什么的)。唯一的特点就是可以在网页上运行时解析,这感觉相当酷(但要说有啥好处其实也没多少)。不过用这种实现CSS比直接写CSS畅快多了,尤其是单页面应用型网页。
说:Less要靠javascript解析,我不喜欢这种做法。另外,less的变量用@表示,我也不太习惯。
说:sass比less更强大点,特别是对于颜色这块的处理function非常强大,而且还可以自定义function(ruby),另外就是sass的黄金搭档http://compass-style.org/,让sass变得更加完美,就如ruby之于rails... 另外可以看看这篇文章,介绍sass,less,node.js,coffeescript开发工具WebMatrix:http://www.cnblogs.com/aNd1coder/archive/2012/06/17/2552037.html
依树 说:sass 和 less 都很好 但有没有什么好的编辑器配合啊? 好像用dreamweaver 来写的话,代码提示功能就没了,稍有不便 以致我还一直没怎么尝试过这种方式
red 说:不要保存为.less文件,直接保存成.css,这样提示功能还是有的。
像这样:<link rel="stylesheet/less" type="text/css" href="less.css">
说:用sublime text编辑器,可以安装sass开发包,就可以用提示功能了,我现在就用这个开发,很方便的
说:webstorm

浙公网安备 33010602011771号