
์ด ๋ด์ฉ์ MDN์์ ์๊ฐํ CSS Cascading์ ํด์ํ์ฌ ์ ๋ฐฉ์๋๋ก ์ดํดํ ๋ด์ฉ์ ์ ๋ฆฌํ ๊ฒ์ ๋๋ค.
ํ๋ฆฐ ๋ถ๋ถ์ด ์๋ค๋ฉด ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์ธ์ ๐
CSS?
CSS๋ Cascading Style Sheets์ ์ฝ์๋ก ์นํ์ด์ง๋ฅผ ๊พธ๋ฏธ๋ ค๊ณ ์์ฑํ๋ ์ฝ๋์ ๋๋ค.
์ด๋ฆ์์๋ ์ ์ ์๋ฏ, Cascading์ CSS์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ๋๋ค.
Cascading์ด๋?
Cascade์ ์ฌ์ ์ ์๋ฏธ : ์ข ์
๊ณต์๋ฌธ์์ธ MDN์์ ์๊ฐํ๋ CSS์์์ Cascading ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
"The cascade is an algorithm that defines how user agents combine property values originating from different sources."
"์บ์ค์ผ์ด๋๋ ์๋ก ๋ค๋ฅธ ์์ค์์ ๋ฐ์ํ๋ ์์ฑ ๊ฐ์ ๊ฒฐํฉํ๋ ๋ฐฉ๋ฒ์ ์ ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค."
๋ค์ ์ด๋ ต๊ฒ ๋๊ปด์ง ์ ์์ง๋ง ์ฝ๊ฒ ํ์๋ฉด,
์ฌ๋ฌ ๊ณณ์์ ์์ฑ๋ ์คํ์ผ ์ค ์์์ ์ ์ฉํ ์คํ์ผ์ ๊ณ ๋ฅด๋ ๋ฐฉ์์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
์คํ์ผ์ ๊ณ ๋ฅด๋ ๋ฐฉ์(Cascading)์ 5๊ฐ์ง๋ก ๊ตฌ๋ถํ ์ ์์ต๋๋ค.
1. Relevance(๊ด๋ จ์ฑ)
2. Origin and important(์ถ์ฒ์ ์ค์๋)
3. Specificity(๋ช ์๋)
4. Scoping Proximity(๋ฒ์ ์ ๊ทผ์ฑ)
5. Order of appearance(์ฝ๋์ ์์)
๐ Relevance
๋ค์ํ ์์ค์ ๋ชจ๋ ๊ท์น์ ๋ช ์๋ ํน์ ์์์ ์ ์ฉ๋๋ ๊ท์น์ ๋งํฉ๋๋ค.
์ ํ์๊ฐ ์ฃผ์ด์ง ์์์ ์ผ์นํ๊ณ , ์ ์ ํ media์์์ ๊ท์น์ด ์ ์ฉ๋๋ ๊ฒ์ ๋งํ๋ฉฐ, ์๋ฅผ ๋ค๋ฉด @media ๋ฅผ ์ฌ์ฉํ์ฌ ํฌ๊ธฐ๋ฅผ ๊ท์ ํ ๊ฒฝ์ฐ ํด๋น ํฌ๊ธฐ์ผ ๋ ์ ์ฉ๋๋ ๊ฒ๊ณผ ๊ทธ ์ค p ํ๊ทธ(์๋ฅผ ๋ค์ด)์ ์ ์ฉ๋๋ ์ฝ๋๋ divํ๊ทธ์ ์ ์ฉ๋์ง ์์ต๋๋ค.
๐ Origin type(์์ฑ ์ถ์ฒ)์ Important(์ค์๋)
CSS๋ ์ฌ๋ฌ ๊ณณ์์ ์ ์ธํ ์ ์๋๋ฐ ์ด ์ค์๋ User-agent Stylesheets(์ฌ์ฉ์ ๋๊ตฌ ์คํ์ผ์ํธ), Author Stylesheets(์์ฑ์ ์คํ์ผ์ํธ), User Stylesheets(์ฌ์ฉ์ ์คํ์ผ์ํธ) ๋ฑ์ด ์์ต๋๋ค.
User-agent Stylesheets(์ฌ์ฉ์ ๋๊ตฌ ์คํ์ผ์ํธ)
๋ธ๋ผ์ฐ์ ์๋ ๋ชจ๋ ๋ฌธ์์ ๊ธฐ๋ณธ ์คํ์ผ์ ์ ๊ณตํ๋ ๊ธฐ๋ณธ ์คํ์ผ์ํธ๊ฐ ์กด์ฌํ๋ฉฐ, ์ด๋ฅผ User-agent Stylesheets๋ผ๊ณ ํฉ๋๋ค.
์์ ) a ํ๊ทธ์ ํ์ดํผํ ์คํธ ์คํ์ผ, div์ diplay ์์ฑ ๋ฑ
์ฌ์ฉ์๊ฐ User-agent Stylesheets๋ฅผ ์์ ํ ์ ์์ง๋ง ๋๋ฏ ๊ฒฝ์ฐ์ด๊ณ , ๊ถ์ฅํ์ง ์์ต๋๋ค.
Author Stylesheets(์์ฑ์ ์คํ์ผ์ํธ)
๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ ํ์ ์คํ์ผ์ํธ๋ก, ์น ๊ฐ๋ฐ์๊ฐ ์์ฑํ ์คํ์ผ์ ๋๋ค.
์์) inline ์คํ์ผ, <style> ํ๊ทธ๋ <link> ํ๊ทธ๋ฅผ ํตํด ํ์ด์ง์ ์์ฑํ๋ ์คํ์ผ์ํธ
User Stylesheets(์ฌ์ฉ์ ์คํ์ผ์ํธ)
๋๋ถ๋ถ์ ๋ธ๋ผ์ฐ์ ์์ ์น ์ฌ์ดํธ ์ฌ์ฉ์๊ฐ ์ํ๋ ๋๋ก ํ๊ฒฝ์ ๋ง์ถคํํ๋๋ก ์ค๊ณ๋ ์ฌ์ฉ์ ์ ์ ์ฌ์ฉ์ ์คํ์ผ์ํธ์ ๋๋ค.
๋ง์ด ์ด๋ ต์ง๋ง ๊ฐ๋จํ๊ฒ ๋งํ๋ฉด ์น ์ฌ์ดํธ ๋ด์์ ์ ๊ณตํ๋ ์คํ์ผ์ํธ๋ฅผ ๋งํฉ๋๋ค.
Why You Should Use a User Style Sheet
Style sheets allow you to control how pages that you visit look. They fix usability issues and can help deal with elements that you might find annoying.
www.thoughtco.com
์ฐ์ ์์
์์์ ์๊ฐํ 3๊ฐ์ง ์คํ์ผ์ํธ์ ๋๋ถ์ด ์์ฑ๋ ์ถ์ฒ์ ๋ฐ๋ผ(ํน์ !important ์ฌ์ฉ์ ๋ฐ๋ผ) ์ฐ์ ์์๋ฅผ ๋์ดํ๋ฉด ๋ค์ ํ์ ๊ฐ์ต๋๋ค.

์์์ ์๋๋ก ๊ฐ ์๋ก ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ฉฐ, !important๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค๋ฅธ ๊ณณ์์ ์์ฑํ ๊ณณ๋ณด๋ค ์ฐ์ ์์๋ฅผ ๊ฐ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
(์ฌ๊ธฐ์๋์จ CSS @keyframe animations์ ์ ๋๋ฉ์ด์ ์ ๋ถ์ฌ๋ ์์ฑ ๊ฐ, CSS transitions์ transtions ์์ฑ์ ์ด์ฉํ์ฌ ๋ถ์ฌํ ์์ฑ ๊ฐ์ ๋งํฉ๋๋ค. )
๐ Specificity(๋ช ์๋)
Specificity (๋ช ์๋)์ด๋ ๊ด๋ จ์ฑ์ด ๊ฐ์ฅ ๋์ CSS ์คํ์ผ์ ๊ฒฐ์ ํ๊ธฐ ์ํด ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ๊ฒฐ๊ณผ์ ์ผ๋ก ์์์ ์ ์ฉํ ์์ฑ ๊ฐ์ ๊ฒฐ์ ํฉ๋๋ค.
Specificity ๊ณ์ฐ ๋ฐฉ์
์์(์์ฌ ์์)์ ์ผ์นํ๋ ์ ํ์ ๋ด ๊ฐ ๊ฐ์ค์น ์นดํ ๊ณ ๋ฆฌ์ ์ ํ์ ์์ ๋ฐ๋ผ ๊ฒฐ์ ๋ฉ๋๋ค.
๋์ผํ ์์์ ๋ํด ์๋ก ๋ค๋ฅธ ์์ฑ ๊ฐ์ ์ ๊ณตํ๋ ๋ ๊ฐ ์ด์์ ์ ์ธ์ด ์๋ ๊ฒฝ์ฐ ์๊ณ ๋ฆฌ์ฆ ๊ฐ์ค์น๊ฐ ๊ฐ์ฅ ํฐ ์คํ์ผ ๋ธ๋ก์ ์ ์ธ ๊ฐ์ด ์คํ์ผ๋ก ์ ์ฉ๋ฉ๋๋ค.
์ ํ์ ๊ฐ์ค์น ์นดํ ๊ณ ๋ฆฌ
| 0(๋์) | 1 | 2 | 3 | 4(๋ฎ์) |
| inline ์คํ์ผ ์ ์ฉ | ID ์ ํ์(#example) | CLASS ์ ํ์(.myClass) | ํ์ ์ ํ์(p, a, ::before, ...) | no value(*, :where() ) |
(+, ≥, __ ์ ๊ฐ์ ์กฐํฉ์๋ ๊ฐ์ค์น ๊ณ์ฐ์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค)
& ์ค์ฒฉ ๊ฒฐํฉ์๋ ๊ฐ์ค์น์ ์ํฅ์ ์ฃผ์ง ์์ง๋ง, ์ ํ์์ ๋งค๊ฐ๋ณ์๋ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. (๊ฐ๊ฐ์ ๋ช ์๋ ๊ฐ์ค์น๋ ๋ช ์๋๊ฐ ๊ฐ์ฅ ๋์ ์ ํ์ ๋ชฉ๋ก์ ์ ํ์ ๋งค๊ฐ๋ณ์์์ ๊ฐ์ ธ์ต๋๋ค)
์์
์ดํ์ ์ค๋ช ํ ๋ด์ฉ์ด์ง๋ง, CSS ์คํ์ผ์ ์ฝ๋ ์์์ ์์์ ์๋๋ก overridingํ๋ ๋ฐฉ์์ผ๋ก ์์ฑ๋ฉ๋๋ค.
ํ์ง๋ง ์๋ ์์์์๋ ์์์ ์๊ด์์ด ์ฐ์ ์์์ ๋ฐ๋ผ ์ ์ฉ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
inline ์คํ์ผ์ ์ ์ฉํ๋ ๊ฒฝ์ฐ, ๋ค๋ฅธ ์ ํ์์ ๋นํด ์ฐ์ ์์๊ฐ ๋์ ์ฐ์ ์ ์ผ๋ก ์ ์ฉ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.myClass {
color: burlywood; /* 0 0 1 0 0 ํด๋น */
}
#example {
color: blueviolet; /* 0 1 0 0 0 ํด๋น */
}
p {
color: blue; /* 0 0 0 1 0 ํด๋น */
}
</style>
</head>
<body>
<!-- ์ด ์์ ์ฐ์ ์์ ๊ณ์ฐ: 1 1 1 1 0 -->
<p id="example" class="myClass" style="color:red;">CSS Cascading</p>
</body>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.myClass {
color: burlywood;
}
#example {
color: blueviolet;
}
p {
color: blue;
}
</style>
</head>
<body>
<!-- ์ด ์์ ์ฐ์ ์์ ๊ณ์ฐ: 0 1 1 1 0 -->
<p id="example" class="myClass">CSS Cascading</p>
</body>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
/* #example {
color: blueviolet;
} */
.myClass {
color: burlywood;
}
p {
color: blue;
}
</style>
</head>
<body>
<!-- ์ด ์์ ์ฐ์ ์์ ๊ณ์ฐ: 0 0 1 1 0 -->
<p id="example" class="myClass">CSS Cascading</p>
</body>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
/* #example {
color: blueviolet;
} */
/* .myClass {
color: burlywood;
} */
p {
color: blue;
}
</style>
</head>
<body>
<!-- ์ด ์์ ์ฐ์ ์์ ๊ณ์ฐ: 0 0 0 1 0 -->
<p id="example" class="myClass">CSS Cascading</p>
</body>
</html>

๐ Scoping Proximity(๋ฒ์ ์ ๊ทผ์ฑ)
์ฐ์ ์์๊ฐ ์๋ ์๋ณธ ๋ ์ด์ด์ ๋ ์ ํ์๊ฐ ๋์ผํ ๋ช ์๋๋ฅผ ๊ฐ๋ ๊ฒฝ์ฐ, DOM ๊ณ์ธต ๊ตฌ์กฐ์์ ๋ฒ์ ๋ฃจํธ๊น์ง์ ๊ณ์ธต ์๊ฐ ์ ์ ๋ฒ์ ์คํ์ผ์ด ์ ์ฉ๋ฉ๋๋ค.
Cascade Layers
โ๏ธ ์ด์ ์ ์ฌ์ฉ๋๋ layer ํ๊ทธ์ ๋ค๋ฅธ ๊ฐ๋ ์ ๋๋ค.โ๏ธ
Cascade Layers๋ CSS๋ฅผ ์ฌ๋ฌ ๋ ์ด์ด๋ก ๋ถํ ํ ์ ์๋ ๊ฐ๋ ์ ๋๋ค.
๋ํ ๋ ์ด์ด๋ณ ์ ์ฉ ์์๋ฅผ ์ ์ฉํ ์๊ณ , ์ ์ฉํ์ง ์์ผ๋ฉด ์ฝ๋์ ์์(์์ฑ์์)์ ์๊ฑฐํ์ฌ ๋ง์ง๋ง ๋ ์ด์ด๊ฐ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ต๋๋ค.
Cascade Layers๋ ๋ช ์๋์ ์์ฑ์์๋ณด๋ค ์ฐ์ ์์๊ฐ ๋ ๋์ผ๋ฉฐ, ์ด๋ ์ฐ์ ์์๊ฐ ๋ ๋์ Cascade Layer์ ์๋ค๋ฉด, ์ด๋ณด๋ค ๋ฎ์ ์ฐ์ ์์ Cascade Layer์ ๋ช ์๋์ ์์ฑ์์๋ ์ฒดํฌํ์ง ์๋๋ค๋ ์ ์์ ๊ฐ์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์์
<style>
@import unlayeredStyles.css;
@import AStyles.css layer(A);
@import moreUnlayeredStyles.css;
@import BStyles.css layer(B);
@import CStyles.css layer(C);
p {
color: red;
padding: 1em !important;
}
</style>
<p style="line-height: 1.6em; text-decoration: overline !important;">Hello</p>
์ ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฐ์ ์์๋ฅผ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.

๐ Order of appearance(์ฝ๋์ ์์)
๋ชจ๋ ์ฐ์ ์์๊ฐ ๊ฐ์ ๊ฒฝ์ฐ, ์ฝ๋ ์์์ ์์์ ๋ถํฐ ์๋๋ก ์ ์ฉ๋์ด, ๊ฐ์ฅ ๋ง์ง๋ง์ ์ ์ธ๋ ์คํ์ผ์ด ์ ์ฉ๋ฉ๋๋ค.
๐ ์ ๋ฆฌ
์์์ ์ฌ๋ฌ ์ฐ์ ์์๋ฅผ ์ค๋ช ํ๋๋ฐ, ์ด๋ฅผ ํ๋ก ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.

๐ ๊ณต๋ถํ๋ฉด์ ๋๋์
CSS๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ฉํ ์ฐ์ ์์๊ฐ ์ ํด์ ธ ์์ผ๋ฉฐ, ์ฌ์ฉํ ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์์งํ๊ณ ์์ง ์์ผ๋ฉด "์ด๊ฒ ์ ์ด๋ ๊ฒ ์ ์ฉ๋์ง..?"๋ผ๋ ๋ง์ด ์๋์ผ๋ก ๋์ต๋๋ค. ๋ํ ์ด์ ๊น์ง Cascade Layers๋ผ๋ ๊ฐ๋ ์ ๋ชจ๋ฅด๊ณ ์์ด ๋งค๋ฒ ์ฐ์ ์์๋ฅผ ์ค ๋, !important์ ์์, ๊ทธ๋ฆฌ๊ณ id ์ ํ์๋ฅผ ํตํด ์ฐ์ ์์๋ฅผ ๋๋ด๋๋ฐ, ์ด๋ฐ ๊ณผ์ ์์ ์์ฑ ์ฝ๋๊ฐ ๋ง์์ง๋ฉด ์ ์ฉ ์ฐ์ ์์๋ฅผ ๋ฐ์ง๊ธฐ ์ ์ ํด์ํ๋๋ฐ ์๊ฐ์ด ๋ง์ด ์์๋ฉ๋๋ค.
์ด๋ฒ ๊ธฐํ๋ฅผ ํตํด ์ฐ์ ์์๋ฅผ ์ ๋ฆฌํ๊ณ , Cascade Layers๋ผ๋ ๊ฐ๋ ์ ํตํด ๋ณด๋ค ๊น๋ํ ์ฝ๋ ์์ฑ์ ๋ค๊ฐ๊ฐ ๋๋์ ๋๋ค.
"CSS Cascading" ์ด๋ผ๋ ์ด๋ฆ์ ์ฒ์ ๋ค์์ ๋, "์ด๋ฐ๊ฒ ์์๋?"๋ผ๋ ์๊ฐ์ด ๋จผ์ ๋ค์๋๋ฐ, ๊ณต๋ถํ๋ฉด์ ์๊ณ ์๋ ๋ด์ฉ๋ค์ด ์ ๋ฆฌํ๋ ๋๋์ด๋ผ ๋์ ๋ถํ ๋ฐฉ์ ์ฒญ์ํ ๊ธฐ๋ถ์ ๋๋ค ๐
์ฐธ์กฐ : MDN - Introducing the CSS Cascade
Introducing the CSS Cascade - CSS: Cascading Style Sheets | MDN
The cascade is an algorithm that defines how user agents combine property values originating from different sources. The cascade defines the origin and layer that takes precedence when declarations in more than one origin, cascade layer, or @scope block se
developer.mozilla.org
ํ์ง: ๋คผํผ ์ด๋ฏธ์ง ์์ฑ AI
๋คผํผ
๋น์ ์ ์ฒซ AI ์์ด์ ํธ ๋คผํผ. AI ๊ฒ์๋ถํฐ ๋๋ง์ AI ์บ๋ฆญํฐ๊น์ง, AI์ ๋์๋ ๊ฐ๋ฅ์ฑ์ ํํํด ๋ณด์ธ์.
wrtn.ai
'๐ STUDY > CSS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [๊ฐ๋ ] CSS - Position ์์ฑ (0) | 2024.05.31 |
|---|