Web/CSS

Specificity (명시도)

영끼끼 2025. 2. 25. 15:32

Specificity (명시도)

CSS에서 특정 요소에 적용할 스타일을 결정하는 중요한 개념 중 하나가 Specificity (명시도)입니다. 동일한 요소를 가리키는 여러 개의 CSS 규칙이 존재할 경우, 어떤 스타일이 적용될지를 결정하는 우선순위를 계산하여 적용됩니다.


📌 Cascading (위에서 아래로 흐름)

CSS는 "Cascading"이라는 개념을 따르며, 이는 스타일이 위에서 아래로 흐르는 방식으로 적용된다는 의미입니다. 동일한 요소를 대상으로 여러 개의 스타일 규칙이 존재하면, 가장 마지막에 선언된 스타일이 우선 적용됩니다.

✅ 하지만 단순한 선언 순서만으로 스타일 적용을 판단할 수 없습니다. **선택자들의 명시도(Specificity)**에 따라 최종 스타일이 결정됩니다.


📌 명시도 (Specificity) 계산 방식

명시도가 높은 선택자가 낮은 선택자를 덮어씌웁니다. 명시도의 우선순위는 다음과 같습니다.

우선순위 스타일 유형 설명

우선순위 스타일 유형 설명
1순위 !important 가장 강력한 우선순위를 가지며, 어떤 스타일보다도 우선 적용됨
2순위 인라인 스타일 (style 속성) 해당 요소의 style 속성 내에 직접 적용된 스타일
3순위 아이디 선택자 (#id) 특정 아이디를 가진 요소에 적용하는 스타일
4순위 클래스 선택자 (.class), 속성 선택자 ([attr]), 가상 클래스 (:hover 등) 특정 그룹의 요소를 선택하는 스타일
5순위 요소 선택자 (h1, p, div 등) 특정 태그(요소)에 적용하는 스타일
6순위 전체 선택자 (*), 하위 선택자 (div p), 동위 선택자 (div + p) 등 가장 낮은 우선순위를 가짐

✅ 좁은 범위의 선택자일수록 명시도가 높아집니다.


📌 명시도 예제

아래 HTML과 CSS 코드에서 어떤 스타일이 적용될지 살펴봅시다.

✅ HTML 코드

<p>1</p>
<p class="orange">2</p>
<p class="green orange">3</p>
<p class="orange green">4</p>
<p id="red" class="orange">5</p>
<h2 id="red" class="orange">6</h2>
<p id="red" class="orange" style="color: brown;">7</p>
<h2 id="red" class="orange" style="color: brown;">8</h2>

✅ CSS 코드

h2 {
    color: #3675d4 !important;
}

p {
    color: blue;
}

.orange {
    color: orange;
}

.green {
    color: green;
}

#red {
    color: red;
}

✅ 스타일 적용 분석

  • h2 { color: #3675d4 !important; } → !important가 적용되었기 때문에 무조건 이 스타일이 적용됨.
  • p id="red" class="orange" style="color: brown;" → 인라인 스타일 (style="color: brown;")이 가장 강력하여 brown 적용.
  • p class="green orange" → 클래스 선택자는 우선순위가 같지만, 가장 마지막에 선언된 .orange가 적용됨 → color: orange; 적용.
  • p id="red" class="orange" → 아이디 선택자(#red)가 클래스 선택자보다 우선순위가 높으므로 color: red; 적용.
  • h2 id="red" class="orange" style="color: brown;" → !important 규칙이 적용된 color: #3675d4;이 최종 적용됨.

📌 결론

  • CSS는 Cascading (위에서 아래로 흐름) 원칙을 따르지만, 선택자의 우선순위에 따라 스타일이 결정됨.
  • 좁은 범위를 선택할수록 우선순위가 높아짐 (id > class > 요소).
  • !important는 최상위 우선순위를 가지므로 신중하게 사용해야 함.
  • 코드를 작성할 때 명시도를 고려하여 불필요한 중복 스타일을 줄이면 유지보수가 쉬워짐.

CSS의 명시도를 이해하고 활용하면 더욱 깔끔하고 효율적인 스타일링이 가능합니다! 🚀




'Web > CSS' 카테고리의 다른 글

CSS Box Model  (3) 2025.02.26
CSS Inheritance (CSS 상속)  (3) 2025.02.25
CSS Selectors (CSS 선택자)  (1) 2025.02.25
CSS (Cascading Style Sheets)  (1) 2025.02.25