2017-04-24 1 views
2

나는이 SCSS 코드를 가지고 어떤 문서 지정이 있습니까SCSS - 왜 확장 클래스는 이런 식으로 동작합니까?</p> <pre><code>.a { color: red; } .b { @extend .a; } :not(.a) { color: green; } </code></pre> <p>나는이 기대 해요 : :</p> <pre><code>:not(.a) { color: green; } </code></pre> <p>을하지만이 받고 있어요 :

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

을 그 동작, 또는 컴파일러의 버그입니까?

+0

컴파일러 참조의 .A와 정확히 같은 – Brad

+0

@ 브래드 일반적으로 컴파일러는'후'동일 A'와'B' 변수를 취급하지 않습니다 인 것으로 .B = B' 과제이므로 여기도이 동작을 기대합니다 –

답변

3

.b.a에서 연장하면 .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

관련 문제