CSS 고급 선택자에 대해 알아보자
2025. 1. 24. 13:00ㆍHTML_CSS
728x90
반응형
안녕하세요. 진득 코딩입니다.
간단한 웹 문서는 기본 선택자만으로도 스타일을 적용할 수 있습니다.
하지만 소스가 길어지면 스타일을 지정할 때 id와 class가 계속 늘어나므로 그 이름을 모두 기억하기는 쉽지 않습니다.
이번 시간에는 연결 선택자와 속성 선택자를 사용하여 소스의 위치나 속성값에 따라 특정 요소를 쉽게 선택하는 방법을 알아보도록 하겠습니다.
연결 선택자
- 연결 선택자는 둘 이상의 선택자를 연결해서 스타일이 적용될 요소가 어느 부분인지 지정합니다.
- 선택자를 둘 이상 조합하므로 '조합 선택자', '콤비네이션 선택자', 또는 '콤비네이션 셀렉터' 등으로도 부릅니다.
하위 선택자
- 하위 선택자(descendant selector)를 사용하면 부모 요소에 포함된 하위 요소를 모두 선택하며 자손 선택자라고도 합니다.
- 즉, 자식 요소뿐만 아니라 손자요소, 손자의 손자 요소 등 모든 하위 요소까지 적용됩니다.
- 하위 선택자는 상위 요소와 하위 요소를 공백으로 구분합니다.
상위요소 하위요소
- 예를 들어 section 요소 안에 포함된 p 요소를 모두 선택하려면 section과 p 사이에 공백 한 칸을 두고 나란히 써줍니다.
- 그리고 중괄호 안에 스타일 규칙을 써줍니다.
section p { ... }
자식 선택자
- 자식 선택자(child selector)는 자식 요소에만 스타일을 적용하는 선택자입니다.
- 두 요소 사이에 '>' 기호를 표시해 부모 요소와 자식 요소를 구분합니다.
부모요소 > 자식요소
- 하위 선택자에서는 자식 요소뿐만 아니라 자식의 자식, 즉 손자 요소까지 적용되지만, 자식 선택자에서는 바로 한 단계 아래의 요소, 즉 자식 요소에만 스타일이 적용됩니다.
웹 문서에서의 형제 관계
- 웹 문서에서 부모 요소가 같은 경우 형제 관계라고 표현합니다.
- 형제 관계인 요소에서 먼저 나오는 요소를 형요소, 나중에 나오는 요소를 동생 요소라고 합니다.
인접 형제 선택자
- 인접 형제 선택자(adjacent selector)는 형제 요소 중에서 첫 번째 동생 요소만 선택하는 것을 의미합니다.
- 인접 형제 선택자를 정의할 때는 요소1과 요소2 사이에 '+' 기호를 표시합니다.
- 요소1과 요소2는 같은 레벨이면서 요소1 이후 가장 먼저 오는 요소2를 선택합니다.
요소1 + 요소2
형제 선택자
- 형제 선택자(sibling selector)는 형제 요소의 스타일을 정의하는데 인접 형제 선택자와 달리 모든 형제 요소에 적용됩니다.
- 형제 선택자를 정의할 때는 첫 번째 요소와 두 번째 요소 사이에 '~' 기호를 표시합니다.
요소1 ~ 요소2
예시)
h1 ~ p { color: blue; }
속성 선택자
- 속성 선택자는 태그 안에서 사용하는 속성값에 따라 요소를 선택하는 역할을 합니다.
- 속성 값의 조건에 따라 특정 부분만 선택하기 쉬우므로 상황에 맞는 스타일을 지정하기도 쉽습니다.
[속성] 선택자
- [속성] 선택자를 이용하여 속성값에 따라 원하는 요소를 선택할 수 있습니다.
- 대괄호([ ]) 사이에 원하는 속성을 입력하면 됩니다.
- 예를 들어 a 요소 중에서 href 속성이 있는 요소를 선택하려면 아래 예시대로 작성합니다.
a[href] { ... }
[속성 = 속성값 ] 선택자
- [ 속성 = 속성값 ] 선택자는 주어진 속성과 속성값이 일치하는 요소를 찾아 스타일을 지정할 때 사용합니다.
- [ 속성 = 속성값 ] 선택자는 대괄호 ([ ]) 안에 속성과 속성값을 넣고 그 사이에 '=' 기호를 표시합니다.
- 예를 들어 a 요소 중에서 target 속성값이 '_blank'인 것만 선택하고 싶다면 다음과 같이 작성합니다.
a [target = _blank] { ... }
[속성 ~= 값] 선택자
- [속성 ~= 값] 선택자는 여러 속성값 중에서 해당 속성값이 포함된 요소를 선택합니다.
- [속성 ~= 값] 선택자는 속성이 하나면서 속성값이 여러 개일 때 특정 속성값을 찾는 데 편리합니다.
- 예를 들어 하나의 요소에 클래스 스타일을 여러 개 적용할 수 있는데, 그중에 button 스타일이 있는 요소를 찾으려면 다음과 같이 작성합니다.
[class ~= button] { ... }
- 여기서 주의할 점은 [ 속성 ~= 값 ] 선택자는 button 값과 정확하게 일치하는 요소를 선택한다는 점입니다.
- 만약 flat-button이나 buttons처럼 button 외에 다른 글자가 속성값에 포함되어 있으면 선택하지 않습니다.
[속성 ¦= 값] 선택자
- [속성 ¦= 값] 선택자는 특정 속성값이 포함된 속성에 스타일을 적용합니다.
- 이때 속성값은 한 단어로 일치해야 합니다.
- [속성 ~= 값]은 하이픈( - )으로 연결한 단어에 스타일을 적용하지 않는다는 점에서 [속성 ¦= 값] 선택자와 차이가 있습니다.
- 즉, [속성 ¦= 값] 선택자는 지정한 값과 정확하게 일치하거나 지정한 값을 포함해서 하이픈( - )으로 연결된 단어도 선택합니다.
- '¦' 기호는 'shift'와 '\'를 함께 누르면 쓸 수 있습니다.
[속성 ^= 값] 선택자
- [속성 ^= 값] 선택자를 사용하여 지정한 속성값으로 시작하는 요소를 찾을 수 있습니다.
- 예를 들어 title 속성값이 eng로 시작하는 a 요소를 찾는다면 다음과 같이 작성합니다.
a[ title ~= eng ] { ... }
[속성 $= 값] 선택자
- [속성 $= 값] 선택자는 지정한 속성값으로 끝나는 요소를 선택합니다.
- 예를 들어 링크한 파일 이름의 마지막 단어가 xls인 요소를 찾는다면 다음과 같이 작성합니다.
[href $= xls] { ... }
[속성 *= 값] 선택자
- [속성 *= 값] 선택자는 속성값이 어느 위치에 있든지 지정한 속성값이 포함되어 있다면 해당 요소를 선택합니다.
- 예를 들어 href 속성값 중에 'w3'가 포함된 요소를 선택한다면 다음과 같이 작성합니다.
[href *= w3] { ... }
속성 선택자 정리
지금까지 배운 속성 선택자를 표로 정리해 두도록 하겠습니다.
종류 | 선택 요소 | 예시 |
[속성] | 해당 속성이 있는 요소 | [required] |
[속성 = 값] | 지정한 속성값이 있는 요소 | [target = _blank] |
[속성 ~= 값] | 지정한 속성값이 포함된 요소 (단어별) | [class ~= button] |
[속성 |= 값] | 지정한 속성값이 포함된 요소 (하이픈 포함, 단어별) | [title ¦= us] |
[속성 ^= 값] | 지정한 속성값으로 시작하는 요소 | [title ^= eng] |
[속성 $= 값] | 지정한 속성값으로 끝나는 요소 | [href $= xls] |
[속성 *= 값] | 지정한 속성값의 일부가 일치하는 요소 | [href *= w3] |
가상 클래스와 가상 요소
- 메뉴의 몇 번째 항목을 지정하거나, 단락의 첫 번째 글자만 지정할 경우에 사용할 수 있습니다.
- 가상 클래스는 클래스 이름 앞에 콜론(:)을 1개만 붙여 표시합니다.
- 가상 요소는 콜론(:)을 2개 붙여 표시합니다.
가상 클래스
- 가상 클래스 선택자는 사용자 동작에 반응하는 클래스입니다.
- 예를 들어 사용자가 웹 요소를 클릭하거나 마우스 포인터를 올려놓는 등 특정 동작을 할 때 스타일이 바뀌도록 만들 수 있습니다.
- 자주 사용하는 가상 클래스 선택자는 다음과 같습니다.
- :link 가상 클래스 선택자
- 웹 문서의 링크 중에서 사용자가 아직 방문하지 않은 링크에 스타일을 적용합니다. - :visited 가상 클래스 선택자
- 웹 문서의 링크 중에서 한 번 이상 방문한 링크에 스타일을 적용합니다. - :hover 가상 클래스 선택자
- 웹 요소 위로 마우스 포인터를 올려놓을 때 스타일을 적용합니다. - :active 가상 클래스 선택자
- 웹 요소의 링크나 이미지 등을 활성화했을 때, 즉 클릭했을 때 스타일을 지정합니다. - :focus 가상 클래스 선택자
- 웹 요소에 초점이 맞춰졌을 때 스타일을 적용합니다.
- 예를 들어 텍스트 필드 안에 마우스 포인터를 올려놓거나, 웹 문서에서 tab을 눌러 입력 커서를 이동했을 때 스타일을 지정합니다.
- 여기서는 focus를 초점이라고 했지만, 주로 '포커스'라는 용어를 사용합니다.
- 지금까지 설명한 1 ~ 4의 가상 클래스 선택자는 메뉴 링크에서 자주 사용하는데, 이때 다음과 같은 순서로 정의해야 합니다.
1) : link 2) :visited 3) :hover 4) :active
- 이 순서가 바뀌면 스타일을 정의하더라도 제대로 적용되지 않습니다.
- LoVe HAte로 외우면 쉽게 외울 수 있습니다.
요소 상태에 따른 가상 클래스
웹 사이트나 애플리케이션 화면에서 요소의 상태에 따라 스타일을 적용할 수 있는데, 이때 가상 클래스 선택자를 사용합니다.
- :target 가상 클래스 선택자
- 문서에서 같은 사이트나 다른 사이트의 페이지로 이동할 때에는 링크를 이용하고, 같은 문서 안에서 다른 위치로 이동할 때에는 앵커(anchor)를 이용합니다.
- :target 선택자를 사용하면 앵커로 연결된 부분, 즉 앵커의 목적지가 되는 부분의 스타일을 쉽게 적용할 수 있습니다. - :enabled와 :disabled 가상 클래스 선택자
- :enabled 선택자를 사용하여 해당 요소가 사용할 수 있는 상태일 때 스타일을 지정할 수 있습니다.
- :disabled 선택자를 사용하여 사용할 수 없는 상태일 때 스타일을 지정할 수 있습니다. - :checked 가상 클래스 선택자
- 폼의 라디오 박스나 체크 박스에서 선택된 항목에는 'checked'라는 속성이 추가됩니다.
- :checked 선택자를 사용하면 checked 속성이 있는 요소의 스타일을 지정할 때 편리합니다. - :not 가상 클래스 선택자
- :not 선택자는 부정의 의미가 있습니다.
- not은 '괄호 안에 있는 요소를 제외한'이라는 의미입니다.
- 따라서 :not 가상 클래스 선택자를 사용하여 특정 요소를 제외하고 스타일을 적용할 수 있습니다.
구조 가상 클래스
- 구조 가상 클래스란 웹 문서의 구조를 기준으로 특정 위치에 있는 요소를 찾아 스타일을 적용할 때 사용하는 가상 클래스 선택자입니다.
특정 위치의 자식 요소 선택하기
- 웹 문서에서 특정 요소에 스타일을 적용하려면 보통 class나 id 선택자를 사용합니다.
- 하지만 요소가 여러 개 나열되어 있는 경우에는 class나 id를 사용하지 않고도 스타일을 지정할 요소가 몇 번째인지를 따져서 스타일을 적용할 수 있습니다.
- 다음 표에 구조 가상 클래스 선택자의 종류를 정리해 보았습니다.
종류 | 설명 |
:only-child | 부모 안에 자식 요소가 하나뿐일 때 자식 요소를 선택합니다. |
A:only-type-of | 부모 안에 A 요소가 하나뿐일 때 선택합니다. |
:first-child | 부모 안에 있는 모든 요소 중에서 첫 번째 자식 요소를 선택합니다. |
:last-child | 부모 안에 있는 모든 요소 중에서 마지막 자식 요소를 선택합니다. |
A:first-of-type | 부모 안에 있는 A 요소 중에서 첫 번째 요소를 선택합니다. |
A:last-of-type | 부모 안에 있는 A 요소 중에서 마지막 요소를 선택합니다. |
:nth-child(n) | 부모 안에 있는 모든 요소 중에서 n번째 자식 요소를 선택합니다. |
:nth-last-child(n) | 부모 안에 있는 모든 요소 중에서 끝에서 n번째 자식 요소를 선택합니다. |
A:nth-of-type(n) | 부모 안에 있는 A 요소 중에서 n번째 요소를 선택합니다. |
A:nth-last-of-type(n) | 부모 안에 있는 A 요소 중에서 끝에서 n번째 요소를 선택합니다. |
수식을 사용해 위치 지정하기
- 위치를 지정할 때 1, 3. 5번째처럼 위치가 계속 바뀐다면 반복된 규칙을 찾아내서 an+b처럼 수식을 사용할 수도 있습니다.
- 이때 n값은 0부터 시작합니다.
- 홀수 번째에 스타일을 줄 때는 :nth-child(odd), 짝수 번째에 스타일을 줄 때는 :nth-child(even)을 사용할 수 있습니다.
가상 요소
- 가상 요소는 문서 안의 특정 부분에 스타일을 지정하기 위해 가상으로 요소를 만들어 추가합니다.
- 가상 요소를 만들어 사용하는 이유는 특별히 화면에 보이는 부분을 꾸밀 때 불필요한 태그를 사용하지 않도록 하기 위함입니다.
- 가상 요소는 가상 클래스와 구별하도록 가상 요소 이름 앞에 콜론 2개(::)를 붙여서 표시합니다.
- 자주 사용하는 가상 요소를 살펴보도록 하겠습니다.
- ::first-line' 요소와 'first-letter' 요소
- ::first-line 요소와 ::first-letter 요소를 사용하면 지정한 요소의 첫 번째 줄이나 첫 번째 글자에 스타일을 적용할 수 있습니다.
- ::first-letter 요소는 해당 요소의 첫 번째 글자를 가리키는데, 첫 번째 글자는 반드시 첫 번째 줄에 있어야 합니다. - ::before 요소와 ::after 요소
- ::before 요소와 ::after 요소를 사용하면 지정한 요소의 내용 앞뒤에 스타일을 넣을 수 있습니다.
- 두 요소를 사용해 요소의 앞뒤에 텍스트나 이미지 등을 추가할 수 있습니다.
이번 시간에는 CSS 고급 선택자에 대해 알아보았습니다.
웹 문서가 복잡해질수록 class와 id를 모두 기억하거나 구분하기 어렵기 때문에 프로젝트 전에 알고 있으면 유용하게 사용할 수 있을 거라고 생각합니다.
모두 외우고 있다가 사용할 필요는 없고 한 번 읽어보고 이런 기능이 있구나 정도만 기억하고 있다가 필요할 때마다 검색해서 사용하시는 것을 추천합니다.
이번 포스팅은 여기까지입니다.
궁금하신 사항이나 문의하실 사항이 있다면 댓글을 남겨주시면 성심껏 답글 달아드리도록 하겠습니다.
끝까지 봐주셔서 감사합니다.😊
728x90
반응형
LIST
'HTML_CSS' 카테고리의 다른 글
반응형 웹과 미디어 쿼리를 이용해 사용자의 접속 환경에 맞춰보자 (2) | 2025.01.28 |
---|---|
CSS에서의 트랜지션과 애니매이션에 대해 알아보자 (0) | 2025.01.27 |
CSS 이미지와 그라데이션 효과로 배경을 꾸며보자 (0) | 2025.01.23 |
CSS 박스 모델을 이용해서 레이아웃을 구성해보자 (0) | 2025.01.22 |
HTML/CSS 그룹 프로젝트 3, 4일차 - 다른 페이지와 연결하기 (0) | 2025.01.21 |