우선순위

우선순위 규칙

  • 정의된 여러가지 스타일이 같은 요소에 적용 가능할 때 어떤 스타일을 선택할지는 우선순위 규칙에 따른다.
  1. 출처: important 키워드와 출처에 따른 순서
  2. 인라인: inline 스타일이 우선
  3. 레이어: 가장 나중의 레이어가 우선
  4. 구체도: 구체도가 큰 스타일이 우선
  5. 스코프: 가장 안쪽의 스코프가 우선
  6. 선언순서: 나중에 선언된 스타일이 우선

출처

  • 출처(origin)
    • 스타일을 지정한 주체
    • 3가지
      • 작성자(author): 웹페이지를 작성한 사람이 지정한 인라인 스타일이나 css 스타일시트의 값
      • 에이전트(user agent): 웹페이지를 보여주는 웹 브라우저 프로그램에 지정된 기본값
      • 사용자(user): 웹 브라우저를 이용하여 웹페이지를 보는 사람이 지정한 값
  • important 키워드
    • 스타일 값 뒤에 !important 키워드를 붙일 수 있음
    • 예시: color: red !important;
    • important 키워드가 있으면 우선순위가 바뀜
    • important 키워드가 없는 보통의 경우는 normal이라고 부름
  • 출처에 따른 순서
    1. Important user agent declarations
    2. Important user declarations
    3. Important author declarations
    4. Normal author declarations
    5. Normal user declarations
    6. 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)라고 한다.

상속

  • 해당 요소의 해당 스타일에 대해 어떤 정의도 없는 경우, 조상을 거슬러 올라가며 요소의 스타일 값을 가져온다.