CSS 선택자 정리
CSS의 선택자는 MDN Web Docs의 CSS selectors와 W3Schools의 CSS Selectors, CSS Selector Reference에 자세히 정리되어 있다.
기본 선택자
- 전체 선택자(Universal Selector): 모든 태그 선택
- 태그 선택자(Type Selector): 태그 이름으로 선택
- 클래스 선택자(Class Selector): HTML 태그의 class 속성의 값으로 선택
<li class="orange">오렌지</li>
- 아이디 선택자(ID Selector): HTML 태그의 ID 값으로 선택
복합 선택자
- 일치 선택자(Basic Combinator): 두 가지 조건을 동시에 만족하는 태그 선택
<span class="orange">오렌지</span>
span.orange {
color: red;
}
- 자식 선택자(Child Combinator): 특정 태그의 자식 태그 선택
<ul>
<li class="orange">오렌지</li>
</ul>
ul>.orange {
color: red;
}
- 후손(하위) 선택자(Descendant Combinator): 특정 태그의 후손(하위) 태그를 선택
<div>
<ul>
<li class="orange">오렌지</li>
</ul>
</div>
div .orange {
color: red;
}
- 인접 형제 선택자(Adjacent Sibling Combinator): 특정 태그의 다음 형제 태그 하나 선택
<ul>
<li class="orange">오렌지</li>
<li>망고<li> <-- 선택 -->
</ul>
.orange + li {
color: red;
}
- 일반 형제 선택자(General Sibling Combinator): 특정 태그의 다음 형제 태그 모두 선택
<ul>
<li>딸기</li>
<li class="orange">오렌지</li>
<li>망고</li> <-- 선택 -->
<li>사과</li> <-- 선택 -->
</ul>
.orange ~ li {
color: red;
}
가상 클래스 선택자
특정 상황에서만 작동하는 클래스를 가상 클래스(pseudo-classes)라 함
- 특정 태그들에서만 사용 가능한 가상 클래스 선택자
input:focus {
background-color: orange;
}
- first-child: 지정 된 선택자가 형제 태그 중 첫 번째이면 선택
<div class="fruits">
<span>딸기</span> <-- 선택 -->
<span>오렌지</span>
</div>
.fruits span:first-child {
color: red;
}
- last-child: 지정 된 선택자가 형제 태그 중 마지막이면 선택
<div class="fruits">
<span>딸기</span>
<div>오렌지</div> <-- 미선택 -->
<h3>사과</h3>
</div>
.fruits div:last-child {
color: red;
}
- nth-child: 지정 된 선택자가 형제 태그 중 n 번째이면 선택
<div class="fruits">
<span>딸기</span>
<div>오렌지</div> <-- 선택 -->
<h3>사과</h3>
</div>
.fruits *:nth-child(2) {
color: red;
}
.fruits *:nth-child(2n) { /* 짝수번째 선택 */
color: red;
}
가상 태그 선택자
선택자에 키워드로 추가되어 선택된 태그의 특정 요소에만 스타일을 적용하는 것을 가상 태그(pseudo-elements)라 함
before
/after
: 지정 된 선택자 내부의 앞/뒤에 가상의 태그를 만들어 내용(content) 삽입하는 가상 태그로, 인라인 태그로 생성됨
<div class="box">
content
</div>
.box::before {
content: "앞";
}
.box::after {
content: "뒤";
}
속성 선택자
특정 속성을 포함한 태그를 선택함
<input type="text" value="qwer" disabled>
[disabled] {
color: red;
}
[type="text"] {
color: red;
}