sass学习笔记


title: vue 中使用 sass

Sass 是一款强化 CSS 的辅助工具,它在 CSS 语法的基础上增加了变量 (variables)、嵌套 (nested rules)、混合 (mixins)、导入 (inline imports) 等高级功能

安装(mac下)以及使用

安装

```
sudo cnpm install node-sass --save-dev
sudo cnpm install sass-loader --save-dev
```

使用

```
<style lang="scss" scoped> //scoped代表只在本页应用的样式
</style>
```

功能

1. 嵌套

css允许将一套css样式套进另一套样式中,内层的样式为外层样式的子选择器
(1)普通嵌套

scss样式

```
body {
    background: red;
    div {
        height: 30px;
        a{
            display: block;
        }
    }
}
```

编译后的css样式

```
body {
    background: red;
}
body div {
        height: 30px;
}
body div a{
    display: block;
}
```

(2)父选择器
scss 用 & 符号代表嵌套规则外层的父选择器

scss样式

```
a {
    background: red;
    &:hover {
        text-decoration: underline;
    }
}
```

编译后的css样式

```
a {
    background: red;
}
a:hover {
    text-decoration: underline;
}
```

(3)属性嵌套
sass允许同一个属性嵌套在命名空间中

scss样式

```
a {
    font {
        size: 28px;
        weight: bold;
    }
}
```

编译后的css样式

```
a {
    font-size: 28px;
    font-weight: bold;
}
```

(4)@import嵌套样式

scss样式

```
.text {
    color: red;
}
p {
    @import 'text'
}
```

编译后的css样式

```
p .text{
    color: red;
}
```

2. 变量 $

变量支持块级作用域,嵌套内定义的变量成为局部变量,只能在当前嵌套内使用,在顶层定义的变量成为全局变量,可以在所用地方使用

  • !global 可以将局部变量转换为全局变量,用于结尾

scss样式

```
div {
    $width: 100px !global;
    width: $width;
}
.container {
    width: $width;
}
```

编译后的css样式

```
div {
    width: 100px;
}
.container {
    width: 100px;
}
```
  • !default 默认变量,不会重新赋值已经赋值的变量,但是没有赋值的变量会赋予值

scss样式

```
$content: 'a little pain'
$content: 'much pain' !default
$value: 'lover'
p:before {
    content: $content
}
a:before{
    content: $value
}
```

编译后css样式

```
p:before {
    content: a little pain
}
a:before{
    content: 'lover'
}
```

3. 字符串

  • 使用#{}时,有引号字符串将被编译为无引号字符串,这样便于在,,mixin中引用选择器名

scss样式

```
@mixin firefox-message($selector) {
    body.content #{$selector}:before {
        content: 'hi'
    }
}
@include firefox-message('.header')
```

编译后的css样式

```
body.content .header:before{
    content: 'hi'
}
```

4. 运算

scss样式

```
p {
    font-size: 20px + 10px/2
}
```

编译后的css样式

```
p {
    font-size: 25px;
}
```

5. 插值语句

通过#{} 插值语句可以在选择器或属性名中使用变量

scss样式

```
$name: pig
$p: padding
p .$name {
    $p-left: 20px;
}
```

编译后的css样式

```
p .pig{
    padding-left: 20px;
}
```

6. extend继承

@extend 的作用是将重复使用的样式延伸给需要包含这个样式的特殊样式

scss样式

```
$p: padding
p {
    $p-left: 20px;
}
div{
    @extend p
    border: 1px solid #aaa;
}
```

编译后的css样式

```
p , div {
    padding-left: 20px;
}
div{
    border: 1px solid #aaa;
}
```

7. 控制指令

(1)@if

scss样式

```
p {
    @if 1 + 1 == 2 {
        border: 1px solid #aaa;
    }
}
```

编译后的css样式

```
p {
    border: 1px solid #aaa;
}
```

(2)@for

scss样式

```
@for $i from 1 through 3 {
    .item-#{$i} {
        width: 2em * $i;
    }
}
```

编译后的css样式

```
.item-1 {
    width: 2em;
}
.item-2 {
    width: 4em;
}
.item-3 {
    width: 6em;
}
```

(3)@each

scss样式

```
@each $header, $value in (h1: red, h2: blue) {
    $header {
        color: $value
    }
}
```

编译后的css样式

```
h1 {
    color: red;
}
h2 {
    width: blue;
}
```

8. 混合指令

混合指令用于定义可重复使用的样式,避免了使用无语意的 class

(1)定义混合样式@mixin

scss样式

```
@mixin font-value {
    font {
        size: 12px;
        weight: bold;
    }
    color: #fff;
}
```

(2)引用混合样式@include

scss样式

```
p {
    @include font-value
    background: red;
}
```

编译后的css样式

```
p {
    font-size: 12px;
    font-weight: bold;
    color: #fff;
    background: red;
}
```

(3)混合样式带参数

  • 普通参数

sass

```
@mixin args ($color) {
    font {
        size: 12px;
        weight: bold;
    }
    color: $color
}
p {
    @include args(#fff)
    background: red;
}
```

编译后的css样式

```
p {
    font-size: 12px;
    font-weight: bold;
    color: #fff;
    background: red;
}
```
  • 默认参数

sass

```
@mixin args ($color, $value: 12px) {
    font {
        size: $value;
        weight: bold;
    }
    color: $color
}
p {
    @include args(#fff, 13px)
}
a {
    @include args(red)
}
```

编译后的css样式

```
p {
    font-size: 13px;
    font-weight: bold;
    color: #fff;
}
a {
    font-size: 12px;
    font-weight: bold;
    color: red;
}
```
  • 参数变量

sass

```
@mixin args ($shadow...) {
    box-shadow: $shadow...
}
p {
    @include args(2px 3px 2px #000)
}
```

编译后的css样式

```
p {
    box-shadow: 2px 3px 2px #000;
}
```

(4)在混合指令中导入内容@content

scss样式

```
@mixin name {
    * html {
        @content
    }
}
@include name {
    body {
        background: red;
    }
}
```

编译后的css样式

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

推荐阅读更多精彩内容

  • 什么是SASS SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变...
    陈小陌丿阅读 475评论 0 0
  • 安装运行 1.下载ruby并安装 2.安装之后打开命令行执行gem命令,检查是否已经安装好 安装完ruby之后,在...
    wshining阅读 717评论 0 1
  • ​ Sass是使用Ruby语言编写的css预处理语言,诞生于2007年。Sass, LESS, stylus等...
    智明书阅读 255评论 0 1
  • SASS学习笔记 文件后缀名 sass有两种后缀名文件:一种后缀名为sass,不使用大括号和分号;另一种是scss...
    EL_PSY_CONGROO阅读 266评论 0 0
  • 潺潺流水,啁啾鸟鸣,清甜花草香,置身大自然,小米才发觉自己曾经的日子过得那么糙——每天天还不亮就要起来匆匆忙忙洗漱...
    云一禾阅读 231评论 0 0