[关闭]
@demonly 2017-10-14T04:03:53.000000Z 字数 6128 阅读 1045

Sass

零碎知识


生成 CSS

Sass --style [风格] [源文件] [目标文件]

将 SCSS 文件或者 Sass 文件编译为 CSS 文件,编译风格有以下四种

  • nested:默认风格,嵌套缩进的 CSS 代码。(大括号前不换行)
  • expanded:没有缩进的、扩展的 CSS 代码。
  • compact:简洁格式的 CSS 代码。(仅选择器间换行)
  • compressed:压缩后的 CSS 代码。

sass --watch [源文件]:[目标文件]

监听 SCSS 文件或者 Sass 文件,一旦源文件有变动就会立马编译为目标文件。

基本用法

  1. $width: 5em !global;
  1. div {
  2. h1 {
  3. color: red;
  4. }
  5. }

数据类型

SassScript支持以下几种数据类型:数字(包含单位)、字符串、颜色、布尔值、null、list(1.5em 1em 0 2em, Helvetica, Arial, sans-serif)、映射((key1: value1, key2: value2))。

在字符串中插入变量必须要写在"#{}"中

list中的元素可以以逗号分隔也可以以空格分隔,可以以括号为开始和结束。list中可以不含有值,也可以含有 null 值,在编译为 CSS 文件时 null 值都会被去掉。

映射必须要被包含在括号中,必须以逗号分隔,映射中的键和值都可以是任意 SassScript 对象。映射可以作为list,(key1: value1, key2: value2)的映射可以被视为 key1 value1, key2 value2 的list。直接将映射作为 CSS 属性的值会报错。

在压缩模式下颜色值会被转化为最简单的形式,比如 #FF0000 会被转化为 red。值得注意的是如果在选择器中出现颜色值那么也有可能会被转化,因此如果选择器中出现了颜色值,需要用引号包起来。

操作符

由于 CSS 中是存在正斜杠的,因此在 SCSS 文件中正斜杠只有在以下几种情况下才会被解析为除操作符。如果在这几种情况下需要用到 CSS 的正斜杠,那么可以用#{}分别包裹正斜杠的两边。

短横线和减操作符也具有同样的问题,遵循以下的规则就不会产生歧义。

所有操作符都对于颜色值适用。两个颜色值相加时将三个通道分别相加,当具有透明度通道的时候必须两个颜色的透明度相同才能够相加。颜色值与数字相乘时每个通道与数字分别相乘。

在字符串中使用算式需要用"#{}"包裹整个算式。

@ 指令

@import

@inport指令既可以引入一个 CSS 文件,也可以引入 Sass 文件和 SCSS 文件。

@import 指令中也可以插入"#{}",但是不能够用这种方式动态引入 Sass 文件和 SCSS 文件,仅能够用于url()方式动态引入 CSS 文件。

@import同样可以使用在嵌套中。

@media

Sass 中的 @media 指令可以在嵌套中使用。

@extend

@extend 命令使一个选择器继承另一个选择器

  1. .class2 {
  2. @extend .class1;
  3. }

如果继承的是没有样式的选择器,那么就会在编译时抛出一个错误,在命令后面加上 !optional 就可以允许继承失败而不报错。

在 @media 下使用 @extend 命令只能够继承同一个命令块下的选择器。

@at-root

@at-root 指令可以将一条或更多的规则释放到文档根部而不是嵌套在其他选择器下。

  1. .parent {
  2. ...
  3. @at-root {
  4. .child { ... }
  5. }
  6. }

默认情况下,@at-root 指令仅仅排除选择器。使用查询选项可以排除其他指令,比如 @at-root (without: media) 可以将规则释放到媒体查询以外。

@at-root (without: all) 可以排除所有指令和规则。@at-root (without: rule) 相当于默认情况。

也可以通过 with 来指定保留的部分,其余部分都将被排除。

@debug

@debug 指令将 SassScript 表达式的值打印在命令行中。

  1. @debug 10em + 2em;

@warn

@warn 指令同样可以打印信息,与 @debug 不同的是 @warn 会同时打印这行代码的位置。另外 @warn 指令打印的信息可以通过 --quiet 选项来屏蔽。

@error

@error 指令抛出一个错误。

控制指令和表达式

条件语句

  1. @if condition {
  2. } @else {
  3. }

循环语句

for 循环将对两个边界之间的每一个整数取一个值。有两种形式,区别是 for...through 包括两个边界,而 for...to 不包括两个边界。

  1. @for $var from <start> through <end>
  2. @for $var from <start> to <end>

each 语句

  1. @each $var in <list>
  2. @each $var, $var in <map>

while 语句

  1. @while condition {}

Mixin 指令

@mixin 命令定义一个 mixin,可以为其指定参数。

  1. @mixin left($value: 10px) {
  2. float: left;
  3. margin-left: $value;
  4. }

@include 命令通过 mixin 的名字来引入一个 mixin。既可以直接传入参数,也可以传入关键字参数。

  1. div {
  2. @include left(20px, $value: 10px);
  3. }

也可以将变量作为参数传入,但是必须以list或者映射形式传入所有参数并且在后面跟上"..."。

  1. $values: #ff0000, #00ff00, #0000ff;
  2. .primary {
  3. @include colors($values...);
  4. }

也可以同时传入list和映射,但是list必须要在映射之前,比如@include colors($values..., $map...)。

在使用 @include 指令的时候可以同时传入代码块,代码块中的代码将会出现在 @content 指令出现的地方。代码块中无法引用到传入 mixin 中的参数。

  1. @mixin apply-to-ie6-only {
  2. * html {
  3. @content;
  4. }
  5. }
  6. @include apply-to-ie6-only {
  7. #logo {
  8. background-image: url(/logo.gif);
  9. }
  10. }

函数指令

@function 指令定义自定义函数,@return 指令返回。

  1. @function doule($n) {
  2. @return $n * 2;
  3. }

函数参数也可以传入关键字参数。

对于函数的命名最好加入前缀,以免被误认为 SCSS 或者 CSS 的一部分。

函数

字符串函数

数字函数

list 函数

映射函数

选择器函数

颜色函数

rgb 函数

hsl 函数

透明度函数

检查函数

其他函数

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注