SASS @extend(继承)指令
在设计网页的时候通常遇到这样的情况:一个元素使用的样式与另一个元素完全相同,但又添加了额外的样式。通常会在 HTML 中给元素定义两个 class,一个通用样式,一个特殊样式。
CSS案例
接下来以警告框为例进行讲解4种类型
标记 | 说明 |
---|---|
info | 信息!请注意这个信息。 |
success | 成功!很好地完成了提交。 |
warning | 警告!请不要提交。 |
danger | 错误!请进行一些更改。 |
所有警告框的基本样式(风格、字体大小、内边距、边框等…) ,因为我们通常会定义一个通用alert样式
.alert {
padding: 15px;
margin-bottom: 20px;
border: 1px solid transparent;
border-radius: 4px;
font-size: 12px;
}
不同警告框单独风格
.alert-info {
color: #31708f;
background-color: #d9edf7;
border-color: #bce8f1;
}
.alert-success {
color: #3c763d;
background-color: #dff0d8;
border-color: #d6e9c6;
}
.alert-warning {
color: #8a6d3b;
background-color: #fcf8e3;
border-color: #faebcc;
}
.alert-danger {
color: #a94442;
background-color: #f2dede;
border-color: #ebccd1;
}
使用
<div class="alert alert-info">
信息!请注意这个信息。
</div>
<div class="alert alert-success">
成功!很好地完成了提交。
</div>
<div class="alert alert-warning">
警告!请不要提交。
</div>
<div class="alert alert-danger">
错误!请进行一些更改。
</div>
使用继承@extend改进
基本样式我们没有变,主要是各个警告框单独的样式
.alert-info {
@extend .alert;
color: #31708f;
background-color: #d9edf7;
border-color: #bce8f1;
}
.alert-success {
@extend .alert;
color: #3c763d;
background-color: #dff0d8;
border-color: #d6e9c6;
}
.alert-warning {
@extend .alert;
color: #8a6d3b;
background-color: #fcf8e3;
border-color: #faebcc;
}
.alert-danger {
@extend .alert;
color: #a94442;
background-color: #f2dede;
border-color: #ebccd1;
}
使用时就不须要再写基本类了
<div class="alert-info">
信息!请注意这个信息。
</div>
<div class="alert-success">
成功!很好地完成了提交。
</div>
<div class="alert-warning">
警告!请不要提交。
</div>
<div class="alert-danger">
错误!请进行一些更改。
</div>
使用多个@extend
定义两个类
.alert {
padding: 15px;
margin-bottom: 20px;
border: 1px solid transparent;
border-radius: 4px;
font-size: 12px;
}
.important {
font-weight: bold;
font-size: 14px;
}
使用
.alert-danger {
@extend .alert;
@extend .important;
color: #a94442;
background-color: #f2dede;
border-color: #ebccd1;
}
@extend多层继承
第一层继承
.alert {
padding: 15px;
margin-bottom: 20px;
border: 1px solid transparent;
border-radius: 4px;
font-size: 12px;
}
.important {
@extend .alert;
font-weight: bold;
font-size: 14px;
}
再继承
.alert-danger {
@extend .important;
color: #a94442;
background-color: #f2dede;
border-color: #ebccd1;
}
占位符%
你可能发现被继承的css父类并没有被实际应用,也就是说html代码中没有使用该类,它的唯一目的就是扩展其他选择器。
对于该类,可能不希望被编译输出到最终的css文件中,它只会增加CSS文件的大小,永远不会被使用。
这就是占位符选择器的作用。
占位符选择器类似于类选择器,但是,它们不是以句点(.)开头,而是以百分号(%)开头。
当在Sass文件中使用占位符选择器时,它可以用于扩展其他选择器,但不会被编译成最终的CSS。
改写
%alert {
padding: 15px;
margin-bottom: 20px;
border: 1px solid transparent;
border-radius: 4px;
font-size: 12px;
}
.alert-info {
@extend %alert;
color: #31708f;
background-color: #d9edf7;
border-color: #bce8f1;
}
.alert-success {
@extend %alert;
color: #3c763d;
background-color: #dff0d8;
border-color: #d6e9c6;
}
.alert-warning {
@extend %alert;
color: #8a6d3b;
background-color: #fcf8e3;
border-color: #faebcc;
}
.alert-danger {
@extend %alert;
color: #a94442;
background-color: #f2dede;
border-color: #ebccd1;
}
还可以用@mixin,@import等实现并改进
@import 导入局部模块化样式(类似功能、同一组件) 多次导入
@minix 定义可重复使用的样式