CSS의 기본적인 룰
서론
본격적으로 CSS
를 다루기에 앞서서 CSS
의 기본적인 룰에 대해서 알아보자.
CSS
의 기초가 되는 원리이며, 이후 다룰 모든 내용의 근간이 되는 요소이다.
CSS란?
먼저, CSS
라는 말의 의미를 되돌아보자.
CSS
는 Cascading Style Sheet
의 약자로, 한국어로 번역하면, "계단식 스타일 시트" 또는 "종속형 스타일 시트"이라고 한다.
참고로, 나는 위의 번역들 보다 좀 더 직관적인 "폭포처럼 흐르는 스타일 시트"라는 표현을 좀 더 좋아한다.
단어를 하나씩 뜯어서 살펴보자.
단어 | 의미 |
---|---|
Cascading | "계단식의", "폭포처럼 흐르는", "계층적인" |
Style | "스타일", "디자인" |
Sheet | "시트", "문서" |
이와 같은 의미로 인해, 나는 그냥 "폭포처럼 흐르는 스타일 시트"라고 번역하고 있다.
폭포처럼 흐른다는 의미

Cascading
이라는 말이 붙은 이유는 CSS
의 스타일이 상속되는 특성 때문이다.
부모 요소로부터 자식 요소로.. 그 손자에 손자까지.. Tree
계층 구조를 따라 쭉 흐르는 것처럼 보이기 때문에 이런 이름이 붙게 되었다.
CSS 스타일 적용 원리(Cascading)
CSS 스타일의 적용 원리(Cascading)
Cascading
에 대한 흐름 파악에서 주의할 점이 있다.
이 흐름은 어디까지나 우선순위를 따른 다는 것이다.
일반적으로, CSS는 다음 3가지 원칙을 따라 스타일을 결정한다.
- 우선순위(Specificity)
- 소스 코드 순서(Order of Appearance)
- 스타일 적용 방식(Origin of Style)
1. 우선순위(Specificity)
일반적으로 👉 id > class > 태그 순으로 우선순위가 결정된다.
- css
- html
- 결과
p {
color: blue; /* (1) 기본 스타일 */
}
.text {
color: green; /* (2) 클래스 선택자 */
}
#main {
color: red; /* (3) ID 선택자 */
}
<p id="main" class="text">이 문장은 어떤 색일까요?</p>
color: red;
가 적용된다.
이유는 ID가 가장 큰 우선순위를 갖기 때문이다.
2. 소스 코드 순서(Order of Appearance)
CSS는 코드가 나중에 나오는 것이 더 우선순위가 높다.
- css
- 결과
p {
color: blue;
}
p {
color: red;
}
color: red;
가 적용된다.
이유는 나중에 나온 코드가 더 우선순위가 높기 때문이다.
3. 스타일 적용 방식(Origin of Style)
CSS
는 적용된 위치에 따라 우선순위가 다르게 적용된다.
스타일 적용 방식 | 우선순위 |
---|---|
브라우저 기본 스타일 | 가장 낮음 |
외부 스타일시트(External CSS) | 낮음 |
내부 스타일(Internal CSS) | 중간 |
인라인 스타일(Inline CSS) | 높음 |
!important | 최우선 |
p {
color: blue !important; /* (1) 최우선 */
}
p {
color: green; /* (2) 무시됨 */
}
CSS 우선순위 계산법
CSS의 우선순위를 계산하는 방법이 존재한다.
각 선택자가 가진 "가중치"를 숫자로 환산해 비교하는 방식이다.
보통 아래와 같이 네 단계(또는 세 범주)로 나누어서 계산한다.
우선 순위 | 선택자 종류 | 예시 | 가중치 |
---|---|---|---|
A | 인라인 스타일(Inline Styles) | 1000 | |
B | ID 선택자 | #test, #container | 100 |
C | 클래스, 속성 선택자, 가상 클래스(Pseudo-class) | .active, [type="text"], :hover | 10 |
D | 태그(요소) 선택자와 가상 요소(Pseudo-element) | div, p, ::before | 1 |
보통 우선순위에 따라 존재하면 해당 자리수에 1을 넣고, 없으면 0을 대입한다.
그리고, 각 자리수를 모두 더해서 우선순위를 계산한다.
예시
선택자 | 우선순위 |
---|---|
#header .box p | 101 |
.box | 10 |
#header | 100 |
#header .box | 110 |
#header .box p | 111 |