태그 선택자: 특정 HTML 태그를 선택한다.
p {
color: blue;
}
위 예시는 모든 <p> 태그의 텍스트 색상을 파란색으로 설정한다.
클래스 선택자: 특정 클래스가 적용된 요소를 선택한다. 클래스 이름 앞에 점(.)을 사용한다.
.highlight {
background-color: yellow;
}
위 예시는 class="highlight"인 모든 요소에 노란색 배경을 적용한다.
ID 선택자: 특정 ID를 가진 요소를 선택합니다. ID 이름 앞에 샵(#)을 사용한다.
#header {
font-size: 24px;
}
위 예시는 id="header"인 요소의 글꼴 크기를 24px로 설정한다.
속성 선택자는 특정 속성을 가진 요소를 선택한다.
특정 속성을 가진 요소 선택
[type="text"] {
border: 1px solid black;
}
위 예시는 type 속성이 "text"인 모든 입력 요소에 검은색 테두리를 적용한다.
속성 값이 포함된 요소 선택
[title~="flower"] {
color: red;
}
위 예시는 title 속성 값에 "flower" 단어가 포함된 요소의 텍스트 색상을 빨간색으로 설정한다.
특정 상태의 요소를 선택합니다.
:hover: 마우스 커서를 요소 위에 올릴 때 선택한다.
a:hover {
color: green;
}
위 예시는 링크에 마우스를 올릴 때 텍스트 색상을 녹색으로 변경한다.
:focus: 요소가 포커스를 받을 때 선택한다.
input:focus {
border-color: blue;
}
위 예시는 입력 요소가 포커스를 받을 때 테두리 색상을 파란색으로 변경한다.
요소의 특정 부분을 스타일링한다.
::before: 요소의 내용 앞에 가상 요소를 생성한다.
p::before {
content: "Note: ";
font-weight: bold;
}
위 예시는 모든 <p> 태그 앞에 "Note: "를 추가하고 굵게 표시한다.
::after: 요소의 내용 뒤에 가상 요소를 생성한다.
p::after {
content: " End.";
}
위 예시는 모든 <p> 태그 뒤에 " End."를 추가한다.
여러 선택자를 결합하여 특정 조건을 만족하는 요소를 선택한다.
후손 선택자: 특정 요소의 모든 자손을 선택한다.
div p {
color: red;
}
위 예시는 모든 <div> 요소 내의 <p> 태그를 빨간색으로 설정한다.
자식 선택자: 특정 요소의 직계 자식을 선택한다.
ul > li {
list-style-type: none;
}
위 예시는 모든 <ul> 요소의 직계 자식인 <li> 요소의 기본 리스트 스타일을 제거한다.
형제 요소를 선택한다.
인접 형제 선택자: 특정 요소의 바로 다음 형제 요소를 선택한다.
h1 + p {
margin-top: 0;
}
위 예시는 <h1> 요소 바로 다음에 오는 <p> 요소의 상단 여백을 제거한다.
일반 형제 선택자: 특정 요소 뒤의 모든 형제 요소를 선택한다.
h1 ~ p {
color: blue;
}
위 예시는 <h1> 요소 뒤에 나오는 모든 <p> 요소의 텍스트 색상을 파란색으로 설정한다.
모든 요소를 선택한다.
* {
box-sizing: border-box;
}
위 예시는 모든 요소에 box-sizing: border-box; 스타일을 적용한다.
CSS는 기본적으로 부모 요소의 일부 스타일을 자식 요소에 상속합니다. 상속을 제어하는 방법은 다음과 같다.
inherit: 부모 요소의 스타일을 상속받는다.
p {
color: inherit;
}
initial: 요소의 기본값을 사용한다.
p {
color: initial;
}
unset: 상속 가능한 속성에는 inherit, 그렇지 않은 속성에는 initial을 적용한다.
p {
color: unset;
}
이러한 다양한 CSS 선택자를 사용하면 HTML 문서의 요소를 정교하게 선택하고 스타일을 적용할 수 있다.
type="password"인 입력 필드만 스타일링 할 때 속성 선택자를 쓰면 깔끔하게 해결할 수 있었다.!important를 쓰지 않고도 선택자의 우선순위를 잘 이해하면 문제를 더 깔끔하게 해결할 수 있었다. 상속 덕분에 공통 스타일을 한 번에 적용할 수 있어서 코드도 훨씬 깔끔해졌다.