八、sass - @extend样式继承

在设计网页的时候常常遇到这种情况:一个元素使用的样式与另一个元素完全相同,但又添加了额外的样式。通常会在 HTML 中给元素定义两个 class,一个通用样式,一个特殊样式。假设现在要设计一个普通错误样式与一个严重错误样式,一般会这样写:

//样式如下
.error {
  background-color: red;
}
.seriousError {
  font-weight: bold;
}

//样式使用
<div class="error seriousError">
  这是一个严重错误!
</div>

弊端:这样做必须时刻记住使用 .seriousError 时需要参考 .error 的样式,带来了很多不变:智能比如加重维护负担,导致 bug,或者给 HTML 添加无语意的样式。

使用 @extend 可以避免上述情况,告诉 Sass 将一个选择器下的所有样式继承给另一个选择器。

.error {
  color: red;
}
.seriousError {
  @extend .error;
  font-weight: bold;
}

//编译后
.error {
  color: red;
}
.seriousError {
  color: red;
  font-weight: bold;
}

多重延伸 (Multiple Extends)

同一个选择器可以延伸给多个选择器,它所包含的属性将继承给所有被延伸的选择器:

.error {
  color: red;
}
.attention {
  background-color:yellow;
}
.seriousError {
  @extend .error;
  @extend .attention;
  font-weight: bold;
}

编译后:

.error, .seriousError {
  border: 1px #f00;
  background-color: #fdd; }

.attention, .seriousError {
  font-size: 3em;
  background-color: #ff0; }

.seriousError {
  border-width: 3px; }

继续延伸 (Chaining Extends)

当一个选择器延伸给第二个后,可以继续将第二个选择器延伸给第三个,例如:

.error {
  color: red;
}
.attention {
  @extend .error;
  background-color:yellow;
}
.seriousError {
  @extend .attention;
  font-weight: bold;
}

编译后:

.error, .attention, .seriousError {
  color: red; }

.attention, .seriousError {
  background-color: yellow; }

.seriousError {
  font-weight: bold; }

注意:在使用 @extend 时,必须在同一块域内。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,569评论 25 709
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,686评论 1 92
  • <a name='html'>HTML</a> Doctype作用?标准模式与兼容模式各有什么区别? (1)、<...
    clark124阅读 8,931评论 1 19
  • 这是温暖的一家人,20年风雨兼程,相依共度。这是乐观的一家人,从困难重重到幸福成功,从未放弃低头。这是精彩的一家人...
    文文心儿阅读 5,239评论 4 24
  • 永远,到底有多远,天涯咫尺,还是咫尺天涯…… 或许时间能划去那段经历,可总有些抹不掉的记忆一直徘徊在脑海里,那么清...
    苏沐晴阅读 3,690评论 21 17