这一篇主要详述保持sass条理性和可读性的3个最基本方法——嵌套、导入和注释。css
变量自己的做用是为了保持属性值的可维护性,把全部须要维护的属性值放在同一个地方,快速更改,到处生效,可谓售后无忧。sass
变量用"$"符号开头进行声明,任何能够用做CSS属性值的东西均可以用做sass变量的值,单个值、空格分开的多个值、逗号分开的多个值均可以:ide
$primary-color: #233; $general-border: 1px solid #ddd;
变量通常声明在sass源代码的开头处,CSS规则块外(花括号外面),便于寻找和维护,不过有时候你也想将变量声明在规则块内,这也是没有问题的,只是这样就只能在块内使用,相似“块做用域”。字体
凡是CSS属性的标准值可存在的地方,变量均可以使用,并且变量能够被引用在另外一个变量的声明中:url
$primary-color: #233; $general-border: 1px solid $primary-color;
可能还见到过形如#{$val}
这样去用变量的,用#{
和}
包裹,这实际上是把变量当作一个表达式在用,这样的用法叫插值,这个在sass高级特性中再述。.net
嵌套规则就像洋葱,一层一层,颇有层次感,便可读性和条理性。最多见的选择器嵌套,就是一层层打开,通常被包含选择器做为包含选择器的后代选择器展开:code
/*sass*/ li{ float:left; a{ color: #c33; } } /*生成的css*/ li{ float:left; } li a{ color:#c33; }
父选择器标识符&
能够放在任何一个选择器能够出现的地方,表明的就是字面意思——父选择器,为何要有这个东西呢?由于不想无脑化被当作后代展开,最多见的好比当嵌套伪类选择器时:作用域
li{ float:left; a{ color: #233; &:hover{ color:#c33; } } } /*这样生成的CSS是这样的*/ li{ float:left; } li a{ color:#233; } /*注意这里的a选择器和伪类选择器间没有空格,&被父选择器直接替换*/ li a:hover{ color:#c33 }
当包含父选择器标识符的嵌套规则打开时,不会简单当作后代选择器拼接,而是&
被父选择器直接替换。get
伪类是一种经常使用用法,固然这个“飙师傅”——&
——也能够放在选择器后面(记得遇到&
打开时不是被正常拼接,能够替换):scss
#content aside{ color:red; body.ie & { color:green } } /*输出的css是这样的*/ #content aside{ color:red; } body.ie #content aside { color:green }
h1,h2,h3{ a{...} }
或者div{ h1,h2,h3{...} }
,sass会正确处理,分别打开组合h1 a, h2 a, h3 a{...}
,div h1, div h2, div h3{...}
>
、+
和~
,sass都会正确处理,无论它们是在选择器前仍是后写背景样式时写一堆background-XX
很烦吧,属性嵌套能够帮你减小一些工做量。把属性名从中划线的地方断开,在根属性后边添加一个冒号,紧跟一个花括号块,把子属性写在花括号中:
div{ background:{ image: url(./img/233.png); repeat: no-repeat; size: contain; } }
Sass的@import和CSS的不同。CSS的@import
,只有在执行到的时候才去下载其余CSS文件,这就影响了页面加载;而Sass的@import
在生成CSS文件的时候就把相关文件导入进来了。
Sass的@import
并不须要指明被导入文件的全名,便可以省略.sass
或者.scss
扩展名。
此外,每一个sass文件通常会被输出成CSS文件,但其实当咱们用@import
引入sass文件时,咱们仅仅但愿生成一个整体的css文件,不须要每一个sass文件都被输出成css,这样的文件被称做"sass局部文件",即不会被单独编译输出成css,用来被引入。
Sass局部文件须要如下划线开头,当用@import
引入时,不只能够省略扩展后缀,也能够省略开头的下划线。
因此,假设咱们有一个"_nav.scss"和一个"article.scss"须要引入,那么咱们仅仅这么写就够了:
@import "nav" @import "article"
并且,sass的@import
命令能够写在CSS规则内,这会使生成的CSS规则直接被插入到导入的地方。你能够把@import
命令看作一个宏,写在哪里,那里就被要导入的sass文件源代码替换。
导入机制能让你的sass根据某种依据分红几个板块(如根据不一样的区域),那么导入某个sass文件,这个文件彻底决定了这部分的样式,如颜色、字体、字号等。
而你想让导入后,还能修改一些值以定制本身须要的样式,好比颜色、大小等,尤为是当小明想导入你的sass文件时,可能被导入的样式设置不能很好知足他本身的需求,这个时候有两种作法:
!default
修饰变量值从而设置变量默认值,再发布出去给别人用,如$link-color:red !default
。这个时候小明若是仅仅引入不想改,那么就是这个值,若是他想改,就能够在任何一处从新声明这个变量,那么就会变成小明的值。两种方式都要从新声明,是否是“脱裤子放屁”呢?嗯,有点这个意思!区别在于:
变量值后面用!default
修饰,就有了默认值,这个变量无论在哪里被声明,就会用声明的值,这意味着,你能够在引入含有须要修改变量值的sass文件前,声明这个变量为你要的值,后面引入的文件中的值不会覆盖你声明的变量值。
下面的任一状况都会致使使用CSS原生的@import机制:
.css
结尾;Sass的注释有两种形式,一种是来自CSS的注释风格,用\*
和*\
包裹,这种注释当Sass文件被编译输出css时是会输出的,
另外一种注释方式是,以//
开头的单行注释,这被称为静默注释,由于这样的注释在被编译输出css时是不会被输出到CSS文件中的,此外,这种注释写起来简单快捷啊。
保持条理性和可读性的3种基本方式,拆分不一样板块的Sass文件,而后经过@import引入;嵌套选择器和属性,不但能够帮助增长层次和条理,还能减小打字量(变相减小了打字出错);注释永远是一个好习惯。