我在使用@extend
时经常遇到的一个问题是,当尝试用另一个@extend
覆盖继承属性时。
以下是一个示例:
// class selectors to be @extended
// these could also use % to be silent/placeholder selectors
.size-2xl {
@include rem(font-size, 40px);
}
.size-3xl {
@include rem(font-size, 60px);
}
// mapping the class selector properties onto some structural classes
.heading1 {
@extend .size-3xl;
}
.heading1-small {
@extend .heading1;
@extend .size-2xl;
}
当SCSS被编译时,
.heading1
和.heading1-small
会获得正确的属性,但是.heading1-small
看起来太大了。这似乎是在将可扩展的类
@extend
映射到几个不同的选择器时发生的。当SCSS被编译为CSS时,各种选择器被合并成一个或多个包含多个选择器的规则集。
有时,SCSS似乎被编译“无序”,因此编译的多个选择器
.heading1
会在.heading1-small
之后输出。这甚至可能是嵌套的
@extend
导致这种行为。避免这种情况的最佳方法是什么?我能想到的一些事情是:
- 使用
@include('size-2xl')
(不那么DRY) - 不要
@extend
包含@extend
的规则(限制了@extend的使用)
.size-3xl
规则会覆盖.size-2xl
规则,并且%
占位符选择器不是解决这个问题的方法。似乎需要非常小心地使用@extend
,并在预期变化时避免使用它(因为它很难“覆盖”)。我已经阅读了SMACSS和SMURF文献,后者只在模块内使用@extend
。这似乎是更好的前进方式。您自己是否将@extend
的使用限制为SMURF方法? - Dan@extend
的用法。干杯,伙计! - BobbyZ