2017-04-24 52 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

相關問題