我有以下SASS文件
_android.scss:
$width: 111px;
@import 'child';
.android .child {
@extend %child;
}
_ios.scss:
$width: 999px;
@import 'child';
.ios .child {
@extend %child;
}
_child.scss:
%child {
width: $width;
}
app.scss:
@import 'ios';
@import 'android';
现在当我跑步时,我得到了:
$> sass app.scss
.ios .child, .android .child {
width: 999px; }
.ios .child, .android .child {
width: 111px; }
不是我的预期,这是
.ios .child {
width: 999px;
}
.android .child {
width: 111px;
}
我在这里做错了什么?
答案 0 :(得分:1)
这是因为@extends
被处理,因为它们首先在sass中找到,所有使用它们的选择器在那一点组合在一起(@extends
有点贪心)而你是包括@extends
占位符两次。
让我们逐步完成所发生的事情:
$width
并包含%child
$width
设置为新值,再次包含%child
。@extends
时,都会对其所有实例进行分组,并使用占位符中的值进行输出。这就是为什么当您查看输出时,您会看到两个选择器已分组,并且该组在定义的每个$width
值时重复两次。
如何解决问题
混合素最好。当遇到mixin时,它会在现场进行评估,并将结果属性集注入选择器。
@mixin width($width-in: 1000px) {
width: $width-in;
}
.ios .child {
@include width(111px);
}
.android .child {
@include width(999px);
}
现在,让我们逐步介绍mixin示例
我的mixin定义中的PS我使用默认值1000px
,如果调用了@include width();
,则会使用该值。