CSS 동작 원리, 우선순위와 상속
CSS는 하나의 요소에 여러 스타일이 동시에 적용될 수 있다.
이때 어떤 스타일이 최종적으로 적용될지를 결정하는 규칙이 종속(Cascade) 이다.
그리고 부모 요소의 스타일이 자식 요소에게 자동으로 전달되는 것을 상속(Inheritance) 이라고 한다.
CSS는 충돌이 발생할 때 아래 순서로 최종 스타일을 결정한다.
① !important 여부
② 출처 (인라인 > 내부/외부 > 브라우저 기본)
③ 명시도 (ID > 클래스 > 태그)
④ 작성 순서종속(Cascade)
CSS는 충돌이 발생할 때 아래 세 가지 기준을 순서대로 적용해 최종 스타일을 결정한다.
① 출처(Origin)
스타일이 어디서 왔는지에 따라 우선순위가 달라진다.
| 우선순위 | 출처 | 설명 |
|---|---|---|
| 1 (높음) | !important | 모든 규칙을 무시하고 강제 적용 |
| 2 | 인라인 스타일 | HTML 태그의 style="" 속성 |
| 3 | 내부 / 외부 스타일시트 | <style> 태그 또는 .css 파일 |
| 4 (낮음) | 브라우저 기본 스타일 | 브라우저가 기본으로 제공하는 스타일 |
② 명시도(Specificity)
출처가 같을 때는 선택자의 명시도(구체성) 가 높은 쪽이 이긴다.
명시도는 선택자의 종류에 따라 점수로 계산한다.
| 선택자 | 명시도 점수 |
|---|---|
| 인라인 스타일 | 1000 |
ID 선택자 #id | 100 |
클래스 .class, 속성 [attr], 가상 클래스 :hover | 10 |
태그 p, 가상 요소 ::before | 1 |
전체 선택자 * | 0 |
③ 작성 순서
출처와 명시도까지 동일하다면, 나중에 작성된 스타일이 적용된다.
p { color: red; }
p { color: blue; } /* 나중에 작성되었으므로 blue가 적용된다 */상속(Inheritance)
부모 요소에 적용된 일부 CSS 속성은 자식 요소에게 자동으로 전달된다.
/* body 에 font-family, color 적용하면 자식 요소에게 상속됨 */
body {
font-family: 'Pretendard', sans-serif;
color: #333;
}상속되는 속성 vs 상속되지 않는 속성
모든 속성이 상속되는 것은 아니다.
| 상속됨 | 상속되지 않음 |
|---|---|
color | margin, padding |
font-family, font-size, font-weight | border |
line-height | width, height |
text-align | background |
letter-spacing | display |
상속 제어
상속을 명시적으로 제어하고 싶을 때는 아래 키워드를 사용한다.
.child {
/* 부모의 값을 강제로 상속받는다 */
color: inherit;
/* 브라우저 기본값으로 되돌린다 */
color: initial;
/* 상속되는 속성이면 inherit, 아니면 initial로 동작한다 */
color: unset;
}마지막 수정