문서 구조의 이해
선택자와 문서의 관계를 이해하려면 문서가 어떻게 구조화되어 있는지를 알아야 한다.
부모와 자식
부모 요소는 그 요소를 포함하는 가장 가까운 상위 요소로, 그 요소의 부모 요소는 단 하나뿐입니다.
자식 요소는 부모 요소와 반대라고 생각하면 되며 자식 요소는 여러 개일 수도 있습니다.
- <body>의 부모 요소: <html> ↔ <html>의 자식 요소: <body>
- <div>의 부모 요소: <body> ↔ <body>의 자식 요소: <div>, <p>
- <h1>의 부모 요소: <div> ↔ <div>의 자식 요소: <h1>
- <span>의 부모 요소: <h1> ↔ <h1>의 자식 요소: <span>
- <p>의 부모 요소: <body> ↔ <body>의 자식 요소: <div>, <p>
조상과 자손
조상과 자손의 관계는 부모와 자식의 관계와 비슷합니다.
정확히 얘기하면 부모와 자식의 관계를 포함한 확장된 관계라고 생각하면 됩니다.
조상 요소는 그 요소를 포함하는 모든 요소로, 부모 요소를 포함하여 여러 개일 수도 있습니다.
자손 요소는 그 반대로, 그 요소가 포함하고 있는 모든 요소가 자손 요소입니다.
- <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>
보통 문서의 요소들은 모두 이처럼 어느 요소의 자식(자손) 요소이자 부모(조상) 요소가 되는 경우가 많습니다.
형제
부모와 자식, 조상과 자손 말고도 형제 관계도 있습니다.
같은 부모를 가지고 있는 요소들은 서로 형제 관계에 있습니다.
위 코드에서는 <div>, <p>가 형제 요소입니다.
형제 관계 중에는 인접한 관계도 있습니다.
형제 관계에 있는 요소 중 바로 뒤에 이어 나오는 요소를 인접해 있다고 합니다.
여기서 <p>가 <div>에 인접한 형제 요소가 됩니다.
문서의 구조는 흔히 가계도나 조직도의 관계와 비슷하다고 생각하면 이해하기가 쉽습니다.
문서 구조 관련 선택자
문서 구조를 이용한 선택자는 3가지 있습니다.
자손 선택자와 자식 선택자 그리고 인접 선택자입니다.
문서 구조를 잘 이해하셨다면 쉽게 예측할 수 있습니다.
자손 선택자
div span { color: red; }
자손 선택자는 선택자 사이에 아무 기호없이 그냥 공백으로 구분을 합니다.
이 선택자는 <div>의 자손 요소인 <span>를 선택하는 선택자 입니다.
자식 선택자
div > h1 { color: red; }
자식 선택자는 선택자 사이에 닫는 꺽쇠 기호(>)를 넣습니다.
꺽쇠 기호와 선택자 기호 사이에는 공백은 있거나 없어도 상관이 없습니다.
이 선택자는 <div>의 자식 요소인 <h1>를 선택하는 선택자 입니다.
인접 형제 선택자
div + p { color: red; }
인접 형제 선택자는 선택자 사이에 + 기호를 넣습니다.
자식 선택자와 마찬가지로 공백은 있거나 없어도 상관이 없습니다.
인접 형제 선택자는 형제 관계이면서 바로 뒤에 인접해 있는 요소를 선택하는 선택자입니다.
/* body 요소의 자식인 div 요소의 자손인 table 요소 바로 뒤에 인접한 ul 요소 선택! */
body > div table + ul { ... }
위 코드처럼 문서 구조 관련 선택자는 더 복잡하게 사용할 수 있습니다.
유의할 점은 요소들이 많이 나열되어 있더라도 제일 우측에 있는 요소가 실제 선택되는 요소라는 것입니다.
'CSS' 카테고리의 다른 글
[CSS] 구체성 (0) | 2023.04.01 |
---|---|
[CSS] 가상선택자 (0) | 2023.04.01 |
[CSS] 선택자(selector)- 조합과 속성 선택자 (0) | 2023.03.27 |
[CSS] 선택자(selector)-class,id 선택자 (0) | 2023.03.27 |
[CSS] 선택자(selector)-요소 선택자 (0) | 2023.03.27 |