콘텐츠로 건너뛰기

[CSS] 선택자(Selectors) – 자주 사용하는 선택자와 적용 우선 순위

CSS 선택자는 스타일을 지정할 HTML 요소를 지정할 때 사용된다.

선택자는 5가지 유형으로 분류되며 그 종류도 다양하다. 이번 포스트에서는 자주 사용하는 선택자선택자 우선 순위에 대해서 정리한다.

기본적으로 사용하는 선택자:

  • 전체 선택자
  • 태그 선택자
  • 아이디 선택자
  • 클래스 선택자
  • 태그와 함께 쓰는 선택자
  • 하위 선택자
  • 자식 선택자
  • 그룹 선택자

5가지 유형과 다른 선택자에 대해 자세히 보고싶다면 링크를 참조할 것

전체, 태그, 아이디, 클래스, 태그와 함께 쓰는 선택자

/* 전체 선택자 */
* {
 font-weight: bold; 
}

/* 태그 선택자 */
p { 
  color: red;
}

/* 아이디 선택자*/
#selector {
  color: green;
}

/* 클래스 선택자 */
.selector {
  color: blue
}

/* 태그와 함께 쓰는 선택자 */
p.selector{
 color: orange;
}
<p> 1. 내용 </p>
<p class="selector"> 2. 내용 </p>
<p id="selector"> 3. 내용 </p>
<span class="selector"> 4. 내용 </span>

선택자 종류설명예제 – 적용되는 요소
전체 선택자전체 요소 선택1,2,3,4 번
태그 선택자p 태그 요소 선택1,2,3번
아이디 선택자아이디가 ‘selector’인 요소 선택3번
클래스 선택자클래스가 ‘selector’인 요소 선택2,4번
태그와 함께 쓰는 선택자p 태그 요소 중 클래스가 ‘selector’인 요소 선택2번

하위, 자식, 그룹 선택자

/* 하위 선택자 */
div span{
  color: red;
}

/* 자식 선택자 */
div > span{
  color: blue;
}

/* 그룹 선택자 */
h1, p span{
  font-style: italic;
}
<h1> CSS selectors </h1>
<div>
  <span>A CSS selector selects the HTML elements you want to style</span>
  <p> 
  The element selector selects <span> HTML elements </span> based on 
  the element name
  </p>
</div>

예제 결과 화면:

예제 코드 결과 화면
선택자 종류사용 방법설명
하위 선택자
(descendant selector)
스페이스div 태그 하위의 모든 span 선택
(자식 span 뿐만 아니라 손자, 증손자 span 등 하위 모든 span 선택)
자식 선택자
(child selector)
>div 태그의 자식 span 선택
(손자, 증손자 span은 선택되지 않음. 자식 span만 선택)
그룹 선택자
(grouping selector)
,같은 속성 및 값을 가진 요소를 콤마(,)로 연결하여 선택

CSS 선택자 적용 우선 순위 (Specificity Hierarchy)

어떤 요소의 스타일을 지정하는 두 개 이상의 css가 있을 경우, 브라우저는 아래의 우선순위를 따라서 스타일을 적용한다. 간단하게는 전체 선택자(*)의 순위가 가장 낮고, 아이디 선택자(#)의 순위가 높다. 스타일을 지정했는데 생각대로 적용되지 않는 경우 다른 스타일의 우선 순위에 밀려서 그런 경우가 많다.

선택자 적용 우선순위

우선순위선택자
0! important
1인라인 스타일
2아이디 선택자
3클래스 선택자
4태그 선택자

선택자 우선순위 예제1 – 인라인 > 클래스 > 태그 > 전체 선택자

<h1 class="intro" style="color:red;" > CSS selectors </h1>
<div>
  <p> <span class="intro"> A CSS selector <span> selects the HTML elements you want to style </p>
</div>  
.intro {color: blue;}
h1 {color: gray;}
* {color: green;}

우선순위 예제1 결과 화면:

CSS 코드에 지정된 스타일보다, HTML 코드에서 인라인으로 지정한 (style=”color:red;”)의 우선 순위가 높기 때문에 CSS Selectors 텍스트가 빨간색으로 나타난다.

선택자 우선 순위 예제2 – 상세한 선택이 우선 순위가 높음

<h1 > CSS selectors </h1>
<div>
  <p> <span class="intro"> A CSS selector <span> selects the HTML elements you want to style </p>
</div>  
div span.intro { color: green; }
div span { color: blue; }

우선 순위 예제2 결과 화면:

div span 보다 div span.intro가 더 상세하게 요소를 지정했기 때문에 div span.intro이 우선 순위가 더 높다. 따라서 텍스트 색상이 파란색이 아니라 초록색으로 표시된다.

실제로는 선택자 별로 점수를 합산해서 우선순위를 계산한다는데, 굳이 그럴필요까진 없고 상세하게 설명한것이 더 우선순위가 높다는 정도만 알고있으면 될 것 같다.

그 외 – !imporant에 대하여

!important는 선택자 우선 순위를 모두 무시하고 항상 0순위로 스타일을 적용한다. 하지만 !important 사용은 지양하는 것이 좋다. 우선 순위를 무시하기에 디버깅을 어렵게 만들기 때문이다.

링크에서는 다음과 같이 설명한다

  1. !important를 사용 하기 전에 다른 방법이 없나 고민해 볼 것
  2. 외부 CSS를 재정의하며 페이지 별 CSS일때 만 !important를 사용할 것
  3. 플러그인이나 매시업을 만들때는 절대 사용하지 말 것
  4. 전체 사이트에 적용되는 CSS에서는 절대 사용하지 말 것

!important를 사용하는 대신 선택자 우선순위를 이용해서 스타일을 적용하는 방법을 권하며, 외부 CSS (부트스트랩 등) 또는 inline 스타일을 재정의 할 때만 사용하라고 한다.