BACKEND [Kamranahmedse Roadmap]/CSS

[CSS] nth-child와 nth-of-type

Alex Han 2025. 2. 1. 19:28
반응형

 


이전 글

CSS 선택자(Selector) 정리

CSS 선택자는 특정 HTML 요소를 선택하여 스타일을 적용할 수 있도록 도와준다.선택자는 단순한 태그 선택부터 복잡한 관계 설정까지 가능하며, 우선순위에 따라 스타일이 결정된다.  1. 기본 선

jyhan0625.tistory.com

 
 


0. 먼저 풀어보기

해당 CSS 코드의 적용 결과는?

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
  <style>
    #div-p > p:nth-child(2) {
      color:red;
    }
  </style>
</head>
<body>
  <div id="div-p">
    <h1>안녕하세요</h1>
    <p>1</p>
    <p>2</p>
    <p>3</p>
    <p>4</p>
  </div>

</body>
</html>

 
2가 빨강색으로 적용될까? 아니다, 1이 빨강색으로 적용되었다.
 
 
 


1. <p>1</p>에 적용된 이유

코드에서 #div-p > p:nth-child(2) 선택자가 원하는 <p>2</p>가 아니라 <p>1</p>에 적용된 이유는 :nth-child(n)이 요소의 유형과 관계없이 부모의 모든 자식 요소를 기준으로 순서를 세기 때문이다.
 

#div-p > p:nth-child(2) {
  color: red;
}

#div-p 내부의 직계 자식두 번째(2) 위치에 있는 요소. 단, 그 요소가 <p>여야 적용됨.
 

<div id="div-p">
  <h1>안녕하세요</h1>  <!-- 첫 번째 자식 (1) -->
  <p>1</p>             <!-- 두 번째 자식 (2) ✅ -->
  <p>2</p>             <!-- 세 번째 자식 (3) -->
  <p>3</p>             <!-- 네 번째 자식 (4) -->
  <p>4</p>             <!-- 다섯 번째 자식 (5) -->
</div>

#div-p의 모든 직계 자식을 순서대로 보면:
1️⃣ <h1>
2️⃣ <p>1</p> ✅ (nth-child(2) 조건 충족)
3️⃣ <p>2</p>
4️⃣ <p>3</p>
5️⃣ <p>4</p>
 
💡 즉, 두 번째(nth-child(2)) 요소는 <p>1</p>이므로, 해당 요소가 빨간색이 됨.
 
 
 


2. 그럼 <p> 태그만을 기준으로 두 번째 요소를 선택하려면?

p 태그만을 기준으로 두 번째 요소를 선택하려면 nth-of-type()을 사용하면 된다.
 
🔹 올바른 코드 (nth-of-type(2))

#div-p > p:nth-of-type(2) {
  color: red;
}

 
 nth-of-type(2)는 같은 부모를 가진 모든 <p> 태그 중에서 두 번째 요소를 선택한다.
 
 
 


3. 정리

선택자설명
nth-child(n)부모의 모든 자식 요소 중에서 n번째 요소 선택 (요소 유형 무관)
nth-of-type(n)같은 부모의 특정 태그(p 등) 중에서 n번째 요소 선택

 
결론: nth-child(2)가 아니라 nth-of-type(2)을 사용해야 <p>2</p>가 빨간색이 된다.

반응형