预处理器sass的使用
sass
是一种css预处理器,它是css的扩展语言。基本思想是:使用sass语言编写sass代码,最终编译为普通的css文件。sass让我们的css代码变得更加高效和可维护。但是sass也仅能够提高写css的效率,对于css而言还是要掌握好基础。
本篇文章总结一下sass的用法。
安装
由于sass由ruby
编译,故而需要先安装ruby,而mac自带ruby。下面开始安装sass:
gem(需ruby)安装:
1 | # gem换国内源 |
npm(需node)安装:
1 | $ npm install -g sass |
brew安装:
1 | $ brew install sass/sass/sass |
window choco安装:
1 | $ choco install sass |
查看是否安装成功:
1 | $ sass --version |
使用
注意:sass文件扩展名为.scss
1 | # 编译scss文件 |
sass提供四种编译风格:
- nested:默认值,嵌套缩进的css代码。
- expanded:没有缩进、扩展的css代码。
- compact:简介的css代码。
- compressed: 压缩的css代码。
生产环境使用第四种:
1 | $ sass --style compressed style.scss style.css |
sass监听:
1 | # 监听文件 |
变量
语法:
1 | $var: value; |
sass变量可以是字符串、数字、颜色值、布尔值、列表还有null。
sass变量使用$
符号开头,变量可以重复定义。
同一个变量定义了多次是可以的,不过作用域不同。
- 定义并使用变量。
1 | /*声明变量*/ |
- 如果变量需要嵌套在字符串中,就需要写在
#{}
中。
1 | /*声明变量*/ |
- 计算
1 | body { |
- 嵌套
选择器嵌套
比如下面这个选择器是我们原生css的写法:
1 | article section { |
在scss中的写法:
1 | article { |
!global
关键字用来定义全局变量,如果有同名变量已经被定义过,则使用这个关键词可以覆盖:
1 | $mycolor: yellow; |
以上$mycolor
是一个全局变量,全局可用。
一般来说对于全局变量,我们将它统一放在一个global.scss
文件中,然后要用的使用使用@include
来包含。
属性嵌套
原生css写法:
1 | p { |
改写带sass写法:
1 | p { |
就是将属性视为选择器,但是注意所有属性的后面要加上冒号。
使用&
引用父元素:
原生css:
1 | a:hover { |
改写为sass:
1 | a { |
这里的&
就指代父元素a
。
4.4 sass注释
三种注释方式按照权重排序:/*!重要注释*/
> /*注释*/
> //注释
。
第一种:/*注释*/
css原生注释,可以单行可以多行,在scss文件以及css文件中均被保留在原码中。
第二种://注释
,单行注释,在scss文件中,但是编译后的css文件中没有。
第三种:重要注释,写法:
1 | /*! |
用出是表明这个注释非常重要,编译后依然存在,甚至压缩编译后依然存在。用于声明版权。
引入
@import
用来引入外部文件:
1 | @import "path/style.scss"; |
引入后就可以在当前文件使用import进来文件的变量
重用
- 继承
sass允许一个选择器继承另一个选择器,使用@extend selector
1 | // 先声明一个选择器的属性 |
- Mixin
Mixin用于定义一个代码块,用于后续重用。
定义代码块:@mixin selector {}
,调用代码@@include selector;
1 | // 定义代码块 |
定义代码块的同时可以指定参数和缺省:
1 | // 定义新的代码块和参数 |
mixin中也可以混入:
1 | @mixin mix3 { |
颜色函数
sass颜色函数用于生成系列颜色。
1 | lighten(#cc3,10%) // #d6d65c |
partials
如果你不希望将一个 Sass 的代码文件编译到一个 CSS 文件,你可以在文件名的开头添加一个下划线。这将告诉 Sass 不要将其编译到 CSS 文件,比如_filename.scss
但是,在导入语句中我们不需要添加下划线,导入:@import filename.scss
不要将带下划线与不带下划线的同名文件放置在同一个目录下,比如,_colors.scss 和 colors.scss 不能同时存在于同一个目录下,否则带下划线的文件将会被忽略。
条件
@if
1 | p { |
@else
1 | @if 2>1 { |
循环
@for
循环:
1 | @for $i from 1 to 10 { |
@while
循环:
1 | $i: 6; |
@each
,作用类似于for:
1 | @each $member in a,b,c,d { |
自定义函数
1 | // 定义一个double函数用于将参数double |
注意点
- 如果scss文件中有中文,则需要在文件最上方加入:
1 | @charset "utf-8" |
- sass中的
-
和_
作用相同。