본문으로 건너뛰기
AZ Tools

CSS 명시도 계산기

CSS 셀렉터의 (ID, 클래스, 타입) 명시도 계산. 토큰별 가중치 표시 및 두 셀렉터 비교.

ID

1

클래스/속성/가상

2

타입/가상요소

3

명시도
(1, 2, 3)

토큰 분석

  • #navID+(1, 0, 0)
  • ul타입+(0, 0, 1)
  • li타입+(0, 0, 1)
  • .active클래스+(0, 1, 0)
  • a타입+(0, 0, 1)
  • :hover가상클래스+(0, 1, 0)

두 셀렉터 비교

두 번째 셀렉터 붙여넣어 캐스케이드에서 어느 쪽이 이기는지 확인.

셀렉터 A

(1, 2, 3)

← A 승

셀렉터 B

(0, 1, 3)

예시

인라인 스타일·!important·소스 순서 모두 셀렉터 명시도를 이김. 이 도구는 셀렉터 자체에서 (ID, 클래스, 타입) 튜플만 계산.

사용법

  1. CSS 셀렉터 입력 또는 붙여넣기 — 입력에 맞춰 분석 갱신.
  2. (ID, 클래스, 타입) 숫자 확인 — 튜플이 높은 쪽이 캐스케이드 승.
  3. 비교 박스에 두 번째 셀렉터 붙여넣어 어느 쪽이 이기는지 확인.

자세한 설명

펼치기

두 CSS 규칙이 같은 요소를 겨냥하면 캐스케이드는 명시도가 높은 쪽을 고릅니다. 명시도는 (ID, 클래스와 속성과 의사 클래스, 타입과 의사 요소)로 셉니다. 이 툴은 선택자를 파싱해 각 부분에 가중치를 매기고(#id는 +1·0·0, .class는 +0·1·0, div는 +0·0·1), :is(), :not(), :has() 같은 의사 클래스는 인자 중 가장 높은 것을 취하며 :where()는 언제나 0으로 처리합니다. 선택자 두 개를 넣으면 어느 쪽이 얼마 차이로 이기는지 보여 주므로, 규칙이 왜 안 먹는지 짐작하지 않아도 됩니다.

세 숫자는 더하는 것이 아니라 왼쪽부터 차례로 비교하는데, 대부분의 설명이 건너뛰는 부분이 이것입니다. ID 하나가 클래스 몇 개든 이기므로 #header는 클래스 이름 백 개를 단 선택자보다 위에 섭니다. 자리올림이 일어나지 않습니다. 명시도를 10진수처럼 생각하는 것은 누군가 클래스를 열한 개 쓸 때까지만 통합니다.

명시도는 첫 번째가 아니라 세 번째 판별 기준이기도 합니다. !important 선언은 선택자와 무관하게 평범한 선언을 이기고, 인라인 스타일은 일반 작성자 규칙 위에 있으며, 캐스케이드 레이어는 명시도를 비교하기도 전에 참조됩니다. 두 선언이 그 모두에서 같아지면 소스 순서상 마지막 것이 이깁니다. 점수가 높은데도 적용되지 않는 규칙은 대개 이 단계가 아니라 그 앞 단계에서 지고 있는 것입니다.

:where()는 바로 이 산수에서 빠지려고 존재합니다. 언제나 0을 기여하므로, 작성자가 클래스 하나로 덮어쓸 수 있어야 하는 라이브러리 기본값에 알맞은 도구입니다. 반면 :is()와 :not()은 인자 중 가장 명시적인 것의 값을 취하므로, :is(h1, #title)은 h1에 일치하는 경우에도 #title만큼 무겁습니다.

이 계산은 일치 결과가 아니라 선택자를 설명합니다. 두 선택자가 똑같은 점수를 받고도 서로 다른 요소를 겨냥할 수 있고, 지금 보고 있는 요소에 규칙이 애초에 일치하지 않는다면 종이 위의 높은 점수는 아무 의미가 없습니다.

자주 묻는 질문

왜 하나가 아닌 세 숫자?

명시도는 왼쪽부터 칼럼별로 비교: ID 하나가 어떤 수의 클래스도 이김; 클래스 하나가 어떤 수의 타입 셀렉터도 이김. (0,1,0) + (0,0,10) = 20처럼 더하는 직관은 CSSWG가 경고하는 전형적 오류.

:is()·:not()·:has() 카운트?

가장 가중치 높은 인수의 명시도 취함. :is(#a, .b) = 1·0·0, :not(.a, .b) = 0·1·0. :where()는 항상 0·0·0 — 명시도 0 오버라이드에 유용.

::before 같은 가상요소는?

가상요소(::before·::after·::first-line)는 타입 셀렉터로 카운트(0·0·1). 레거시 단일 콜론 형식(:before·:after)도 가상요소로 인식.

인라인 스타일 포함?

아니오 — 인라인 스타일은 별도 'a' 버킷(1·0·0·0)으로 이 도구는 모델링 안 함, 셀렉터에 인라인 못 씀. 인라인 오버라이드 필요시 !important 사용.

관련 도구