原文链接1:http://www.ruanyifeng.com/blog/2012/06/sass.html
原文链接2:http://www.ruanyifeng.com/blog/2012/11/compass.html
sass是一种“css预处理器”,而compass是sass的工具包,两者都是ruby实现,所以需要使用的话,先装ruby以及ruby的包管理器gem,然后安装即可。
1.sass的基本语法
编译
* nested:嵌套缩进的css代码,它是默认值。
* expanded:没有缩进的、扩展的css代码。
* compact:简洁格式的css代码。
* compressed:压缩后的css代码。
sass --style compressed test.sass test.css
变量
$blue : #1875e7;
div {
color : $blue;
}
$side : left;
.rounded {
border-#{$side}-radius: 5px;
}
计算
body {
margin: (14px/2);
top: 50px + 100px;
right: $var * 10%;
}
嵌套
/*元素嵌套*/
div {
hi {
color:red;
}
}
/*属性也可以嵌套,比如border-color属性,border后面必须加上冒号*/
p {
border: {
color: red;
}
}
继承
.class1 {
border: 1px solid #ddd;
}
.class2 {
@extend .class1;
font-size:120%;
}
mixin
类似c语言的宏,不过mixin还能有参数
@mixin left {
float: left;
margin-left: 10px;
}
div {
@include left;
}
/*还能定义参数,这个非常实用*/
@mixin left($value: 10px) {
float: left;
margin-right: $value;
}
div {
@include left(20px);
}
引入外部文件
@import "path/filename.scss";
@if...@else
@if lightness($color) > 30% {
background-color: #000;
} @else {
background-color: #fff;
}
@for、@while、@each
@for $i from 1 to 10 {
.border-#{$i} {
border: #{$i}px solid blue;
}
}
$i: 6;
@while $i > 0 {
.item-#{$i} { width: 2em * $i; }
$i: $i - 2;
}
@each $member in a, b, c, d {
.#{$member} {
background-image: url("/image/#{$member}.jpg");
}
}
自定义函数
@function double($n) {
@return $n * 2;
}
#sidebar {
width: double(5px);
}
2.compass的用法
Compass采用模块结构,不同模块提供不同的功能。目前,它内置五个模块:
引用
* reset
* css3
* layout
* typography
* utilities
CSS3模块
目前,该模块提供19种CSS3命令,具体参见官方文档。
/*圆角*/
@import "compass/css3";
.rounded {
@include border-radius(5px);
}
/*编译后代码*/
.rounded {
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
-o-border-radius: 5px;
-ms-border-radius: 5px;
-khtml-border-radius: 5px;
border-radius: 5px;
}
/*透明*/
@import "compass/css3";
#opacity {
@include opacity(0.5);
}
/*编译后*/
#opacity {
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0.5);
opacity: 0.5;
}
/*行内区块*/
@import "compass/css3";
#inline-block {
@include inline-block;
}
/*编译后*/
#inline-block {
display: -moz-inline-stack;
display: inline-block;
vertical-align: middle;
*vertical-align: auto;
zoom: 1;
*display: inline;
}
/*更多参考官方文档*/
layout模块
该模块提供布局功能
/*指定页面的footer部分总是出现在浏览器最底端*/
@import "compass/layout";
#footer {
@include sticky-footer(54px);
}
/*指定子元素占满父元素的空间*/
@import "compass/layout";
#stretch-full {
@include stretch;
}
/*更多参考官方文档*/
typography模块
该模块提供版式功能
/*指定链接颜色的mixin*/
link-colors($normal, $hover, $active, $visited, $focus);
/*使用*/
@import "compass/typography";
a {
@include link-colors(#00c, #0cc, #c0c, #ccc, #cc0);
}
utilities模块
/*表格*/
@import "compass/utilities";
table {
@include table-scaffolding;
}
/*生成后*/
table th {
text-align: center;
font-weight: bold;
}
table td,
table th {
padding: 2px;
}
table td.numeric,
table th.numeric {
text-align: right;
}
Helper函数
@import "compass";
.icon { background-image: inline-image("icon.png");}
/*编译后*/
.icon { background-image: url('data:image/png;base64,iBROR...QmCC');}