어떤 요소에 적용된 CSS 스타일이 상충할때 어떤 스타일을 적용할지 결정하기 위해
브라우저는 각 스타일에 구체성을 부여하고 판단하여 우선으로 적용할 것을 선택한다.
요소를 선택하는데는 여러 방법이 있다.
따라서 서로 다른 선택자를 이용해 같은 요소를 선택할 수도 있다.
h1 {color:pink;}
body h1 {color:blue;}
두 규칙은 모두 h1을 선택하지만, 지정하는 스타일은 서로 다르다.
그렇다면 h1은 어떻게 표현될까?
h1에는 color : blue가 적용되는데 이는 구체성과 관련이 있다.
선택자에는 어떤 규칙이 우선으로 적용되어야 하는지에 대해 정해진 규칙이 있다.
이 규칙을 '구체성'이라고 한다.
구체성은 선택자를 얼마나 명시적으로(구체적으로) 선언했느냐를 수치화한 것으로,
구체성의 값이 클수록 우선으로 적용된다.
0,0,0,0
구체성은 4개의 숫자 값으로 이루어져 있다.
값을 비교할 때는 좌측에 있는 값부터 비교하며, 좌측 부분의 숫자가 클수록 높은 구체성을 갖는다.
구체성은 아래의 규칙대로 계산된다.
- 0, 1, 0, 0 : 선택자에 있는 모든 id 속성값
- 0, 0, 1, 0 : 선택자에 있는 모든 class 속성값, 기타 속성, 가상 클래스
- 0, 0, 0, 1 : 선택자에 있는 모든 요소, 가상 요소
- 전체 선택자는 0, 0, 0, 0을 가진다.
- 조합자는 구체성에 영향을 주지 않는다. (>, + 등)
* {...} /* 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#first_word{
color:red
}
<p id="first_word" style="color:blue">hello world</p>
첫번째는 0,1,0,1의 구체성을 가지는 선택자로 스타일을 선택했고,
두번째는 요소에 직접 인라인 스타일 방식으로 스타일을 선언했다.
인라인 스타일의 구체성 값은 1,0,0,0이며 규칙들 중 가장 큰 구체성을 갖는다.
따라서 가장 큰 구체성 값을 갖는 인라인 스타일의 color:blue가 적용된다.
important
important 키워드는 별도의 구체성 값이 없지만 , 모든 구체성을 무시하고 우선권을 갖는다.
important 키워드는 속성값 뒤 한칸 공백을 주고 느낌표 기호와 함께 쓴다.
p#first_word{
color:red !important
}
<p id="first_word" style="color:blue">hello world</p>
위의 important로 인해 color:red 가 적용된다.
'Front-end > CSS' 카테고리의 다른 글
[CSS] Safari환경에서 적용안되는 폰트 해결하기 (0) | 2022.06.23 |
---|---|
[CSS] 마진 병합(margin collapse) 정리 (0) | 2022.06.04 |
[CSS] div border , table 태그 border 테두리 겹침 제거 (0) | 2022.05.25 |
[CSS] 선택자 class & id (0) | 2022.05.22 |
[CSS] css 구문과 적용 (0) | 2022.05.22 |