Programming

[CSS] n번째 요소 스타일 지정하기

w00se 2022. 2. 18. 01:37

CSS로 스타일을 지정하는 작업을 하다 보면 간혹 형제 요소들 중 하나의 요소에만 다른 스타일을 적용할 필요가 생깁니다.

이런 경우 CSS에서 :nth-child, :first-child, :last-child, :not 등의 의사 클래스를 활용하면 간단하게 형제 요소들 중 특정 요소들을 지정해서 스타일을 적용할 수 있습니다.

 

오늘 연습할 HTML 문서의 구조와 기본 스타일은 아래와 같습니다.

 

HTML

<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="UTF-8" />
    <title>CSS n번째 요소 선택하기 연습</title>
    <link rel="styleSheet" href="./style.css" />
  </head>
  <body>
    <div id="arrow-container">
      <div class="arrow">
        ⬇️
      </div>
      <div class="arrow">
        ⬇️
      </div>
      <div class="arrow">
        ⬇️
      </div>
      <div class="arrow">
        ⬇️
      </div>
      <div class="arrow">
        ⬇️
      </div>
      <div class="arrow">
        ⬇️
      </div>
      <div class="arrow">
        ⬇️
      </div>
    </div>
  </body>
</html>

 

CSS(기본 스타일)

#arrow-container {
  display: flex;
  flex-direction: row;
  margin: 50px 0;
}

.arrow {
  font-size: 32px;
  margin-left: 10px;
}

예시 사진은 아래와 같습니다.

 

 

예시 사진

:nth-child

사용 방식

선택자:nth-child(인덱스 or 패턴 or 키워드)

 

특징

  • 인덱스, 패턴, 또는 키워드에 맞는 요소를 지정할 때 사용합니다.
  • 인덱스는 1번부터 시작합니다. 즉, 인덱스 1은 첫 번째 요소를 의미합니다.
  • 패턴에는 함수 식을 사용할 수 있습니다. 구조는 An+B 형식을 따릅니다.
    • A: 정수 인덱스 증감량
    • B: 정수 오프셋
    • n: 0 이상의 모든 양의 정수
  • 키워드에는 odd와 even이 속합니다.
    • odd: 홀수번째 요소를 의미합니다.
    • even: 짝수번째 요소를 의미합니다.

 

인덱스를 사용한 경우

/* 첫 번째 요소에 스타일 지정 */
.arrow:nth-child(1) { 
  color: tomato;
}

/* 네 번째 요소에 스타일 지정 */
.arrow:nth-child(4) {
  color: tomato;
}

/* 여섯 번째 요소에 스타일 지정 */
.arrow:nth-child(6) {
  color: tomato;
}

기본 스타일 코드에 위의 코드를 추가시키면 화면은 아래처럼 변합니다.

인덱스를 활용한 예시

 

패턴을 사용한 경우

/* 패턴이 3n+1이므로, 1, 4, 7, 10... 순으로 스타일이 지정 */
.arrow:nth-child(3n+1) {
  color: tomato;
}

 

 

기본 스타일 코드에 위의 코드를 추가시키면 화면은 아래처럼 변합니다.

 

패턴을 활용한 예시

더 다양한 예시는 여기서 확인할 수 있습니다.

 

키워드를 사용한 경우

/* 홀수 번째 요소에 스타일 지정 */
.arrow:nth-child(odd) {
  color: tomato;
}

 

기본 스타일 코드에 위의 코드를 추가시키면 화면은 아래처럼 변합니다.

 

키워드를 활용한 예시

:first-child와 :last-child

사용 방식

선택자:first-child

선택자:last-child

 

특징

  • :first-child는 형제 요소들 중 첫 번째 요소를 지정할 때 사용된다.
  • :last-child는 형제 요소들 중 마지막 요소를 지정할 때 사용된다.
  • 첫 번째 요소(또는 마지막 요소)에만 특정 스타일(ex. margin)을 지정할 때 활용할 수 있다.

 

:first-child

/* 첫 번째 요소에 스타일 지정 */
.arrow:first-child {
  color: tomato;
}

 

기본 스타일 코드에 위의 코드를 추가시키면 화면은 아래처럼 변합니다.

 

first-child를 활용한 예시

 

:last-child

/* 마지막 요소에 스타일 지정 */
.arrow:last-child {
  color: tomato;
}

 

기본 스타일 코드에 위의 코드를 추가시키면 화면은 아래처럼 변합니다.

 

last-child를 활용한 예시

 

:not

사용 방식

선택자1:not(선택자2)

 

특징

  • 선택자1 중 선택자2에 속하지 않는 요소를 지정할 때 사용된다.
  • :first-child(또는 :last-child)와 같이 활용하면 첫 번째(또는 마지막 번째)를 제외한 요소들을 지정할 때 활용할 수 있다.
/* 첫 번째 요소를 제외한 모든 요소에 스타일 지정 */
.arrow:not(:first-child) {
  color: tomato;
}

 

기본 스타일 코드에 위의 코드를 추가시키면 화면은 아래처럼 변합니다.

not을 활용한 예시

 

----

<추가적으로 공부할 내용>

nth-of-type(n)

 


참고 자료

MDN Web Docs - :nth-child

MDN Web Docs - :first-child

MDN Web Docs - :last-child

MDN Web Docs - :not

 

읽어 주셔서 감사합니다 :)

잘못된 부분이 있다면 댓글로 편히 알려주세요!