CSS3 정리

CSS 하향법칙(cascade) 정리

송조 2020. 7. 18. 22:40

와... 졸립다.

 

오늘은 하향법칙(cascade)을 정리해보고자 한돠..

 

하향법칙은 어떤 요소에 어떤 스타일의 속성을

적용할지 결정하는 규칙의 집합을 말한다.

 

한 태그에 여러 스타일이 적용될 때 어떻게 처리하고,

CSS 속성 충돌이 발생할 때 어떻게 해소할지 결정하는

웹 브라우저를 위한 규칙이다.

 

 

1. 계승되는 스타일은 누적된다

계승되는 모든 스타일의 모여

하나의 하이브리드 스타일(hybrid style)을 구성한다.

 

만약 이런 스타일이 있다면~

 

body { font-family: Verdana, Arial, Helvetica, sans-serif; }

p { color: #F30; }

strong {font-size: 24px; }

 

<strong> 태그는 body와 p의 스타일을 모두 물려받는다.

 

최종적으로 정리해보면 <strong> 태그는

 

strong {

font-family: verdana, Arial, Helvetiva, sans-serif;

color: #F30;

font-size: 24px;

}

 

스타일이 이렇게 적용된다.

 

 

2. 가장 가까운 선조가 이긴다

적용된 특별한 스타일이 없는 태그의 경우,

상속된 속성에서 충돌이 발생하면 가까운 조상의 속성이 승리한다.

 

예를 들어서 <table> 태그에 텍스트의

색상을 지정하는 스타일이 적용돼 있고,

그와는 다른 텍스트 색상을 지정하는

스타일이 해당 테이블의 <td> 태그에 적용돼 있다면

<td>의 하위 태는 <td> 스타일로부터 상속된 색상을 사용한다.

 

 

3. 직접 적용된 스타일이 이긴다

서체 색상이 <body>, <p>, <strong>에 적용돼 있을 경우,

<strong> 태그가 모든 속성을 압도한다.

 

 

<strong>만 색상이 다른 것을 볼 수 있다. 

 

 

4. 하나의 태그, 많은 스타일

스타일 유형과 생성 순서에 따라,

브라우저는 하나 이상을 동시에 적용하게 될 수 있다.

 

1) 태그 스타일과 클래스 스타일이 한 태그에 적용되는 경우

예를 들어 <h2>에 대한 스타일이 정의돼 있고

.leadHeadline이라는 클래스 스타일이

같이 적용된 <h2>태그엔 두 스타일이 동시에 적용된다.

 

2) 스타일시트 안에 같은 스타일 이름이 두 번 이상 등장하는 경우

예를 들어 .leadHeadilne 그룹 선택자 스타일이 있고,

클래스 스타일 .headHeadline이 같은 스타일시트 안에 있다면

leadHeadline 클래스가 지정된 요소는 두 스타일을 동시에 사용한다.

 

3) 태그에 클래스와 ID 스타일이 전부 적용된 경우

예를 들어 #banner ID 스타일이 있고, .news라는 클래스 스타일이 있다.

<div id="banner" class="news">와 같은 태그가 있다면

당연히 banner와 news 스타일 전부 적용된다.

 

4) 충돌이 없는 한 브라우저는 모든 스타일의 속성을 하나로 합친다.

 

이렇게

 

 

5. 특이도(specificity): 어떤 스타일이 이기나

CSS는 스타일의 구체성을 결정하는

특이도(specificity)라는 척도를 제공한다.

 

1) 태그 선택자의 특이도는 1점

2) 클래스 선택자의 특이도는 10점

3) ID 선택자의 특이도는 100점

4) 내장 스타일(inline style)의 특이도는 1000점

 

웹 페이지에

<img id="logo" class="highlight" src="logo.gif" />

를 넣었을 때 만약 스타일에서 충돌이 생기면

ID 스타일(#logo)에 사용된 속성이 이긴다. 

 

만약, 동점자 처리가 된다면 마지막 스타일이 이긴다.

 

 

* 외부 스타일시트 VS 내부 스타일시트

외부 스타일시트와 내부 스타일시트에 충돌하는 스타일이 있으면

스타일시트를 HTML 파일 어디에 놓느냐가 중요하다.

<style> 태그로 내부 스타일시트를 정의한 다음에 <link>를 사용해

외부스타일시트를 연결했다면 외부 스타일시트의 스타일이 이긴다.

 

 

*특이도를 무시하는 방법

그냥 !important를 속성 끝에 두면 된다.

 

.nav a { color: red; }

a { color: teal !important; }

 

 

5. 하향법칙 제어 방법

1) 특이도 변경

 

 

이럴 땐 .intro 클래스 스타일의 선택자를

#sidebar .intro로 변경해 특이도를 높여 해결한다.

 

 

하지만 이렇게 선택자를 추가해 특이도를 높여서

어떤 스타일이 승리하도록 만드는 걸 계속하면

'특이도 전쟁'이 벌어져 스타일시트가 길고

꼬인 이름으로 가득해지는 일이 벌어질 수도 있다.

선택자는 가능한 한 짧게 만들어야 한다.

 

 

2) 선택적 재정의(overriding)

예를 들어 <h2>의 외부스타일 시트를 정의했다고 하자.

h2 {

font-family: Arial, Helvetica, sans-serif; 

font-size: 24px;

color: #000;

}

 

홈페이지의 <h2> 태그를 더 큰 빨간색 서체로

표시되도록 만들려면??

내부 스타일시트에 추가하면 된다.

 

h2 {

font-size: 36px;

color: red;

}

 

또 다른 방법은 외부 스타일시트를 하나 더 만드는 것이다.

 

<link rel="stylesheet" href="css/styles.css"/>

<link rel="stylesheet" href="css/home.css/>