not : 첫 번째 자식 선택기


811

나는이 div몇 가지 포함 태그 ul태그.

첫 번째 ul태그에 대해서만 CSS 속성을 설정할 수 있습니다 .

div ul:first-child {
    background-color: #900;
}

그러나 다음 ul은 첫 번째 태그를 제외하고 서로 다른 태그 에 대해 CSS 속성을 설정하려는 시도가 작동하지 않습니다.

div ul:not:first-child {
    background-color: #900;
}

div ul:not(:first-child) {
    background-color: #900;
}

div ul:first-child:after {
    background-color: #900;
}

"첫 번째 요소를 제외한 각 요소"를 CSS로 작성하는 방법

답변:


1414

게시 한 버전 중 하나는 실제로 모든 최신 브라우저에서 작동 합니다 ( CSS 선택기 레벨 3지원되는 경우 ).

div ul:not(:first-child) {
    background-color: #900;
}

레거시 브라우저를 지원해야하거나 :not선택기의 제한에 방해되는 경우 ( 단순한 선택기 를 인수 로만 허용 ) 다른 기술을 사용할 수 있습니다.

의도 한 것보다 범위가 큰 규칙을 정의한 다음 조건부로 "해지"하여 범위를 의도 한 범위로 제한합니다.

div ul {
    background-color: #900;  /* applies to every ul */
}

div ul:first-child {
    background-color: transparent; /* limits the scope of the previous rule */
}

범위를 제한 할 때 설정 중인 각 CSS 속성에 기본값을 사용하십시오 .


지원되지 않는 버전을 정확히 알고 있습니까?
Simon_Weaver

9
@Simon_Weaver : 실제로 IE <9 이외의 모든 것이 지원합니다. 이런 종류의 정보를 얻을 수있는 훌륭한 자료는 caniuse.com 입니다.
Jon

2
흠 .. 첫 번째 솔루션의 제한 사항을 살펴보십시오. caniuse.com/#feat=css-not-sel-list 두 번째 솔루션 이 더 합리적으로 들렸습니다. 감사!
iorrah

@iorrah caniuse 링크는 선택기 목록이며, 지원은 여전히 ​​매우 제한적입니다. OP가 선택기 목록을 사용하지 않습니다. 따라서 https://caniuse.com/#feat=css-sel3 이 IE8 시대 이후의 많은 지원으로 더 적합 하다고 생각 합니다.
secretwep

이것은 크롬에서 시작 부분에 div 요소가 없어도 작동합니다.
Achraf JEDAY

158

이 CSS2 솔루션 ( "어떤 ul다른 후 ul")도 작동하고, 더 많은 브라우저에서 지원됩니다.

div ul + ul {
  background-color: #900;
}

달리 :not:nth-sibling상기 인접 형제 선택기 IE7 +에 의해지지된다.

당신이 가지고있는 경우 자바 스크립트는 페이지가로드 한 후 이러한 속성을 변경, 당신은 몇 가지 알려진 버그 봐야한다 IE7IE8 이 구현. 이 링크를 참조하십시오 .

정적 웹 페이지의 경우 완벽하게 작동합니다.


4
@Leven : quirksmode 링크 는 IE7에서 작동해야하지만 정적으로 만 작동한다고 말합니다. JS가 다른 요소를 앞에 놓으면 올바르게 업데이트되지 않을 수 있습니다. 그게 당신이 본 문제입니까?
Alex Quinn

ul ul div ul(이러한 요소가 형제 인 경우) 와 같은 일련의 요소 에서 마지막 요소는 이전 요소가 없기 때문에 두 번째 ul 만 선택 ul됩니다
Brian H.

79

이후 :not에 의해 허용되지 IE6-8 , 나는 당신에게이 제안 :

div ul:nth-child(n+2) {
    background-color: #900;
}

따라서 첫 번째ul 요소를 제외한 상위 요소에서 모두를 선택합니다 .

더 많은 예제 는 Chris Coyer의 "유용한 : nth-child Recipes" 기사를 참조하십시오 .nth-child


실제로 2019 년에 실제로 누가 IE6-8을 사용합니까?
oldboy

14
대답은 2013 년의 것이라고 생각하십니까?
aasukisuki


14

not(:first-child)더 이상 작동하지 않는 것 같습니다. 최소한 최신 버전의 Chrome 및 Firefox에서는 가능합니다.

대신 이것을 시도하십시오 :

ul:not(:first-of-type) {}

6
둘 다 작동하지만 의미가 다릅니다. ul:not(:first-child)문자 그대로 " ul부모의 첫 번째 자식이 아닌 요소 "를 의미 하므로 ul다른 요소 ( p, 제목 등) 가 앞에 오는 경우 첫 번째 요소 와도 일치하지 않습니다 . 반대로, ul:not(:first-of-type)" 컨테이너 ul의 첫 번째 요소를 제외한 모든 요소 "를 의미 ul합니다. OP가 후자의 행동을 필요로했을 것입니다. 그러나 귀하의 설명은 다소 오도됩니다.
Ilya Streltsyn

9

당신은 어떤 선택기를 사용할 수 있습니다 not

p:not(:first-child){}
p:not(:first-of-type){}
p:not(:checked){}
p:not(:last-child){}
p:not(:last-of-type){}
p:not(:first-of-type){}
p:not(:nth-last-of-type(2)){}
p:not(nth-last-child(2)){}
p:not(:nth-child(2)){}

4

나는 위의 일부와 운이 없었습니다.

이것은 실제로 나를 위해 일한 유일한 사람이었습니다.

ul:not(:first-of-type) {}

이것은 페이지에 첫 번째 버튼이 왼쪽 여백 옵션의 영향을받지 않도록하려고 할 때 효과적이었습니다.

이것은 내가 처음 시도한 옵션이지만 작동하지 않았습니다.

ul:not(:first-child)


4

:not아래처럼 셀렉터를 사용할 수 있습니다 .:not()

any_CSS_selector:not(any_other_CSS_selector){
    /*YOUR STYLE*/
}

:not부모 선택기 없이도 사용할 수 있습니다 .

   :not(:nth-child(2)){
        /*YOUR STYLE*/
   }

더 많은 예

any_CSS_selector:not(:first-child){
    /*YOUR STYLE*/
}
any_CSS_selector:not(:first-of-type){
    /*YOUR STYLE*/
}
any_CSS_selector:not(:checked){
    /*YOUR STYLE*/
}
any_CSS_selector:not(:last-child){
    /*YOUR STYLE*/
}
any_CSS_selector:not(:last-of-type){
    /*YOUR STYLE*/
}
any_CSS_selector:not(:first-of-type){
    /*YOUR STYLE*/
}
any_CSS_selector:not(:nth-last-of-type(2)){
    /*YOUR STYLE*/
}
any_CSS_selector:not(:nth-last-child(2)){
    /*YOUR STYLE*/
}
any_CSS_selector:not(:nth-child(2)){
    /*YOUR STYLE*/
}

0

내가 사용한 것처럼 ul:not(:first-child)완벽한 솔루션입니다.

div ul:not(:first-child) {
    background-color: #900;
}

를 사용하여 ul:not(:first-child)내부 요소에 CSS를 적용 할 수 있기 때문에 이것이 왜 완벽한가? 마찬가지로 li, img, span, a태그 등

그러나 다른 솔루션을 사용할 때 :

div ul + ul {
  background-color: #900;
}

div li~li {
    color: red;
}

ul:not(:first-of-type) {}

div ul:nth-child(n+2) {
    background-color: #900;
}

이들은 ul 수준 CSS 만 제한합니다. CSS를 li`div ul + ul li '로 적용 할 수 없다고 가정하자 .

내부 레벨 요소의 경우 첫 번째 솔루션이 완벽하게 작동합니다.

div ul:not(:first-child) li{
        background-color: #900;
    }

등등 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.