우선순위
우선순위 규칙
- 정의된 여러가지 스타일이 같은 요소에 적용 가능할 때 어떤 스타일을 선택할지는 우선순위 규칙에 따른다.
- 출처: important 키워드와 출처에 따른 순서
- 인라인: inline 스타일이 우선
- 레이어: 가장 나중의 레이어가 우선
- 구체도: 구체도가 큰 스타일이 우선
- 스코프: 가장 안쪽의 스코프가 우선
- 선언순서: 나중에 선언된 스타일이 우선
출처
- 출처(origin)
- 스타일을 지정한 주체
- 3가지
- 작성자(author): 웹페이지를 작성한 사람이 지정한 인라인 스타일이나 css 스타일시트의 값
- 에이전트(user agent): 웹페이지를 보여주는 웹 브라우저 프로그램에 지정된 기본값
- 사용자(user): 웹 브라우저를 이용하여 웹페이지를 보는 사람이 지정한 값
important키워드- 스타일 값 뒤에
!important키워드를 붙일 수 있음 - 예시:
color: red !important; important키워드가 있으면 우선순위가 바뀜important키워드가 없는 보통의 경우는 normal이라고 부름
- 스타일 값 뒤에
- 출처에 따른 순서
- Important user agent declarations
- Important user declarations
- Important author declarations
- Normal author declarations
- Normal user declarations
- Normal user agent declarations
- 설명
- import는 non-important보다 무조건 앞
- normal 값의 경우 작성자 > 사용자 > 에이전트 순서
- 보통의 경우에는 웹페이지를 만든 작성자가 지정한 값을 가장 우선으로 하고 해당 값이 없는 경우 사용자, 에이전트의 순서로 값을 찾아서 사용
- important 값의 경우 에이전트 > 사용자 > 작성자 순서
- important 값의 경우에는 보안문제 등을 고려하여 에이전트가 가진 값을 가장 우선적으로 사용
인라인 스타일
태그 내부의
style속성의 문자열 값으로 스타일을 지정한 경우예시
<a href="/specials" style="background-color: orange;">Specials</a>
레이어
@layer키워드를 사용하여 스타일 그룹을 만들고 그룹간의 우선 순위를 정할 수 있음나중에 선언한 레이어가 우선순위가 높음
예시: 다음의 경우 나중에 선언한 l2 레이어의 우선순위가 높음
@layer l1 { h1 { color: white; } } @layer l2 { h1 { color: black; } }
구체도
- 구체도(specificity)
- 얼마다 구체적(specific)으로 요소를 지정했는가를 정량적으로 나타내는 값
- 지정된 id, class, tag의 개수를 나타내는 숫자 쌍으로 표시
- 예시: (1,2,2)는 하나의 아이디, 두 개의 클래스, 2개의 태그로 지정된 요소
- 구체도 값이 클수록 우선도가 높다
- 구체도 값은 올림픽 메달처럼 앞쪽의 숫자가 중요
- (1,0,0) > (0,2,0) > (0,0,10)
| 예시 | id | class | tag | 표기 |
|---|---|---|---|---|
| html body header h1 | 0 | 0 | 4 | 0,0,4 |
| body header.page-header h1 | 0 | 1 | 3 | 0,1,3 |
| .page-header .title | 0 | 2 | 0 | 0,2,0 |
| #page-title | 1 | 0 | 0 | 1,0,0 |
선언 순서
- 다른 모든 우선순위가 같으면 최종적으로 코드에 나타난 선언의 순서를 따른다.
- 나중에 선언된 스타일이 더 우선순위가 높다.
캐스케이드 값
- 우선순위 규칙에 의해 결정된 값을 캐스케이드 값(cascaded value)라고 한다.
상속
- 해당 요소의 해당 스타일에 대해 어떤 정의도 없는 경우, 조상을 거슬러 올라가며 요소의 스타일 값을 가져온다.