[CSS 이해하기] 구체성

2022. 12. 15. 14:19

요소를 선택하는데는 여러 방법이 있다.

따라서 서로 다른 선택자를 이용해 같은 요소를 선택할 수도 있다.

만약 같은 요소를 선택하는 서로 다른 규칙들이 상반된 스타일을 가지고 있다면 어떻게 표현이 될까?

 

h1 { color: red; }
body h1 { color: green; }

위 코드에서 두 규칙은 모두 h1을 선택하게 된다.

하지만 두 규칙이 지정하는 스타일은 서로 다르다.

그렇다면 h1은 어떻게 표현될까?

이 경우에 h1은 초록색으로 표현된다.

이는 구체성과 관련이 있다.

 

선택자에는 어떤 규칙이 우선으로 적용되어야 하는지에 대해 정해진 규칙이 있다.

이 규칙을 구체성이라고 한다.

구체성은 선택자를 얼마나 명시적으로(구체적으로) 선언했느냐를 수치화한 것으로,

구체성의 값이 클 수록 우선으로 적용된다.

 

0, 0, 0, 0

위와 같이 구체성은 4개의 숫자 값으로 이루어져 있다.

값을 비교할 때는 좌측에 있는 값부터 비교하며, 좌측 부분의 숫자가 클수록 높은 구체성을 가진다.

구체성은 아래의 규칙대로 계산된다.

  • 0, 1, 0, 0 : 선택자에 있는 모든 id 속성값
  • 0, 0, 1, 0 : 선택자에 있는 모든 class 속성값, 기타 속성, 가상 클래스
  • 0, 0, 0, 1 : 선택자에 있는 모든 요소, 가상 요소
  • 전체 선택자는 0, 0, 0, 0을 가진다.
  • 조합자(+, > 등)는 구체성에 영향을 주지 않는다.
h1 {...}  /*0,0,0,1*/
body h1 {...}  /*0,0,0,2*/
.grape {...}  /*0,0,1,0*/
*.bright {...}  /*0,0,1,0*/
p.bright em.dark {...}  /*0,0,2,2*/
#page {...}  /*0,1,0,0*/
div#page {...}  /*0,1,0,1*/

 

그런데 인라인 스타일로 선언된 경우에는 어떻게 해야할까?

p#page { color: red; }
<p id="page" style="color:blue">Hello, CSS</p>

첫 번째는 0,1,0,1의 구체성을 가지는 선택자로 스타일을 선언했고,

두 번째는 요소에 직접 인라인 스타일 방식으로 스타일을 선언했다.

결과적으로 <p>에는 color: blue가 적용된다.

인라인 스타일의 구체성은 1,0,0,0이며 규칙들 중 가장 큰 구체성을 가지기 때문이다.

 

위와 같은 상황에서 <p>에 color: red가 적용되도록 하는 방법이 있는데,

important 키워드를 사용하면 된다.

important 키워드는 별도의 구체성 값은 없지만, 모든 구체성을 무시하고 우선권을 갖는다.

important 키워드는 속성값 뒤 한 칸 공백을 두고 느낌표 기호와 함께 사용한다.

 

p#page { color: red !important;}
<p id="page" style="color:blue">Hello, CSS</p>

위의 <p>에는 important로 인해 color: red가 적용된다.


부스트코스의 강의 내용을 정리한 포스트입니다.

https://www.boostcourse.org/cs120

 

비전공자를 위한 HTML/CSS

부스트코스 무료 강의

www.boostcourse.org

'공부 > HTML과 CSS' 카테고리의 다른 글

[CSS 이해하기] 캐스케이딩(cascading)  (0) 2022.12.15
[CSS 이해하기] 상속  (0) 2022.12.15
[CSS 이해하기] 가상 선택자  (0) 2022.12.15
[CSS 이해하기] 선택자  (0) 2022.12.14
[CSS 이해하기] CSS 문법과 적용  (0) 2022.12.13

BELATED ARTICLES

more