1.变量:
由变量声明符、变量名称、变量值组成,例如:$width:300px;
1-1:声明普通变量与默认变量
//普通变量
$fontSize: 12px;
body{
font-size:$fontSize;
}
//默认变量:默认变量的价值在进行组件化开发的时候会非常有用。
$baseLineHeight:1.5 !default;
body{
line-height: $baseLineHeight;
}
注意: sass 的默认变量一般是用来设置默认值,然后根据需求来覆盖的,覆盖的方式也很简单,只需要在默认变量之前重新声明下变量即可。
1-2:变量的调用
$fontSize: 12px;//声明
body{
font-size:$fontSize;//调用
}
1-3:全局变量与局部变量
全局变量就是定义在元素外面的变量!(在选择器、函数、混合宏…的外面定义的变量为全局变量);
局部变量:定义在元素内部的变量,内部的局部变量不会影响外部的其他元素,局部变量只会在局部范围内覆盖全局变量。在局部变量的属性值后加上!global关键字可以将变量提升为全局变量!
$color: orange !default;//定义全局变量(在选择器、函数、混合宏...的外面定义的变量为全局变量)
.block {
color: $color;//调用全局变量
}
em {
$color: red;//定义局部变量
a {
color: $color;//调用局部变量
}
}
span {
color: $color;//调用全局变量
}
那么问题来了:什么时候声明变量?
- 该值至少重复出现了两次;
- 该值至少可能会被更新一次;
- 该值所有的表现都与变量有关(非巧合)。
2.嵌套
分为3种:选择器嵌套、属性嵌套、伪类嵌套。
2-1:选择器嵌套:
//HTML结构:
<header>
<nav>
<a href=“##”>Home</a>
<a href=“##”>About</a>
<a href=“##”>Blog</a>
</nav>
<header>
//Sass:
nav {
a {
color: red;
//&:上一级选择器
header & {
color:green;
}
}
}
2-2:属性嵌套
Sass 中还提供属性嵌套,CSS 有一些属性前缀相同,只是后缀不一样,比如:border-top/border-right,与这个类似的还有 margin、padding、font 等属性。
//属性嵌套
.box {
border: {
top: 1px solid red;
bottom: 1px solid green;
}
}
2-3:伪类嵌套
其实伪类嵌套和属性嵌套非常类似,只不过他需要借助&
符号一起配合使用。例如经典的“clearfix”:
.clearfix{
&:before,
&:after {
content:"";
display: table;
}
&:after {
clear:both;
overflow: hidden;
}
}
注意:嵌套不是无节制的,因为你嵌套的层级越深,编译出来的 CSS 代码的选择器层级将越深。
选择器嵌套最大的问题是将使最终的代码难以阅读。开发者需要花费巨大精力计算不同缩进级别下的选择器具体的表现效果。
选择器越具体则声明语句越冗长,而且对最近选择器的引用(&)也越频繁。在某些时候,出现混淆选择器路径和探索下一级选择器的错误率很高,这非常不值得。
3.混合
如果你的整个网站中有几处小样式类似,比如颜色,字体等,在 Sass 可以使用变量来统一处理,那么这种选择还是不错的。但当你的样式变得越来越复杂,需要重复使用大段的样式时,使用变量就无法达到我们目了。这个时候 Sass 中的混合宏就会变得非常有