MarkUp/CSS

[CSS] 문서구조관련 선택자 이해하기(자손, 자식 등)

hhnn 2021. 1. 8. 11:44

##문서 구조의 이해

<html>
<body>
    <div>
        <h1><span>HTML</span>: Hyper Text Markup Language</h1>
    </div>
    <p>HTML과 CSS와 JAVASCRIPT를 이용해서 멋진 웹 사이트를 제작할 수 있습니다.</p>
</body>
</html>

 

#1. 부모와 자식

 

부모 요소는 그 요소를 포함하는 가장 가까운 상위 요소로, 그 요소의 부모 요소는 단 하나뿐입니다.

자식 요소는 부모 요소와 반대라고 생각하면 되며 자식 요소는 여러 개일 수도 있습니다.

  • <body>의 부모 요소: <html> ↔ <html>의 자식 요소: <body>
  • <div>의 부모 요소: <body> ↔ <body>의 자식 요소: <div>, <p>
  • <h1>의 부모 요소: <div> ↔ <div>의 자식 요소: <h1>
  • <span>의 부모 요소: <h1> ↔ <h1>의 자식 요소: <span> 
  • <p>의 부모 요소: <body> ↔ <body>의 자식 요소: <div>, <p>

 

#2. 조상과 자손

 

조상과 자손의 관계는 부모와 자식의 관계와 비슷합니다.

정확히 얘기하면 부모와 자식의 관계를 포함한 확장된 관계라고 생각하면 됩니다.

조상 요소는 그 요소를 포함하는 모든 요소로, 부모 요소를 포함하여 여러 개일 수도 있습니다.

자손 요소는 그 반대로, 그 요소가 포함하고 있는 모든 요소가 자손 요소입니다.

  • <body>의 조상 요소: <html> ↔ <html>의 자손 요소: <body>, <div>, <h1>, <span>, <p>
  • <div>의 조상 요소: <html>, <body> ↔ <body>의 자손 요소: <div>, <h1>, <span>, <p>
  • <h1>의 조상 요소: <html>, <body>, <div> ↔ <div>의 자손 요소: <h1>, <span>
  • <span>의 조상 요소: <html>, <body>, <div>, <h1> ↔ <h1>의 자손 요소: <span>
  • <p>의 조상 요소: <html>, <body> ↔ <body>의 자손 요소: <div>, <h1>, <span>, <p>

 

보통 문서의 요소들은 모두 이처럼 어느 요소의 자식(자손) 요소이자 부모(조상) 요소가 되는 경우가 많습니다.

 

#3. 형제

 

같은 부모를 가지는 요소들은 서로 형제 관계에 있다.

위 코드에서 <div>,<p>가 형제요소

형제관계중에 인접한 관계도 있음

형제 관계에 있는 요소 중 바로 뒤에 이어 나오는 요소를 인접해있다고 함

 

 

##문서 구조 관련 선택자

 

 

1. 자손선택자

선택자와 선택자 사이에 공백으로 구분함

div span { color: red; }

div의 자손 요소인 span에 red적용됨

 

2. 자식선택자

꺾쇠 기호를 넣어주면 됨(공백 있어도 되고 없어도 됨)

div > h1 { color: red; }

div요소의 h1에 해당하는 부분만 red로 적용됨

 

 

3. 인접형제 선택자

선택자 사이에 + 기호 삽입(공백 있어도 되고 없어도 됨)

div + p { color: red; }

+ 뒤의 선택자를 선택한다. 

 

4. 일반형제 선택자

선택자 사이에 ~ 기호 삽입

div ~ span { color: red; }

부모 요소가 동일하고, 뒤쪽 선택자 요소가 뒤에 위치할 때 선택한다. 두 요소가 HTML상 붙어있지 않아도 뒤에 나오는 span을 모두 적용하게 된다.

 

 

5. 일반구조 선택자

구분 설명
:first-child 형제 관계 중에 첫번째 위치하는 태그 선택 (html 태그 구조 상 맨 첫번째일 경우 가능)
:last-child 형제 관계 중에 마지막 위치하는 태그 선택
:nth-child 형제 관계 중에 수열번째 태그 선택 (짝수: even, 홀수: odd)
:nth-child(even)  /  :nth-child(odd)
:nth-last-child 형제 관계 중에 마지막 수열번째 태그 선택

🐱‍👤nth-child 표기법

짝수 표기법 :nth-child(2n)

홀수 표기법 :nth-child(2n+1)

괄호 안에 몇번째 인지만 지정해서 사용할 수도 있다.

 

n 에는 0부터 넣어서 계산한다. 

 

🐱‍👤:nth-child 사용시 주의사항

동위관계에 있는 태그 중 다른 태그가 있다면 적용되지 않는다.

ul>li 처럼 동일한 태그로 있어야 적용이 된다.

<div class="boxList">
  <p>첫번째</p>
  <h1>두번째</h1>
  <h3>세번째</h3>
</div>
.boxList:nth-child(2) {color: red;}

전혀 적용되지 않는 모습

이럴때 사용하는 것이 형태구조 선택자이다.

 

6. 형태구조 선택자

선택자가 목록에 섞여있으면 그 목록 중 처음과 끝을 찾을 수 있다.
목록의 첫번째에 있지 않아도 된다.
구분 설명
:first-of-type 자손 중에 첫번째로 나오는 특정태그
:last-of-type 자손 중에 마지막에 나오는 특정태그
<div class="boxList">
  <p>첫번째</p>
  <h1>두번째</h1>
  <h3>세번째</h3>
  <h1>네번째</h1>
</div>
.boxList h1:first-of-type {color: red;}

각자 태그의 성격이 다르지만 h1의 첫번째를 선택할 수 있다.

 


참고자료

https://dolly77.tistory.com/33

반응형
SMALL