마지막 자식을 제외한 요소의 모든 자식을 어떻게 선택할 수 있습니까?


371

CSS3 선택기를 사용하여 마지막 자식을 제외한 모든 항목을 어떻게 선택합니까?

예를 들어, 마지막 자식 만 얻으려면 div:nth-last-child(1)입니다.

답변:


689

당신이 사용할 수있는 부정 의사 클래스를:not() 에 대해 :last-child의사 클래스 . CSS Selectors Level 3을 도입했기 때문에 IE8 이하에서는 작동하지 않습니다.

:not(:last-child) { /* styles */ }

이것은 그대로 사용됩니까? 첫 콜론 앞에 아무것도 없습니까?
johny 왜

이것을 일반 기본 선택기에 추가 할 것입니다 ( divOP 예제에서)
Dallas

2
SASS를 사용 &:not(:last-child) { /* styles * }하는 경우 영향을 줄 요소 내부에서 사용할 수 있습니다 .
Martin James

100

간단하게:

모든 div에 스타일을 적용하고 : last-child를 사용하여 마지막 div를 다시 초기화 할 수 있습니다 .

예를 들어 CSS에서 :

.yourclass{
    border: 1px solid blue;
}
.yourclass:last-child{
    border: 0;
}

또는 SCSS에서 :

.yourclass{
    border: 1px solid rgba(255, 255, 255, 1);
    &:last-child{
        border: 0;
    }
}
  • 읽기 / 기억하기 쉬운
  • 빠른 실행
  • 브라우저 호환 (IES +는 여전히 CSS3이므로)

6
적어도 나에게 이것은 나쁜 코드 냄새가납니다. 의도하지 않은 요소에 CSS 규칙을 의도적으로 적용 한 다음 다른 레이어를 케이크하여 실행 취소하려고합니다. 나에게 그것은 나쁜 코드 냄새입니다. CSS 코딩의 종류가 CSS를 유지하기가 더 어려워지고 어려울 수 있다고 생각합니다. 즉, 스파게티 코드 CSS를 작성하고 있습니다.
Alexander Bird

1
이것은 또한 작동 할 수 있지만 문제는 (테두리, 색상, 글꼴 크기 등) 많은 CSS 스타일이있을 때 CSS 스타일을 다시 : last-child로 초기화해야합니다. 따라서 적절한 솔루션은 : not (: last-child)를 사용하는 것입니다
davecar21

33

Nick Craver의 솔루션은 작동하지만 다음을 사용할 수도 있습니다.

:nth-last-child(n+2) { /* Your code here */ }

CSS Tricks의 Chris Coyier는이를 위해 멋진 n 번째 테스터 를 만들었습니다 .


Mozilla는 다음과 같이 잘 정의되어 있습니다 . : nth-last-child
Clint Pachl

1
어떤 사람들은 :not의사가 매우 비싸다고 말합니다 . 따라서 가능하면 피하는 것이 좋습니다.
신경 전달 물질

22

IE9가 오면 더 쉬워 질 것입니다. 그러나 많은 시간을 들여 문제를 첫 번째 자식으로 전환하고 요소의 반대쪽 (IE7 +)을 스타일 지정할 수 있습니다.


10

selectivizr 과 함께 nick craver 솔루션을 사용하면 크로스 브라우저 솔루션 (IE6 +)이 가능합니다



1

Nick Craver의 솔루션은 필요한 것을 제공했지만 CSS-in-JS를 사용하는 사람들을 위해 명시 적으로 만들었습니다.

const styles = {
  yourClass: {
    /* Styles for all elements with this class */
    '&:not(:last-child)': {
      /* Styles for all EXCEPT the last element with this class */
    },
  },
};

1
.nav-menu li:not(:last-child){
    // write some style here
}

이 코드는 모든 스타일을 적용해야합니다

  • 마지막 아이를 제외하고

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