计算机 · 2021年12月18日 0

sass

Sass: Syntactically Awesome StyleSheets

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%;
}