SASS学习笔记

Sass是一门CSS编译语言,为CSS赋予了可编程的能力,允许我们使用变量、函数、mixin等手段来进行模块化的CSS开发,减少了大量冗余的代码工作量。

1. 语法

Sass支持两种语法

1.1 scss

SCSS语法使用.scss后缀,SCSS基本上是CSS的超集,也就是绝大多数的CSS语法都可以直接使用。因为与CSS语法相似,这是学习SASS最简单也最流行的一种语法。

@mixin button-base() {
  @include typography(button);
  @include ripple-surface;
  @include ripple-radius-bounded;

  display: inline-flex;
  position: relative;
  height: $button-height;
  border: none;
  vertical-align: middle;

  &:hover { cursor: pointer; }

  &:disabled {
    color: $mdc-button-disabled-ink-color;
    cursor: default;
    pointer-events: none;
  }
}

1.2 sass 缩进语法

缩进语法是sass的原生语法,因此使用.sass作为文件后缀。这种语法用缩进表示花括号,空号表示花括号的结束。

@mixin button-base()
  @include typography(button)
  @include ripple-surface
  @include ripple-radius-bounded

  display: inline-flex
  position: relative
  height: $button-height
  border: none
  vertical-align: middle

  &:hover
    cursor: pointer

  &:disabled
    color: $mdc-button-disabled-ink-color
    cursor: default
    pointer-events: none

2. 文档构成

像大多数CSS文件一样,Sass文件主要由样式规则及规则的属性构成,除此之外还包括一些独有的特性。

作者主要用scss语法,因此本文后续介绍中只考虑scss语法,使用sass语法的请自行转换。

2.1 样式规则

.item {
    color: green;
}

2.2 变量声明

$bg-color: #fff;

2.3 @if语句

@if语法

@if expression {
    //CSS codes here
}

具体事例

p {
    @if $bg-color { border:1px solid; }
    @if $box-width > 100 { border: none; }
}

还可以接着很多@else

$type: monster;
p {
  @if $type == ocean {
    color: blue;
  } @else if $type == matador {
    color: red;
  } @else if $type == monster {
    color: green;
  } @else {
    color: black;
  }
}

2.4 @each语句

语法

@each $var in <list or map>

具体示例

@each $color in red, green, yellow, blue {
    .p_#{$color} {
        background-color: #{$color}
    }
}

列表和映射还可以是二维的,如下所示

@each $color, $border in (aqua, dotted),
                        (red, solid),
                        (green, double){
  .#{$color} {
    background-color : $color;
    border: $border;
  }
}

也可以使用映射的方式

@each $header, $color in (h1: red, h2: green, h3: blue) {
  #{$header} {
    color: $color;
  }
}

2.5 @error@warn@debug

和传统的编程语言一样,在编写sass中的mixin,function过程中,如果有变量没有按照期望的格式传递,我们还可以增加错误处理逻辑。

@mixin reflexive-position($property, $value) {
  @if $property != left and $property != right {
    @error "Property #{$property} must be either left or right.";
  }

  $left-value: if($property == right, initial, $value);
  $right-value: if($property == right, $value, initial);

  left: $left-value;
  right: $right-value;
  [dir=rtl] & {
    left: $right-value;
    right: $left-value;
  }
}

.sidebar {
  @include reflexive-position(top, 12px);
  //       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  // Error: Property top must be either left or right.
}

和@error类似的作用,但是@warn并不会停止sass的编译。

$known-prefixes: webkit, moz, ms, o;

@mixin prefix($property, $value, $prefixes) {
  @each $prefix in $prefixes {
    @if not index($known-prefixes, $prefix) {
      @warn "Unknown prefix #{$prefix}.";
    }

    -#{$prefix}-#{$property}: $value;
  }
  #{$property}: $value;
}

.tilt {
  // Oops, we typo'd "webkit" as "wekbit"!
  @include prefix(transform, rotate(15deg), wekbit ms);
}

@debug我想就不用再细说了,这个语句是为了方便我们调试,将一些变量打印出来供分析运行态的。

2.6 CSS语句

包括以下几种:

  • CSS样式规则 h1 { font-size:xxxx; }
  • @media,@font-face等CSS内置的@规则
  • @include引用的mixin
  • @at-root指令,更详细的可以参考这里,表示选择器嵌套的最外层,对于编译结果来说将使嵌套失效,直接移除父选择器。。

2.7 一些顶级的声明

  • @use 通过命令加载modules,包括sass自带的一些modules,这里面也有作用域的概念,更详细的内容还是参考官方文档
  • @import 应用外部文件
  • @mixin 定义mixin
  • @function 定义function

3. Expressions

类似于其他语言中的变量类型或操作符的定义。

SASS中包括以下变量类型

  • 数字 Numbers,可以是纯数字也可以包括单位,如12px
  • 字符串 Strings 可以用双引号也可以不用双引号,例如"Helfetica Nenu"或者bold
  • 颜色 Colors 可以用预定义的缩写或者十六进制的写法,例如#c6538cgreen
  • 布尔值 boolean ,包括truefalse
  • null
  • 值列表,例如空格分割的值,比如padding: 1em 2em 1em 2em;
  • 映射,例如"background":red, "foreground":pink

SASS中的操作符包括:

  • ==!=用于检查两个值是否相等
  • +,-,*,%用来进行数学运算
  • <,<=,>,>= 用来进行两个值大小的比较
  • +,-,/用来连接字符串
  • (,) 用来控制运算的顺序

4. 注释的写法

注释分两种//开头的注释不会编译到CSS文件中,/**/形式的注释会编译到CSS中。
单行注释以//开头,/**/格式支持多行注释。

// This comment won't be included in the CSS.

/* But this comment will, except in compressed mode. */

/* It can also contain interpolation:
 * 1 + 1 = #{1 + 1} */

/*! This comment will be included even in compressed mode. */

p /* Multi-line comments can be written anywhere
   * whitespace is allowed. */ .sans {
  font: Helvetica, // So can single-line commments.
        sans-serif;
}

文档注释

如果使用sass写一些基本的库,可以对mixin,functions,variables等编写文档注释,通过SassDoc工具可以提取文档。

文档注释以///开头,支持Markdown语法格式。

参考资料

  1. SASS Document
  2. scss-@if指令
  3. SCSS @if() 指令
  4. scss-@each指令
  5. sass @error
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容

  • 什么是SASS SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变...
    陈小陌丿阅读 469评论 0 0
  • 安装运行 1.下载ruby并安装 2.安装之后打开命令行执行gem命令,检查是否已经安装好 安装完ruby之后,在...
    wshining阅读 713评论 0 1
  • ​ Sass是使用Ruby语言编写的css预处理语言,诞生于2007年。Sass, LESS, stylus等...
    智明书阅读 250评论 0 1
  • SASS学习笔记 文件后缀名 sass有两种后缀名文件:一种后缀名为sass,不使用大括号和分号;另一种是scss...
    EL_PSY_CONGROO阅读 260评论 0 0
  • title: vue 中使用 sass Sass 是一款强化 CSS 的辅助工具,它在 CSS 语法的基础上增加了...
    送你一堆小心心阅读 1,368评论 0 0