2016-12-16 4 views
1

클래스 .highlight을 여러 요소에 적용하고 요소 유형에 따라 스타일을 적용하고 싶습니다. 나는이 작업을 수행 할 수 있습니다 :하위 선택기가 아닌 클래스 조합 선택기로 후행 앰퍼샌드 (&)를 사용하십시오.

input[type="text"].highlight {...} 
select.highlight {...} 
someOtherSelector.hightlight {...} 

하지만 내 코드를보다 간결하게 후행 앰퍼샌드 (&)를 사용하는 것을 시도하고있다.

.highlight { 

    input[type="text"].& { 
     border: 1px solid $brand-purple; 
    } 
} 

그러나 나는 다음과 같은 오류 얻을 :

Error: property "input" must be followed by a ':'

나는 또한 시도했다 :

나는 다음과 같은 노력했습니다

.highlight { 

    input[type="text"]& { 
     border: 1px solid $brand-purple; 
    } 
} 

을하지만 얻을 다음 오류 :

Invalid CSS after "[type="text"]": expected "{", was "&" "&" may only be used at the beginning of a compound selector.

이 문제를 해결할 수있는 방법이 있습니까? 아니면 SASS에서만 수행 할 수 있습니까?

답변

3

대신 .&#{&} 사용 . @at-root을 사용하면 중첩 구조를 중첩 트리의 "루트"로 완전히 분리 할 수 ​​있습니다. SASS에서

쓰기이 :

.highlight { 

    @at-root input[type="text"]#{&} { 
     border: 1px solid $brand-purple; 
    } 
} 

이가 CSS에 준수합니다 :이 도움이

input[type="text"].highlight { 
    border: 1px solid purple; 
} 

희망!

당신은 당신의하는 SCS 비트를 재구성해야
+0

이'로 컴파일 :

input[type="text"] { &.highlight { border: 1px solid $brand-purple; } } 

* 편집하여 업데이트 후, 당신은에서 루트 @를 사용할 수 있습니다 input [type = "text"] .highlight'이 아니라, OP가 요청한대로 input [type = "text"]. –

+1

@JonUleis 오! 내 잘못이야. 답변을 업데이트했습니다. –

+0

닫기! 그러나 그것의 결과는'.highlight input [type = "text"]. 그냥'input [type = "text"] 대신에 하이라이트 {...'. highlight {...' – jbyrd

0

, 당신이 필요입니다

.highlight { 
    @at-root { 
    input[type="text"] { 
     &.highlight { 
     border: 1px solid $brand-purple; 
     } 
    } 
    } 
} 
+0

나는 그것을 할 수 있음을 알고 있지만, 나는 원하지 않는다. 나는'.highlight' 클래스를'.highlight'을 반복하지 않고 여러 종류의 엘리먼트에 적용하기를 원합니다. – jbyrd

+0

아 맑고 선명한 그림을 그리기 위해 thnx를 업데이트했습니다. –

+0

그러나 그것은 또한 원래의 구조화의 전체 목적을 무효화합니다. 왜냐하면'.highlight'을 반복해야하기 때문입니다. – jbyrd