구체성(명시도)

Robyn·2023년 4월 8일

서로 다른 선택자를 이용해서 같은 요소를 선택하는 경우
그런 동일한 규칙들이 서로 상반된 스타일을 가지고 있다면 어떻게 표현될까?

선택자에는 어떤 규칙이 우선되어야하는지에 대해 정해진 룰이 있다.
그것이 바로 구체성이다.

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

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


0, 0, 0, 0

  • 0, 1, 0, 0
    선택자에 있는 모든 id 속성값

  • 0, 0, 1, 0
    선택자에 있는 모든 class 속성값, 기타 속성, 가상 클래스

  • 0, 0, 0, 1
    선택자에 있는 모든 요소, 가상 요소

  • 전체 선택자는 0, 0, 0, 0을 갖는다.

조합자는 구체성에 영향을 주지 않는다.

구체성은 네 개의 값으로 이루어져있다.
구체성을 계산할 때는 좌측에 있는 값부터 비교를 하기 때문에 좌측 부분의 숫자가 클수록 높은 구체성을 갖는다고 볼 수 있다.
각 자리는 서로 독립적이기 때문에 0, 1, 0, 0을 100으로 읽으면 나중에 혼란스러워진다.

조합자란 >나 +같은 것을 말한다.


    <style>
        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 */
    </style>

가장 높은 구체성을 갖는 선택자 -> 마지막


<!doctype html>
<html lang="ko">

<head>
    <meta charset="utf-8">
    <title>form</title>
    <style>
        p#page {
            color: red;
        }
    </style>
</head>

<body>
    <p id="page" style="color: blue;">Lorem ipsum dolor sit amet consectetur adipisicing elit. Modi reiciendis itaque
        optio nulla voluptatem quis similique dolore sunt. Unde ullam repudiandae porro dicta. Explicabo ipsum minus
        quae commodi nemo hic!</p>
</body>

</html>

인라인
1, 0, 0, 0


!important

    <style>
        p#page {
            color: red !important;
        }
    </style>

모든 구체성을 무시하고 우선권을 갖는다.

0개의 댓글