2017-04-24 53 views
2

我有了这个SCSS代码:SCSS - 为什么扩展类以这种方式表现?

.a { 
    color: red; 
} 

.b { 
    @extend .a; 
} 

:not(.a) { 
    color: green; 
} 

我期待这样的:

:not(.a) { 
    color: green; } 

但我发现了这一点:

:not(.a):not(.b) { 
    color: green; } 

是否有任何文件指定行为,还是编译器的错误?

+0

你的编译器看到的.A和.B为完全相同 – Brad

+0

@Brad通常编译器不会把一个''后A'和'B'变量相同= B'赋值,所以我期望在这里也有这种行为 –

回答

3

您正在从.a延伸.b,它得到一个选择器,如.a, .b。当您使用像:not这样的假选择器时,它使用生成的选择器。

在这种情况下,请使用%的占位符选择器。

%redColor{ 
    color: red; 
} 
%greenColor{ 
    color: green; 
} 

.a { 
    @extend %redColor; 
    :not(&){ 
     @extend %greenColor; 
    } 
} 

.b { 
    @extend %redColor; 
} 

输出:

.a, .b { 
    color: red; 
} 

:not(.a) { 
    color: green; 
} 
+0

Upwote为您的解决方法,但我仍然在寻找描述此行为的任何规范。 –

+0

我编辑它使事情更清晰。现在':not()'在类中。 ':not()'是一个类似':hover'的假选择符,并且在扩展一个类时包含它们。但我理解你的问题。 – llobet

相关问题