5-3 @extend
本节编程练习不计算学习进度,请电脑登录imooc.com操作

@extend

Sass 中的 @extend 是用来扩展选择器占位符。比如:

.error {
  border: 1px #f00;
  background-color: #fdd;
}
.error.intrusion {
  background-image: url("/image/hacked.png");
}
.seriousError {
  @extend .error;
  border-width: 3px;
}

被编译为:

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

.error.intrusion, .seriousError.intrusion {
  background-image: url("/image/hacked.png"); }

.seriousError {
  border-width: 3px; }

详细的可以回顾前面介绍的继承样式部分。

扩展选择器:

@extend 不止扩展类选择器,还可以扩展任何选择器,比如 .special.cool, a:hover, 或 a.user[href^=“http://“],例如:

 

.hoverlink {
  @extend a:hover;
}
a:hover {
  text-decoration: underline;
}

编译出来:

a:hover, .hoverlink {
  text-decoration: underline; }

再来看一个复杂点的:

.hoverlink {
  @extend a:hover;
}
.comment a.user:hover {
  font-weight: bold;
}

编译出来的CSS

.comment a.user:hover, .comment .user.hoverlink {
  font-weight: bold; }

多个扩展

所设某个样式要继承多个地方的样式,那么可以使用 @extend 来继承多个选择器或占位符的样式,如:

.error {
  border: 1px #f00;
  background-color: #fdd;
}
.attention {
  font-size: 3em;
  background-color: #ff0;
}
.seriousError {
  @extend .error;
  @extend .attention;
  border-width: 3px;
}

编译出来的CSS

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

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

.seriousError {
  border-width: 3px; }

扩展单一选择器

前面我们知道 %placeholder 不使用@extend显示调用是不会生成任何样式代码。那么在选择器中使用占位符一样。比如下面的代码:

#context a%extreme {
  color: blue;
  font-weight: bold;
  font-size: 2em;
}

这段代码在不调用之前不产生任何代码,只有能过@extend调用之后才生成代码:

.notice {
  @extend %extreme;
}

编译出来的CSS

#context a.notice {
  color: blue;
  font-weight: bold;
  font-size: 2em;
}

任务

小伙伴们,现在让我们来练习一下@extend的用法吧!

  1. .error {
  2. border: 1px #f00;
  3. background-color: #fdd;
  4. }
  5. .error.intrusion {
  6. background-image: url("/image/hacked.png");
  7. }
  8. .seriousError {
  9. @extend .error;
  10. border-width: 3px;
  11. }
下一节