2017-04-24 3 views
2

Ich habe diesen Code SCSS bekam:SCSS - warum verhalten sich erweiterte Klassen so?

.a { 
    color: red; 
} 

.b { 
    @extend .a; 
} 

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

ich dies erwartet:

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

Aber ich diese bekommen:

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

Gibt es ein Dokument angeben, dass Verhalten, oder es ist ein Fehler des Compilers?

+0

Ihr Compiler siehe .a und .B wie genau das gleiche – Brad

+0

sein @Brad normalerweise Compiler nicht behandeln 'A' und 'B' Variablen wie gleiche nach' A = B 'Zuweisung, also erwarte ich dieses Verhalten auch hier –

Antwort

3

Sie erweitern .b von .a und es wird ein Selektor wie .a, .b. Wenn Sie einen Pseudoselektor wie :not verwenden, wird der Selektor generiert. In diesem Fall verwenden Sie einen Platzhalterselektor mit %.

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

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

.b { 
    @extend %redColor; 
} 

Ausgang:

.a, .b { 
    color: red; 
} 

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

Upwote für Ihre Problemumgehung, aber ich bin immer noch auf der Suche nach Spezifikationen, die dieses Verhalten beschreiben. –

+0

Ich habe es bearbeitet, um die Dinge klarer zu machen. Jetzt ist ': not()' innerhalb der Klasse. ': not()' ist ein Pseudo-Selektor wie ': hover' und sie sind enthalten, wenn Sie eine Klasse erweitern. Ich verstehe deine Frage jedoch. – llobet

Verwandte Themen