sass使用的一大好处就是可以使用变量,对于那些重复使用的属性,可以通过变量名来引用。
sass中变量通过$来声明,书写方法与CSS相似,属性值可以使用空格和逗号进行分割。与CSS属性不同的是,其变量可以声明在规则块外,在规则块内部声明的变量只能在本规则块内使用。举例如下:
$nav-color: #F90;
nav {
$width: 100px;
width: $width;
color: $nav-color;
}
//编译后
nav {
width: 100px;
color: #F90;
}
CSS标准值可以存在的地方变量就可以引用,CSS生成时,变量会被他们的值所替代。
3.变量名中的下划线
变量名中的中划线与下划线是相互兼容的,也就是说,当声明变量为a-b时,使用a_b也可以进行引用,但是这个规则对于纯CSS来说如id,class名是不适用的。
sass提供嵌套规则,在CSS中,对于某一块的样式设定常常需要写很多遍,但是使用嵌套会使得要是设置更加清晰,避免了重复书写,可读性高,当被解析为CSS时,便会将嵌套恢复成CSS对应的样式,举例如下:
#content {
article {
h1 { color: #333 }
p { margin-bottom: 1.4em }
}
aside { background-color: #EEE }
}
大多数情况下我们都可以使用嵌套,它在解析时将父选择器加一个空格放在子选择器的前面,但存在伪类如:hover时,则需要特殊处理。
有时我们不希望后代选择器生成这种连接,比如下面这种情况sass就无法工作:
article a {
color: blue;
:hover { color: red }
}
解决这种问题的办法是使用一种特殊的sass选择器,即父选择器,他是用&符号,可以放在选择器可放置的地方,可以解开嵌套规则的控制,他不会像后代选择器进行拼接,而是直接使用父选择器直接替换&。
当在同一个容器元素里需要对群组进行样式设置时,使用嵌套可以减少代码量,举例如下:
.container {
h1, h2, h3 {margin-bottom: .8em}
}
nav, aside {
a {color: blue}
}
article {
~ article { border-top: 1px dashed #ccc }
> section { background: #eee }
dl > {
dt { color: #333 }
dd { color: #555 }
}
nav + & { margin-top: 0 }
}
除了选择器,属性也可以嵌套编写,对于border-width,border-color等属性,在sass中只需要写一次border,嵌套属性的规则是这样的:把属性名从中划线-的地方断开,在根属性后边添加一个冒号:,紧跟一个{ }块,把子属性部分写在这个{ }块中。就像css选择器嵌套一样,sass会把你的子属性一一解开,把根属性和子属性部分通过中划线-连接起来,最后生成的效果与你手动一遍遍写的css样式一样:
nav {
border: {
style: solid;
width: 1px;
color: #ccc;
}
}
有时我们并不需要把所有的sass文件转换为单独的css文件,对于不想转换成为css文件的,可将其文件名前加上下划线,当@import一个文件时,可以不写其全名,直接写下划线后面的部分。
sass的同一变量若声明多次,则后面的样式会覆盖前面的样式,我们可以使用!default的方式,将某一样式声明为默认样式,当导入文件对这一变量有赋值时,则其为所赋值,否则为默认值。
跟原生的css不同,sass允许@import命令写在css规则内。这种导入方式下,生成对应的css文件时,局部文件会被直接插入到css规则内导入它的地方。
sass通常会在@import处以sass格式导入文件,也可以兼容css,当以下三种情况出现时,会以原生的方式导入,这会造成浏览器的额外下载:
1)文件后缀是.css;2)被导入的文件是一个url地址;3)被导入的文件是url()的值。