[CSS] CSS 캐스케이딩Cascading에 대하여 쉽게 알아보자!

2020-10-11


Cascade 동사로는 폭포처럼 떨어지다 라는 의미를 갖고 있으며, Cascading은 폭포 정도로 해석할 수 있다.

 

다만 CSS 상에서의 Cascading 폭포라는 의미보다는 우선순위라는 해석으로 받아들이는 게 조금 더 이해하기 쉬울 것 같다.

 

이와 같은 캐스케이딩이 존재하는 이유는 웹을 구축하는 과정에서 <style> 내 여러 선택자를 사용하게 되는데, 이와 같은 선택자들에게 우선순위를 부여하지 않는다면 큰 혼란을 초래할 수 있기 때문이다.


 

 

그러면 이제 구체적인 예를 들어가며, 살펴보도록 하자.


<html>
	<head>
		<meta charset="UTF-8">
				<style >
					li{color:blue;}
					#apple{color:red;}
					.greenapple{color:green;}
				</style>
		
	</head>			
	<body>
		<ul>
			<li>포도</li>
			<li id ="apple" class ="greenapple" style=" color:yellow">사과</li>
			<li>수박</li>
		</ul>
		
			
</html>

우선 정렬되지 않은 리스트를 하나 만들어주었다. 

주제는 과일로 정해 사과에 다양한 선택자를 주었으면 내용은 아래와 같다.

id(빨간색) / class(초록색) / style(노란색) / li(파란색)

 

바로 그러면 어는 선택자가 가장 우선순위가 높은지 확인해보자.

결과는 아래와 같다.


id(빨간색) / class(초록색) / style(노란색) / li(파란색)

결과를 보자면 사과를 제외한 li 선택자를 사용한 포도와 수박은 색깔이 파란색으로 변한 것을 확인할 수 있으며, 사과는 style선택자를 최우선 순위로 두어 노란색으로 변한 것을 확인할 수 있다.


<html>
	<head>
		<meta charset="UTF-8">
				<style >
					li{color:blue;}
					#apple{color:red;}
					.greenapple{color:green;}
				</style>
		
	</head>			
	<body>
		<ul>
			<li>포도</li>
			<li id ="apple" class ="greenapple"> <!-- style=" color:yellow" --> 사과</li>
			<li>수박</li>
		</ul>
		
			
</html>

이후 style 선택자를 주석처리하고 다음 우선순위를 확인해보자.


id(빨간색) / class(초록색) / style(노란색) / li(파란색)

style 선택자를 주석처리하자 이번에는 id 선택자가 최우선순위가 되어 사과의 색이 빨간색으로 변한 것을 알 수 있다.


<html>
	<head>
		<meta charset="UTF-8">
				<style >
					li{color:blue;}
					/* #apple{color:red;} */
					.greenapple{color:green;}
				</style>
		
	</head>			
	<body>
		<ul>
			<li>포도</li>
			<li class ="greenapple"> <!-- id ="apple" --> <!-- style=" color:yellow" --> 사과</li>
			<li>수박</li>
		</ul>
		
			
</html>

마지막으로 class / li 선택자 중 누구의 우선 순위가 더 높은지 알아보도록 하기 위해 id 선택자 역시 주석 처리를 해보도록 하자.


id(빨간색) / class(초록색) / style(노란색) / li(파란색)

이쯤와서는 어느 정도 예상했을 것이라고 생각하는데, 보시다시피 li 선택자보다는 class 선택자의 우선수위가 높은 것을 확인할 수 있다.

 

부등호로 표현하면 아래와 같다.

 

style 선택자 > id 선택자 > class선택자 > li(태그)선택자 순으로 확인 할 수 있다. 

태그 선택자의 경우 다른 태그인 <ul> / <p> / <div>... 등 여러 태그를 의미한다.


그러면 여기서 궁금할 수 있다. 

 

웹을 구축하다가 이미 id 나 style 과 같은 우선순위가 높은 선택자가 선언된 태그에 이들을 이기고 최우선 순위로 두어야 하는 경우가 생길 수 도 있다고 가정해 보자.

 

이와 같은 경우에는 과연 어떻게 해야할까? 사실 방법은 간단하다.

위에서 사용하던 예제를 통해 알아보도록 하자.

 

<html>
	<head>
		<meta charset="UTF-8">
				<style >
					li{color:blue !important;}
					/*li에 최우선 순위를 줬다.  */
					#apple{color:red;}
					.greenapple{color:green;}
				</style>
		
	</head>			
	<body>
		<ul>
			<li>포도</li>
			<li class ="greenapple" id ="apple"  style=" color:yellow"> 사과</li>
			<li>수박</li>
		</ul>
		
			
</html>

 

위에 코드와 같이 li 선택자 선언문 뒤에 !important라는 속성을 집어넣어주면 간단히 최우선 순위를 지정할 수 있다.


id(빨간색) / class(초록색) / style(노란색) / li(파란색)

그러면 위와같이 사과 역시 다른 포도 / 수박과 같은 li선택자의 영향을 받아 파란색으로 변한 것을 알 수 있다.


이처럼 웹페이지 구축에서의 하나의 우선순위 체계라고 할 수 있는 캐스케이딩에 대하여 알아보았다.

어렵지는 않은 내용이라 그만큼 간과하기 쉽지만, 중요한 내용임에는 틀림없다.