CSS Selector 세부 사항 이해 강화

5790 단어 상세도CSS
사내 학습회 노트

CSS 선택기의 세부 사항


규격


규격에서 보듯이 "상세도"는
selector's specificity
따라서 선택기의 상세도.
상세도는 계산할 수 있다.

MDN


세부 사양은 브라우저에서 요소와 가장 연관된 CSS 속성을 결정하는 방법입니다. 즉, CSS 속성을 적용하는 방법입니다.상세도는 여러 조합된 CSS 선택기로 구성된 일치 규칙에 근거합니다.
"분명히 속성을 썼는데 적용되지 않아요!"이렇게 DevTools를 열면 실제로 접촉하고 싶은 속성에 삭제선이 있습니다. 이런 일이 발생할 수 있습니다.
※ 다음 문장의 인용은 주석이 없으면 이 페이지에서 인용됩니다.

기본


아이템 비교 시 속성 우선도 높이 순서는 다음과 같습니다.
(여기서'상세도'를 쓰지 않았습니다. 엄밀히 말하면!important와 style 속성은 선택기가 아니기 때문에 선택기의 상세도와 다른 규격입니다)
高

0. !important
1. HTML上のstyle属性に書かれたプロパティ
2. IDセレクタ
3. クラスセレクタ、属性セレクタ、擬似セレクタ
4. 要素型セレクタ、擬似要素
5. CSSの記載順序がうしろのプロパティ

低

!important


!important 규칙이 스타일 선언에 사용될 때, 성명 목록의 어느 위치에 있든지 간에 이 성명은 CSS에서 만든 다른 성명을 덮어씁니다.
선택기의 상세도와 다른 규격은 모든 다른 속성을 덮어쓰기 때문에 우선순위가 가장 높다.!important 이 속성에 대해 설명하는 경우 선택기의 세부 내용이 적용됩니다.
세기말의 무법지대이니 사용하지 마세요.

HTML에 쓰인 style 속성의 속성


요소에 추가된 내연 스타일은 항상 외부 스타일시트의 스타일을 덮어씁니다.
선택기의 상세도와 다른 규격은 덮어쓰기!important 이외의 속성으로 인해 우선도가 높습니다.

ID 선택기, 클래스 선택기, 속성 선택기, 위조 선택기, 요소 유형 선택기, 위조 요소

  • ID 선택기: #hoge
  • 클래스 선택기: .hoge
  • 속성 선택기: [name="hoge"]
  • 위조 선택기: :hover
  • 요소 선택기: div
  • 위조원소: ::before
  • 이것들은 선택기의 상세도 규격에 언급된 선택기들이다.
    전체 선택기(*), 조합자(+,>,~,'‖) 및 부정 위조류(:not()는 상세도에 영향을 주지 않습니다.(단, not () 에서 선언된 선택기가 영향을 미칩니다.)

    상세도 계산 방법


    사고 방법


    선택기들은 모두 상세한 점수를 가지고 있다.
    점수의 종류는 3개이며, 이 선택기의 숫자 3개를 배열하여 상세도를 만든다.
    모델로서 소프트웨어의 의미 버전의 표식과 같다.
    セレクタ {
      プロパティ: 値;
    }
    
    이러한 CSS의 표기법에는 "선택기"부분에 등장하는 선택기들의 점수가 괄호 안에 있는'속성'들의 상세도가 된다.

    선택기 포인트


    양식서와 다른 표기지만 이해하기 쉽도록 의미 판본과 똑같이 표기한다.
    선택기
    분수
    ID
    1.0.0
    클래스, 속성, 위조
    0.1.0
    요소 유형, 위조 요소
    0.0.1
    전칭, 조합부호, 부정위류 (그중 부정위류 내의 선택기는 계산에 포함됨)
    무시

    예제


    hoge.css
    .hoge.piyo {
      background-color: blue;
    }
    
    .hoge {
      background-color: red;
    }
    
    의 파일, 위아래 각각의 상세도
  • : 클래스 선택기(0.1.0)는 2개이므로 0.2.0입니다.
  • : 클래스 선택기(0.1.0)는 1개이므로 0.1.0입니다.
  • 일반적으로 css는 뒤에 쓴 속성보다 우선하지만, 이 파일의 경우 위에 쓴 선택기의 상세도가 높기 때문에 위background-color: blue;를 적용합니다.

    HTML 파일 표시
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>CSSの詳細度</title>
      <style>
        .hoge {
          width: 200px;
          height: 200px;
        }
    
        .hoge.piyo {
          background-color: blue;
        }
    
        .hoge {
          background-color: red;
        }
      </style>
    </head>
    <body>
      <div class="hoge piyo"></div>
    </body>
    </html>
    

    수위의 장애를 넘지 않을 거예요.


    주의해야 할 것은 이 세 가지 점수, 예를 들어 다음 숫자가 1000개가 모여도 상세도로 이전 분수를 초과하지 않는다는 것이다.
    (처음에는'합계'라는 단어로 표시했지만 어병을 일으킬 수 있다고 생각해서 수정했다.)
    hoge.css
    #hoge {
      background-color: green;
    }
    
    .hoge1.hoge2.hoge3.hoge4.hoge5.hoge6.hoge7.hoge8.hoge9.hoge10.hoge11.hoge12.hoge13 {
      background-color: red;
    }
    
    <div id="hoge"
         class="hoge hoge1 hoge2 hoge3 hoge4 hoge5 hoge6 hoge7 hoge8 hoge9 hoge10 hoge11 hoge12 hoge13" >
      HOGE
    </div>
    
    이러한 코드가 존재하더라도 이 HOGE의 배경색은 green (id로 지정된 값) 입니다.

    즉, 이런 상황에서 id의 상세도 #hoge는 1.0.0이고 아래 클래스의 연결은 13개이기 때문에 1.3.0이 아니라 0.13.0이다.

    좋은 웹페이지 즐겨찾기