CSS입문

CSS_상속의 우선순위_22.04.08(Fri)

양빵빵 2022. 4. 8. 11:14
우선순위
 우선순위란 HTML 요소에 동일한 속성이 적용될 경우 어떤 것을 우선으로 적용하는지에 대한 내용입니다. 다음과 같은 규칙에 의해 우선순위가 결정됩니다
 
# 우선순위 규칙
1. 명시도 점수가 높은 선언이 우선
2. 점수가 같은 경우 가장 마지막에 해석되는 선언이 우선
3. 명시도 점수는 상속보다 우선
4. !important가 적용된 선언방식이 다른것보다 우선
 
# 명시도 점수
1. !important: 무한대 점
2. 인라인 스타일: 1000점
3. 아이디 선택자: 100점
4. 클래스 선택자: 10점
5. 태그 선택자: 1점
6. 전체 선택자: 0점
 
:hover, :active, :first-child와 같은 가상 클래스는 클래스 선택자로 취 급하여 10점이 부여됨 - ::before, ::after와 같은 가상요소는 태그선택자로 취급되어 1점이 부 여됨 - :not()은 점수가 0점이 부여됩니다.

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=, initial-scale=1.0">
    <title>Document</title>
   
    <style>
        div{
            /* color:blue !important; */
                    }
       #c-y{
           color:yellow;
       }            
       .c-g{
           color:green;
            }
        body{
            color:aqua;
            }
            /* body는 div의 아빠 */
        div{
            /* color:red !important; */
        }
    /* 맨처음 dive에는 파란색, 마지막div에는 빨간색을 지정 */



        h1{
            /* 태그선택자 1점 = 1점 */
            color:lightcoral;
           
        }

 

        .bbb h1{
            /* 클래스선택자 10점 태그 1점 = 11점 */
            color:orangered;
            }

 

        #aaa h1{
            /* 아이디선택자 100점 + 태그 1점 = 101점 */
            color:gray;
        }
       
        #aaa div.bbb h1 {
            /* 아이디선택자 100점 + 태그선택자1점 + 클래스선택자10점 +태그 1점
             = 112점 */
            color:greenyellow;
              }

 

        #aaa .bbb h1{
            /* 아이디 100 + 클래스 10 + 태그 1 = 111점 */
            color: tomato;  
        }
    .bbb h1:first-child{
        /* 클래스 10 + 태그1 = 11점 */
        /*  */
        color:violet;
    }

 

    div.bbb > h1{
        /* 태그1 + 클래스10 + 태그 1 = 12점 */
        color:red;  
    }
    </style>
</head>
<body>
   
   
    <div id="c-y" class="c-g" style="color:orange;">안녕하세요1</div>

 

    <!-- 인라인 태그에도 div에 오렌지색을 지정 했을때 안녕하세요1은 무슨색일까? -->
    <!-- 인라인스타일 우선순위가 높다. -->

 

    <div id="c-y" class="c-g">안녕하세요2</div>
    <!-- id가 클래스 보다 우선순위가 높다 -->
   
    <div class="c-g">안녕하세요3</div>
    <!-- 클래스 선택자가 태그 선택자보다 우선순위가 높다. -->

 

    <div>안녕하세요4</div>
    <!-- div 첫번째 파란색, 마지막 빨간색으로 지정했었다.
        중복 지정일때 마지막 지정된 속성이 적용. -->

 

        <section>안녕하세요5</section>
        <!-- body의 상속개념으로 아쿠아색 적용. -->
       
</body>
</html>
스타일에 적용된 속성들

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=, initial-scale=1.0">
    <title>Document</title>
   
    <style>
     
        h1{
            /* 태그선택자 1점 = 1점 */
            color:lightcoral;
           
        }

        .bbb h1{
            /* 클래스선택자 10점 태그 1점 = 11점 */
            color:orangered;
            }

        #aaa h1{
            /* 아이디선택자 100점 + 태그 1점 = 101점 */
            color:gray;
        }
       
        #aaa div.bbb h1 {
            /* 아이디선택자 100점 + 태그선택자1점 + 클래스선택자10점 +태그 1점
             = 112점 */
            color:greenyellow;
              }

        #aaa .bbb h1{
            /* 아이디 100 + 클래스 10 + 태그 1 = 111점 */
            color: tomato;  
        }
    .bbb h1:first-child{
        /* 클래스 10 + 태그1 = 11점 */
        /*  */
        color:violet;
    }

    div.bbb > h1{
        /* 태그1 + 클래스10 + 태그 1 = 12점 */
        color:red;  
    }
    </style>
</head>
<body>
      
   <hr>

<!-- #aaa>.bbb>h1{안녕하세요6} -->
<!-- 중첩구조에서의 점수 -->
<div id="aaa">
    <div class="bbb">
        <h1>안녕하세요6</h1>
    </div>
</div>

       
</body>
</html>

 

[아래 태그를 보고 우선순위를 계산하는 연습을 해보자]

우선순위계산연습 (출처:sl아카데미 홍순구강사님자료)

[계산 결과]

1. 10 + 1 + 10 = 21

2. 100 + 1 = 101

3. 1 = 1

4. 10 + 1 + 10 = 21

5. 10 + 1 = 11

6. 1 + 10 + 1 + 10 = 22

7. 0 + 10 = 10

8. 0 + 1 = 1