Cascading은 CSS에서 여러 스타일 규칙이 동일한 요소에 적용될 때 우선순위에 따라 스타일이 결정되는 방식을 의미함. CSS는 Cascading Style Sheets의 약자에서 알 수 있듯이, 스타일이 계단식으로 흘러 내려와 특정 규칙에 따라 적용됨. Cascading을 이해하면 CSS의 우선순위 규칙을 알고, 스타일이 예상대로 작동하도록 조정할 수 있음.
Cascading은 여러 스타일 규칙이 중첩될 때 적용 순서를 결정하는 역할을 함. CSS에서는 다음 세 가지 요소에 따라 스타일 우선순위를 결정함:
명시도(Specificity)
소스의 위치(Source Order)
중요도(Importance)
이 세 가지 규칙이 CSS의 스타일 결정 과정에 관여하며, Cascading을 통해 최종적으로 어떤 스타일이 적용될지 결정됨.
명시도는 선택자의 구체성에 따라 우선순위를 부여함. 더 구체적인 선택자일수록 우선순위가 높음. 명시도는 선택자의 유형에 따라 점수를 부여해 계산됨.
| 선택자 유형 | 설명 | 점수 |
|---|---|---|
| 인라인 스타일 | 요소에 직접 지정된 스타일 | 1000점 |
| ID 선택자 | # 기호로 정의된 ID 선택자 | 100점 |
| 클래스 선택자 | .class, 속성, 가상 클래스 선택자 | 10점 |
| 태그 선택자 | HTML 태그 이름 선택자 | 1점 |
| 전체 선택자 | * 전체 선택자 | 0점 |
예시)
/* CSS 코드 */
h1 { color: blue; } /* 1점 */
.title { color: green; } /* 10점 */
#header { color: red; } /* 100점 */
위 코드에서 h1의 색상은 명시도가 가장 높은 #header에 따라 red로 결정됨.
명시도가 동일한 경우, 소스 코드의 위치가 우선순위에 영향을 미침. 동일한 요소에 동일한 명시도의 스타일이 적용될 때, 나중에 선언된 스타일이 우선 적용됨.
/* CSS 코드 */
h1 { color: blue; }
h1 { color: green; }
위 코드에서 h1 요소의 색상은 나중에 선언된 green이 적용됨.
CSS에서는 !important 키워드를 사용해 특정 스타일을 강제로 우선순위로 적용할 수 있음. !important가 붙은 스타일은 명시도나 소스 위치와 상관없이 가장 높은 우선순위를 가지게 됨.
h1 { color: blue !important; }
h1 { color: green; }
위 코드에서 h1 요소의 색상은 !important가 적용된 blue가 적용됨. 그러나 !important는 무분별하게 사용하면 유지보수가 어려워질 수 있으므로, 꼭 필요한 경우에만 사용하는 것이 좋음.