새로운 질서 위키

CSS 규칙이 겹칠 때

같은 요소에 같은 속성을 여러 번 지정했을 때 어떤 값이 적용되는지 정하는 과정이 캐스케이드다. 선택자로 대상을 골랐다고 해서 그 규칙이 항상 우선하는 것은 아니다.

  • 먼저 조건에 맞고 유효한 선언인지 본다. 이어 선언의 출처와 중요도, 레이어 등의 우선순위가 관여한다.
  • 그 단계들이 같을 때 명시도를 비교한다. 같은 레이어의 일반 선언에서는 .note가 p보다 명시도가 높다.
  • 명시도까지 같아도 @scope를 썼다면 범위의 가까움을 비교한다. 앞선 조건까지 같을 때 뒤에 선언한 값이 이긴다.
  • 개발자 도구에서 요소를 선택하고 취소선이 그어진 선언과 최종 계산값을 본다. !important를 계속 붙이기 전에 어떤 조건에서 밀렸는지 확인한다.

작은 예제

아래 코드를 UTF-8 형식의 example-05.html로 저장해 웹 브라우저에서 연다.

<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>CSS 규칙이 겹칠 때</title>
<style>
* { box-sizing: border-box; }
body { margin: 0; padding: 1rem; font-family: sans-serif;
  line-height: 1.6; color: #222; background: #fff; }
main { max-inline-size: 60rem; margin-inline: auto; }
h1 { font-size: 1.7rem; line-height: 1.3; }
a { color: #174fa0; }
:focus-visible { outline: 3px solid #174fa0; outline-offset: 3px; }
.note { color: #164fa0; }
p { color: #a02b16; }
.note { color: #20613e; }
</style>
</head>
<body>
<main>
<h1>CSS 규칙이 겹칠 때</h1>
<p class="note">세 규칙이 이 문장의 색을 정하려고 한다.</p>
</main>

</body>
</html>

문장은 마지막 .note의 초록색으로 보인다. 마지막 선언을 지우면 뒤에 있는 p의 붉은색이 아니라 첫 .note의 파란색이 남는다. 이 예제는 모두 같은 출처·중요도이며 레이어와 범위를 지정하지 않은 경우다. CSS가 커지면 캐스케이드 레이어로 규칙 묶음의 관계를 정할 수도 있다.

참고

#CSS #웹제작

검색