[CSS 이해하기] 구체성
요소를 선택하는데는 여러 방법이 있다.
따라서 서로 다른 선택자를 이용해 같은 요소를 선택할 수도 있다.
만약 같은 요소를 선택하는 서로 다른 규칙들이 상반된 스타일을 가지고 있다면 어떻게 표현이 될까?
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 |