Sass是CSS的扩展,为基本语言增添了更为强大的特性。 它允许您使用变量,嵌套规则,混合,内联导入等等,并提供sass,scss两种的语法选择,具有完全CSS兼容的语法,Sass可以很好的帮助你组织好大型样式表,特别是在Compass样式库的帮助下,接下来我们可以体验Sass的特性

变量

可以使用$来定义变量,就像PHP,他可以存储任何你想重用的信息,比如字体,颜色;然后可以在样式表中引用这个变量

// 定义变量
$font-stack:   Helvetica, sans-serif
$master-color: #333

body
  font: 100%  $font-stack //use font var 使用变量
  color: $master-color //use color var 使用变量

编译后的css

body {
  font: 100% Helvetica, sans-serif;
  color: #333; }

嵌套

当编写HTML时,你可能注意到它有一个清晰的嵌套和可视的层次结构。Sass允许你嵌套CSS选择器的方式遵循HTML的相同的视觉层次结构。

请注意,过度嵌套的规则将导致维护困难,通常被认为是不好的做法。

nav
  float: left
  ul
    li
      margin: 0 auto
      width: auto
      list-style: none
    height: 100px


  div
    display: block

编译后的css

nav {
    float: left;
}

nav ul {
    height: 100px;
}

nav ul li {
    margin: 0 auto;
    width: auto;
    list-style: none;
}

nav div {
    display: block;
}

Import导入

CSS有一个导入选项,允许您将CSS拆分为更小,更容易维护的小文件。 唯一的缺点是每次在CSS中使用@import时,它会创建HTTP请求。 Sass构建CSS @import时,它不需要一个HTTP请求,Sass将接收您要导入的文件,并将其与您要导入的文件合并,以便可以将一个CSS文件提供给Web浏览器

// _reset.sass

html,
body,
ul,
ol
  margin:  0
  padding: 0

// base.sass

@import reset

body
  font: 100% Helvetica, sans-serif
  background-color: #efefef
html, body, ul, ol {
  margin: 0;
  padding: 0;
}

body {
  font: 100% Helvetica, sans-serif;
  background-color: #efefef;
}

Mixins

CSS中的一些东西有点乏味,特别是与CSS3和许多-webkit,-moz类似前缀存在,mixin允许您创建一组CSS声明,以便在整个网站中重复使用,你甚至可以传递值来使你的mixin更灵活,就像其它语言的函数一样,传递参数返回结果

=border-radius($radius)
  -webkit-border-radius: $radius
  -moz-border-radius:    $radius
  -ms-border-radius:     $radius
  border-radius:         $radius

=box-shadow($color)
  -webkit-box-shadow: 10px 10px 5px $color
  -moz-box-shadow: 10px 10px 5px $color

调用mixins

@import "mixins"
div
  +box-shadow(red)

编译后

div {
  -webkit-box-shadow: 10px 10px 5px red;
  -moz-box-shadow: 10px 10px 5px red; }

继承Extend/Inheritance

这是Sass最有用的功能之一,使用@extend可以将一组CSS属性从一个选择器共享到另一个。 它有助于保持你的Sass非常简洁,在下面的示例中,error,warning和success将会继承message

.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

.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 操作符

在你的CSS中做数学是非常有帮助的,Sass有一些标准的数学运算符,如+, - ,*,/和%

.container
  width: 100%

article[role="main"]
  float: left
  width: 600px / 960px * 100%


aside[role="complementary"]
  float: right
  width: 300px / 960px * 100%

引用父选择器&

使用嵌套规则的父选择器除默认值以外的其他方式是有用的。例如,你可能想要有一个特殊的样式,当选择器悬停在上面或当body元素有一个特定的类。 在这些情况下,您可以使用&字符明确指定应插入父选择器的位置

a{
  text-decoration: none;
  &.hover{text-decoration: blink}
}

Nested Properties嵌套属性

CSS有很多属性在“namespaces;”,例如font-family,font-size和font-weight都在字体命名空间。 在CSS中,如果你想在同一个命名空间中设置一堆属性,你必须每次都输入它。 Sass提供了一个快捷方式:只需写一次命名空间,然后嵌套其中的每个子属性。 例如:

.funky {
  font: {
    family: fantasy;
    size: 30em;
    weight: bold;
  }
}

Comments注释

/* This comment is
 * several lines long.
 * since it uses the CSS comment syntax,
 * it will appear in the CSS output. */
body { color: black; }

// These comments are only one line long each.
// They won't appear in the CSS output,
// since they use the single-line comment syntax.
a { color: green; }