2017-10-03 13 views
2

나는 또한, HTML은 임의의 컨테이너에있을 수 있습니다올바르게 사용할 수없는 선택기 .b를 해결하는 방법 .a .b가 아닌?

.a .b { 
    background-color: cornflowerblue; 
} 

의 방식으로 받아 .a .b

없음 해킹에 .b 아니라 적용 않습니다 CSS를 정의합니다. body > .b뿐만 아니라 내가 :not 선택하거나 여기 codepen 참조 나 .a .b

div { 
 
    width: 50px; 
 
    height: 50px; 
 
    background-color: cornflowerblue; 
 
    margin: 10px; 
 
    border: 1px solid salmon; 
 
} 
 

 
.b { 
 
    background-color: green; 
 
}
<div class="a"> 
 
    <div class="b"></div> 
 
</div> 
 

 
<div class="b"></div>

의 정의를 변경하지 않는 대체 솔루션을 사용하려면 내 경우

작동하지 않습니다

https://codepen.io/anon/pen/OxOLZE

+0

생활 https://codepen.io/anon/pen/PJOYgd – soft87

+0

단지 보조 노트, 당신은 매우 느린 (CSS를하지 않기 때문에 그렇게하고 싶지 않아 해킹 그 이유를 위해 그것을 지원하십시오.) .b가 항상 .a 안에 항상 있다는 것을 아는 경우에만 .a 이미 순수 CSS가있는 답변이 있습니다. – Elentriel

답변

5

.a의 하위가 아닌 모든 .b 요소를 선택합니다.

div { 
 
    width: 50px; 
 
    height: 50px; 
 
    background-color: cornflowerblue; 
 
    margin: 10px; 
 
    border: 1px solid salmon; 
 
} 
 

 
*:not(.a) > .b { 
 
    background-color: green; 
 
}
<div class="a"> 
 
    <div class="b"></div> 
 
</div> 
 

 
<div class="b"></div>

+0

아니요, .a> .b를 선택하지 않습니다. 오른쪽에서 왼쪽으로 브라우저에서 CSS를 읽으 므로이 규칙은 클래스 B가있는 객체가 있고 클래스 바로 위의 객체가 클래스 인 경우 약 * : not (.a)> .b 으로 변환됩니다. 규칙이 적용되지 않습니다. * : not (.a) .b 클래스 b가있는 객체가 있고 클래스가 아닌 객체가 있으면 규칙이 적용됩니다. .b 위의 하나의 객체조차도 .a가 클래스 – Elentriel

+0

으로 없으면 질문은'.a .b'가 아닌 것을 요구합니다. '.b'가'.a' 내에서보다 깊게 중첩되는 경우 대답은'* : not (.a) .b'일까요? – Hans

+1

자손 결합자는'* : not (.a)'가 적어도 html 요소 (클래스 "a"를 제외하고)와 매치 될 것이기 때문에이 경우에는 작동하지 않을 것이므로'* : not (.a) .b '클래스 "b"를 가진 요소의 조상 인 클래스 "a"를 가진 요소가 있더라도 모든 요소를 ​​클래스 "b"와 일치시킵니다. '* : not (.a) .b'가 작동하려면 클래스 "b"를 가진 요소의 * 모든 * 조상은 클래스 "a"를 가져야합니다. – Alohci