1. mixin混合宏
声明方式:
@mixin
调用方式:
@include
使用:
它可以传参数, 所以当代码块中涉及到变量时, 可以使用混合宏来创建相同的代码块.
缺点:
1.它不会自动合并相同的样式代码, 如果在样式文件中调用同一个混合宏, 会产生多个对应的样式代码, 造成代码的冗余. 所以代码块中不涉及到变量时, 不要使用混合宏.
2. 插值不能调用混合宏,如@include bgColor-#{$color}
这样写就是错误的.
代码:
//声明:
@mixin val($var){
margin-top: $var;
}
.div {
//调用
@include val(5px);
}
2. 继承
声明方式:
.class (如 : .titleBar)
调用方式:
@extend
使用:
如果代码块不需要传递任何变量参数, 而且有一个基类已在文件中存在, 那么就可以使用Sass的继承来调用已存在的基类.
使用继承后, 编译出来的CSS会将使用继承的代码块合并到一起, 生成组合选择器. @extend中可以使用插值, 如@extend .selected-#{$flag}
缺点:
如果基类并不存在于html结构中时, 不管调用与不调用, 编译出来的CSS中都会产生基类对应的样式代码.
代码:
//SASS
.btn {
border: 1px solid #ccc;
padding: 6px 10px;
font-size: 14px;
}
.btn-primary {
background-color: #f36;
color: #fff;
@extend .btn;
}
.btn-second {
background-color: orange;
color: #fff;
@extend .btn;
}
注: 这里的SASS代码用的是SCSS的标准编写, 下同.
//编译出来的CSS代码
.btn, .btn-primary, .btn-second {
border: 1px solid #ccc;
padding: 6px 10px;
font-size: 14px;
}
.btn-primary {
background-color: #f36;
color: #fff;
}
.btn-second {
background-clor: orange;
color: #fff;
}
3. %placeholder占位符
声明方式:
%placeholder (如: %colorBlue)
调用方式:
@extend
使用:
和继承基本相似, 但是不会在代码中生成占位符的选择器, 占位符是独立定义, 如果不调用已声明的占位符, 就不会在CSS中产生任何样式代码. @extend中可以使用插值, 如
@extend .selected-#{$flag}
代码:
//SASS
%mt10 {
margin-top: 10px;
}
%pt5{
padding-top: 5px;
}
.btn {
@extend %mt10;
@extend %pt5;
}
.block {
@extend %mt10;
span {
@extend %pt5;
}
}
//编译出来的CSS代码
.btn, .block {
margin-top: 10px;
}
.btn, .block span {
padding-top: 5px;
}