노션에 기록했다가 벨로그로 뒤늦게 옮기기..
Cascading
는 단어 자체로는 ‘폭포', ‘위에서 아래로 쏟아지는’ 이란 뜻을 가진 단어이다.
CSS는 ‘Cascading Style Sheets’의 약자인데 여기서 엿볼수 있듯이 Cascading은 CSS의 매우 핵심적인 요소이다.
user-agent < user < author 순으로 우선순위가 높다.
1. Origin and Importance우선순위가 결정되는 요소 3가지
낮음에서 높음 | 스타일시트 | 중요성 |
---|---|---|
1 | user-agent(browser) | normal |
2 | user | normal |
3 | author(developer) | normal |
4 | author (developer) | !Important |
5 | user | !Important |
6 | user-agent( browser) | !Important |
안 배운 내용은 차치해두고 앞서 말했다듯이 일반적인 우선순위는 개발자, 사용자, 브라우저 스타일시트 순이다.
하지만 Important가 붙었을 경우에는 그 순서가 반대로 된다.
그렇기 때문에 important를 남용하지 않아야 하고,
선언했을 경우 나중에 재정의 되지 않도록 꼭 필요한 경우에만 사용해야 한다!!
가장 관련성이 높은 요소를 결정하기 위해 사용하는 알고리즘으로, 선택자들의 가중치를 계산해 어떤 스타일 규칙이 결과적으로 해당 요소에 적용될지 결정한다.
명시도가 가장 높은 스타일은 인라인 스타일이다.
!important
를 적용하는 것이다.가중치는 3가지 유형의 선택자를 기준으로 가중치를 추가한다. (ID-Class-Type)
1. ID 선택자: #myId
와 같은 id 선택자에 대해 가중치를 추가한다. (1-0-0)
2. Class 선택자: .myClass
와 같은 클래스 선택자, [type="radio"]
와 같은 속성 선택자, :hover
, :nth-of-type()
와 같은 가상클래스 선택자에 대해 가중치를 추가한다. (0-1-0)
3. Type 선택자: p
, h1
와 같은 요소 선택자나 ::before
, ::placeholder
와 같은 가상클래스 혹은 더블-콜론 선택자들에 대해 가중치를 추가한다. (0-0-1)
#myId {} /* 1번 가중치 1-0-0 */
.myClass .have. otherClass {} /* 2번 가중치 0-3-0 */
:is()
, :not()
, :has()
해당 가상 클래스들은 가중치 계산에 포함되지 않는다.
p {
/* 0-0-1 */
}
:is(p) {
/* 0-0-1 */
}
h2:nth-last-of-type(n + 2) {
/* 0-1-1 */
}
h2:has(~ h2) {
/* 0-0-2 */
}
div.outer p {
/* 0-1-2 */
}
div:not(.inner) p {
/* 0-1-2 */
}
:where()
의 가중치는 항상 (0-0-0) 이다.
가중치를 높이지 않고 선택자를 대상으로 하는 요소를 구체적으로 만들 수 있다.
:where(#defaultTheme) a {
/* 가중치 0-0-1 */
color: red;
}
또는 명시도를 높이기 위해 선택자를 중복으로 사용할 수 있다.
#myId#myId#myId span {
/* 3-0-1 */
}
.myClass.myClass.myClass span {
/* 0-3-1 */
}
동일한 요소에 대한 여러 스타일이 있을 경우 나중에 쓰여진 소스가 우선순위가 높다.
span {
background-color: red;
}
span {
background-color: blue;
}
이럴 경우 밑에 쓰여진 스타일이 적용되어 span 요소의 배경색은 모두 파란색이 적용된다.
추천 사이트
출처 mdn
https://developer.mozilla.org/en-US/docs/Web/CSS/Cascade
https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity