Sass: Syntactically Awesome StyleSheets
Table of Contents
Preprocessing
Sass作为CSS的预处理器使得可以在编写CSS的过程中使用变量、嵌套、混合、继承等特性。
最直接的使用Sass的方式:
sass input.scss output.css
也可以使用_–watch_标志来监视文件或者文件夹:
sass –watch app/sass:public/stylesheets
Variables
Sass使用 $ 符号来表示变量。例如:
$font-stack: Helvetica, sans-serif;
$primary-color: #333;
body {
font: 100% $font-stack;
color: $primary-color;
}
Nesting
HTML文件存在一种嵌套的层次结构,而CSS并没有。Sass允许你的CSS选择器遵循你的HTML的视觉上的层次结构。
下面是一个典型的网站导航的例子:
nav {
ul {
margin: 0;
padding: 0;
list-style: none;
}
li { display: inline-block; }
a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
}
Partials And Import
为了支持模块化,你可将一些CSS代码片段放在单独的以下划线开头命名的文件中,要引用这些代码片段时可通过 @import 引用。引用目录也是可以的。
例如我们有如下的CSS片段 reset.scss :
// _reset.scss
html,
body,
ul,
ol {
margin: 0;
padding: 0;
}
在另一个scss文件中我们需要引用它:
// base.scss
@import 'reset';
body {
font: 100% Helvetica, sans-serif;
background-color: #efefef;
}
引用时不需要加扩展名。
Mixins
以我的理解Mixin类似于C预处理中的宏。如下面的例子:
@mixin border-radius($radius) {
-webkit-border-radius: $radius;
-moz-border-radius: $radius;
-ms-border-radius: $radius;
border-radius: $radius;
}
.box { @include border-radius(10px); }
生成的scss如下:
.box {
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
-ms-border-radius: 10px;
border-radius: 10px;
}
Extend/Inheritance
通过使用 @extend 可以让一个选择器共享另一个选择器的属性。如下面的例子:
.message {
border: 1px solid #ccc;
padding: 10px;
color: #333;
}
.success {
@extend .message;
border-color: green;
}
.error {
@extend .message;
border-color: red;
}
.warning {
@extend .message;
border-color: yellow;
}
生成的scss文件如下:
.message, .success, .error, .warning {
border: 1px solid #cccccc;
padding: 10px;
color: #333;
}
.success {
border-color: green;
}
.error {
border-color: red;
}
.warning {
border-color: yellow;
}
Operators
Sass支持一些标准的数学运算符,如+,-,*,/和%。如下面的例子:
.container { width: 100%; }
article[role="main"] {
float: left;
width: 600px / 960px * 100%;
}
aside[role="complimentary"] {
float: right;
width: 300px / 960px * 100%;
}
生成的CSS如下:
.container {
width: 100%;
}
article[role="main"] {
float: left;
width: 62.5%;
}
aside[role="complimentary"] {
float: right;
width: 31.25%;
}
近期评论