Study/css

[css 기초] 선택자 / 선택자 우선순위 / 우선순위 계산

검이 2024. 1. 3. 19:58

특정 요소를 선택하여 스타일을 적용할 수 있는 요소
HTML 페이지 안의 특정요소를 어떻게 렌더링 할 것인지 브라우저에게 알려주는 역할

 

css 선택자

css 선택자들 입니다. (빠진 요소들이 있을 수 있음!)

  예시
ID 선택자 #id { ... }
Class 선택자 .class { ... }
tag 선택자 div { ... }
속성 선택자 input[type=”text”] { ... }
전체 선택자 *
하위 선택자 div ul
자식 선택자 div > ul
인접 형제 선택자
(바로 뒤따르는 요소만)
div + ul
일반 형제 선택자
(뒤따르는 요소 전체)
div ~ ul
가상클래스 선택자
-동적선택자
::link ::visited ::active ::hover ::focus
가상클래스 선택자
-구조선택자 
:root :nth-child(n) :first-child :nth-of-type(n) 등

 

선택자 우선순위

css선택자 마다 명시도 (specificity)가 다르게 계산되어 최종 스타일을 결정하게 됩니다. 더 높은 명시도를 갖는 규칙이 있으면, 낮은 명시도를 갖는 규칙은 무시됩니다.

선택자 그룹을 우선순위에 따라 내림차순으로 정리하면 다음과 같습니다.

!important > 인라인 스타일 > 아이디 선택자 > 클래스/속성/가상선택자 > 태그선택자 > 전체선택자

 

우선순위 계산법

선택자 우선순위는 다음의 규칙에 따라 계산합니다.

  • ID 선택자의 개수를 세어서 개당 100으로 계산합니다. ( =a )
  • 클래스 선택자의 개수를 세어서 개당 10으로 계산합니다. ( =b )
  • 태그 선택자의 개수를 세어서 개당 1로 계산합니다. ( =c )
  • 공용 선택자는 모두 0으로 계산합니다. ( =d )
  • 가상 엘리먼트(before, after 등)는 무시합니다.
  • 전체 선택자(*), 결합 선택자(+, ~ 등)는 우선순위에 영향을 주지 않습니다.

a + b + c + d 의 값이 높은 순서대로 스타일을 적용하는 우선순위를 가지게 됩니다.
스타일 우선순위가 같거나, 계산 방법이 없는 경우 마지막에 지정된 스타일이 우선으로 적용됩니다.

// [계산 예시]
.list_item{color:#fff; background:#000; } // 10점
.list_wrap .list_item{color:#ff0; background:#000; } // 20점
#list_cont .list_item{color:#f0f; background:#000; } // 110점
#list_cont .list_item{color:#f00; background:#0ff !important; } // 110점 (!important 적용)
#list_cont .list_item{color:#00f; background:#000;} // 110점


// [최종 스타일]
.list_item {color:#00f; background:#0ff !important;} // (!important가 적용된 css 속성이 적용됨)

// (위 스타일이 없을 경우)
.list_item{color:#00f; background:#000; } // (110점 중에서 가장 밑에있는 css 속성이 적용됨)