2012-06-03 2 views
6

의 모든 아이들과 함께 수업을 제외 할 어떻게스타일 정의

<div> 
<div class="abc"> 
    <div> 
    <!--some more divs inside--> 
    </div> 
</div> 
</div> 

같은 파일을 가지고 내가하고 싶은 첫 번째 DIV에 스타일을 적용하는 것입니다. div:not(.abc, .abc *), div:not(.abc):not(.abc *), div:not(.abc), div:not(.abc) *을 사용해 보았지만이 중 아무 것도 작동하지 않았습니다. 편집 할 파일이 많기 때문에 html을 편집하는 것이 어려울 것입니다. 또한 위에 표시된 코드는 다른 위치에 표시되므로 > 선택자를 사용하는 것이 해결책이 아닙니다 ... 누군가이 작업을 수행하는 방법을 알고 있습니까?

+1

당신은 이미 최상의 솔루션 인'>'(즉각적인 자식 조합자)을 배제했습니다. –

답변

6

요소 및/또는 자손을 제외시키기 위해 CSS에 :not() 선택자를 사용할 수 없습니다. 그 이유는 this answer (및 다른 링크는 다음과 같습니다.)에 설명되어 있습니다.

결합자를 사용할 수 없습니다. jQuery에서는 작동하지만 CSS는 작동하지 않습니다.

/* 
* Grab everything that is neither #foo itself nor within #foo. 
* Notice the descendant combinator (the space) between #foo and *. 
*/ 
:not(#foo, #foo *) 

이 중 하나는 특히 적절한 해결 방법이 없기 때문에 특히 고약합니다. 일부 느슨한 해결 방법 (12)이 있지만 대개 HTML 구조에 의존하므로 매우 유용합니다.

그리고 마크 업이 당신이 그것을 편집하거나 > 선택기를 사용할 수 없다는 것을 충분히 예측할 수 있기 때문에, 난 두려워에 클래스를 적용 할 수있는 방법을 찾기 위해 밖으로 하나보다 다른 방법을 많이가 아니라 당신의 상단 div을 사용하고 해당 클래스를 demonstrated by Fluidbyte으로 사용하거나 위와 같이 jQuery를 사용하십시오. 당신이 정말로 HTML을 접촉하지 않는 경우

0

:first-child을 부모 요소의 ID 또는 클래스와 함께 사용하십시오. CSS를 사용하여 요소를 잡을 수 없다면 자바 스크립트 또는 jQuery을 사용하는 것이 좋습니다.

+1

jQuery로 즉시 이동하는 것은 좋지 않습니다. CSS를 제대로 사용하면 질문의 내용을 알 수 있습니다. – Fluidbyte

1

일반적으로 클래스를 통해 필요한 것을 포함시킨 다음 하위 요소를 제외하는 것이 더 쉽습니다. 여기 피들을보십시오 : http://jsfiddle.net/cLtHg/

그것은 상속 문제를 처리하고 훨씬 더 많은 브라우저 간 친화적입니다.

0

:first-child 또는 :nth-child()을 사용해 보셨습니까?

+0

왜 작동합니까? – BoltClock

+0

첫 번째 div를 잡으려고하기 때문에 도움이 될 수 있지만 – maksbd19

0

, 더러운 접근하지만 다음 간단과 같이, 연속 된 div에서 그들을 처음 DIV에 스타일을 적용하고 제거하는 것입니다 :

div {margin-bottom: 20px; border: 1px solid #ccc;} 
div div {margin-bottom: 0; border: none;} 

주요 단점 여기에 자식 div의 일부 스타일이 의도하지 않게 제거 될 수 있습니다. 그들이 처음부터 어떻게 스타일링되었는지에 달렸습니다.

관련 문제