Java工作生活

如何在vue中使用sass

2019-12-11  本文已影响0人  问题_解决_分享_讨论_最优

Sass (Syntactically Awesome StyleSheets)

Sass 是一款强化 CSS 的辅助工具,它在 CSS 语法的基础上增加了变量 (variables)、嵌套 (nested rules)、混合 (mixins)、导入 (inline imports) 等高级功能,这些拓展令 CSS 更加强大与优雅。使用 Sass 以及 Sass 的样式库(如 Compass)有助于更好地组织管理样式文件,以及更高效地开发项目。

1. 特色功能 (Features)

完全兼容 CSS3

在 CSS 基础上增加变量、嵌套 (nesting)、混合 (mixins) 等功能

通过函数进行颜色值与属性值的运算

提供控制指令 (control directives)等高级功能

自定义输出格式

2. 语法格式 (Syntax)

Sass 有两种语法格式。首先是 SCSS (Sassy CSS) —— 也是本文示例所使用的格式 —— 这种格式仅在 CSS3 语法的基础上进行拓展,所有 CSS3 语法在 SCSS 中都是通用的,同时加入 Sass 的特色功能。此外,SCSS 也支持大多数 CSS hacks 写法以及浏览器前缀写法 (vendor-specific syntax),以及早期的 IE 滤镜写法。这种格式以 .scss 作为拓展名。

另一种也是最早的 Sass 语法格式,被称为缩进格式 (Indented Sass) 通常简称 "Sass",是一种简化格式。它使用 “缩进” 代替 “花括号” 表示属性属于某个选择器,用 “换行” 代替 “分号” 分隔属性,很多人认为这样做比 SCSS 更容易阅读,书写也更快速。缩进格式也可以使用 Sass 的全部功能,只是与 SCSS 相比个别地方采取了不同的表达方式,具体请查看 the indented syntax reference。这种格式以 .sass 作为拓展名。

任何一种格式可以直接 导入 (@import) 到另一种格式中使用,或者通过 sass-convert 命令行工具转换成另一种格式:

# Convert Sass to SCSS

$ sass-convert style.sass style.scss

# Convert SCSS to Sass

$ sass-convert style.scss style.sass

3. 在VUE中使用 Sass (Using Sass)

创建一个基于 webpack 模板的新项目

$ vue init webpack myvue

在当前目录下,安装依赖

$ cd myvue

$ npm install

安装sass的依赖包

npminstall--save-dev sass-loader

//sass-loader依赖于node-sass

npminstall--save-dev node-sass

在build文件夹下的webpack.base.conf.js的rules里面添加配置

{

test: /\.scss$/,

loaders: ['style','css','sass']

}

如下图所示:

在APP.vue中修改style标签

<style lang="scss">

然后运行项目

$ npm run dev

修改APP.vue的样式,可以看下效果

运行结果背景变成灰色吗,说明你已成功配置好sass

4. CSS 功能拓展 (CSS Extensions)

4.1. 嵌套规则 (Nested Rules)

Sass 允许将一套 CSS 样式嵌套进另一套样式中,内层的样式将它外层的选择器作为父选择器,例如:

#main p {

  color: #00ff00;

  width: 97%;

  .redbox {

    background-color: #ff0000;

    color: #000000;

  }

}

编译为

#main p {

  color: #00ff00;

  width: 97%; }

  #main p .redbox {

    background-color: #ff0000;

    color: #000000; }

嵌套功能避免了重复输入父选择器,而且令复杂的 CSS 结构更易于管理:

#main {

  width: 97%;

  p, div {

    font-size: 2em;

    a { font-weight: bold; }

  }

  pre { font-size: 3em; }

}

编译为

#main {

  width: 97%; }

  #main p, #main div {

    font-size: 2em; }

    #main p a, #main div a {

      font-weight: bold; }

  #main pre {

    font-size: 3em; }

4.2. 父选择器 & (Referencing Parent Selectors: &)

在嵌套 CSS 规则时,有时也需要直接使用嵌套外层的父选择器,例如,当给某个元素设定 hover 样式时,或者当 body 元素有某个 classname 时,可以用 & 代表嵌套规则外层的父选择器。

a {

  font-weight: bold;

  text-decoration: none;

  &:hover { text-decoration: underline; }

  body.firefox & { font-weight: normal; }

}

编译为

a {

  font-weight: bold;

  text-decoration: none; }

  a:hover {

    text-decoration: underline; }

  body.firefox a {

    font-weight: normal; }

编译后的 CSS 文件中 & 将被替换成嵌套外层的父选择器,如果含有多层嵌套,最外层的父选择器会一层一层向下传递:

#main {

  color: black;

  a {

    font-weight: bold;

    &:hover { color: red; }

  }

}

编译为

#main {

  color: black; }

  #main a {

    font-weight: bold; }

    #main a:hover {

      color: red; }

& 必须作为选择器的第一个字符,其后可以跟随后缀生成复合的选择器,例如

#main {

  color: black;

  &-sidebar { border: 1px solid; }

}

编译为

#main {

  color: black; }

  #main-sidebar {

    border: 1px solid; }

当父选择器含有不合适的后缀时,Sass 将会报错。

4.3. 属性嵌套 (Nested Properties)

有些 CSS 属性遵循相同的命名空间 (namespace),比如 font-family, font-size, font-weight 都以 font 作为属性的命名空间。为了便于管理这样的属性,同时也为了避免了重复输入,Sass 允许将属性嵌套在命名空间中,例如:

.funky {

  font: {

    family: fantasy;

    size: 30em;

    weight: bold;

  }

}

编译为

.funky {

  font-family: fantasy;

  font-size: 30em;

  font-weight: bold; }

命名空间也可以包含自己的属性值,例如:

.funky {

  font: 20px/24px {

    family: fantasy;

    weight: bold;

  }

}

编译为

.funky {

  font: 20px/24px;

    font-family: fantasy;

    font-weight: bold; }

4.4. 占位符选择器 %foo (Placeholder Selectors: %foo)

Sass 额外提供了一种特殊类型的选择器:占位符选择器 (placeholder selector)。与常用的 id 与 class 选择器写法相似,只是 # 或 . 替换成了 %。必须通过 @extend 指令调用,更多介绍请查阅 @extend-Only Selectors

当占位符选择器单独使用时(未通过 @extend 调用),不会编译到 CSS 文件中。

5. 注释 /* */ 与 // (Comments: /* */ and //)

Sass 支持标准的 CSS 多行注释 /* */,以及单行注释 //,前者会 被完整输出到编译后的 CSS 文件中,而后者则不会,例如:

/* 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; }

编译为

/* This comment is

* several lines long.

* since it uses the CSS comment syntax,

* it will appear in the CSS output. */

body {

  color: black; }

a {

  color: green; }

将 ! 作为多行注释的第一个字符表示在压缩输出模式下保留这条注释并输出到 CSS 文件中,通常用于添加版权信息。

插值语句 (interpolation) 也可写进多行注释中输出变量值:

$version: "1.2.3";

/* This CSS is generated by My Snazzy Framework version #{$version}. */

编译为

/* This CSS is generated by My Snazzy Framework version 1.2.3. */

6. SassScript

在 CSS 属性的基础上 Sass 提供了一些名为 SassScript 的新功能。 SassScript 可作用于任何属性,允许属性使用变量、算数运算等额外功能。

通过 interpolation,SassScript 甚至可以生成选择器或属性名,这一点对编写 mixin 有很大帮助。

6.1. Interactive Shell

Interactive Shell 可以在命令行中测试 SassScript 的功能。在命令行中输入 sass -i,然后输入想要测试的 SassScript 查看输出结果:

$ sass -i

>> "Hello, Sassy World!"

"Hello, Sassy World!"

>> 1px + 1px + 1px

3px

>> #777 + #777

#eeeeee

>> #777 + #888

white

6.2. 变量 $ (Variables: $)

SassScript 最普遍的用法就是变量,变量以美元符号开头,赋值方法与 CSS 属性的写法一样:

$width: 5em;

直接使用即调用变量:

#main {

  width: $width;

}

变量支持块级作用域,嵌套规则内定义的变量只能在嵌套规则内使用(局部变量),不在嵌套规则内定义的变量则可在任何地方使用(全局变量)。将局部变量转换为全局变量可以添加 !global 声明:

#main {

  $width: 5em !global;

  width: $width;

}

#sidebar {

  width: $width;

}

编译为

#main {

  width: 5em;

}

#sidebar {

  width: 5em;

}

6.3. 数据类型 (Data Types)

SassScript 支持 6 种主要的数据类型:

数字,1, 2, 13, 10px

字符串,有引号字符串与无引号字符串,"foo", 'bar', baz

颜色,blue, #04a3f9, rgba(255,0,0,0.5)

布尔型,true, false

空值,null

数组 (list),用空格或逗号作分隔符,1.5em 1em 0 2em, Helvetica, Arial, sans-serif

maps, 相当于 JavaScript 的 object,(key1: value1, key2: value2)

SassScript 也支持其他 CSS 属性值,比如 Unicode 字符集,或 !important 声明。然而Sass 不会特殊对待这些属性值,一律视为无引号字符串。

打个广告,本人博客地址是:风吟个人博客

上一篇下一篇

猜你喜欢

热点阅读