-
CSS์ ์ฐ์ ์์, CSS CascadingTECH 2023. 9. 4. 01:29
CSS๋ ์น ํ์ด์ง์ ๋์์ธ๊ณผ ๋ ์ด์์์ ์ ์ํ์ฌ ์ฌ์ฉ์๋ค์ ์๊ฐ์ ์ผ๋ก ์ฌ๋ก์ก์ ์ ์๋ ์น ๊ฐ๋ฐ์์๊ฒ ํ์์ ์ธ ์คํฌ์ ๋๋ค.
ํ์ง๋ง CSS๋ ๋จ์ํ ๋ฌธ๋ฒ ๋ค์ ์จ๊ฒจ์ง ๊ท์น๋ค๋ก ์ด๋ณด์๋ค์๊ฒ ์ด๋ ค์์ ์๊ฒจ ์ฃผ๊ธฐ๋ ํฉ๋๋ค. HTML/CSS๋ก ํธ๊ธฐ๋กญ๊ฒ ์ฝ๋ฉ ์ธ๊ณ์ ๋ฐ์ ๋ค์๋ค๊ฐ ์ง๋ ๊ฒ์ ๋จน๊ณ (๋ฐฑ์๋๋ก) ํ์ฃผํ๋ ์ฌ๋๋ค์ ์ฌ๋ฟ ๋ณด๊ธฐ๋ ํ์ต๋๋ค. ๐คฃ ์์ฃผ ์ฌํ ์ผ์ ๋๋ค.
"์ ์คํ์ผ์ด ์ ๋๋ก ์ ์ฉ๋์ง ์์๊น?"์ ๊ฐ์ ๊ณ ๋ฏผ์ ์บ์ค์บ์ด๋ฉ์ ์ํฅ์ผ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
์ด ํฌ์คํ ์์๋ ๋ฐ๋ก ๊ทธ CSS์ ์บ์ค์บ์ด๋ฉ ์์น์ ๋ํด ์ด์ผ๊ธฐํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
CSS์ Cascading์ด๋?
CSS๋ Cascading Style Sheets์ ์ฝ์๋ก, CSS์ ๋ค์ด๋ฐ์์๋ถํฐ ๋ น์ ์๋ ์บ์ค์บ์ด๋ฉ ๊ฐ๋ ์ ์คํ์ผ ๊ท์น์ด ๊ณ๋จ์์ผ๋ก ์ ์ฉ๋๋ ๋ฐฉ์์ ๋งํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ฌ๋ฌ ๊ฐ์ ์คํ์ผ ๊ท์น์ด ๊ฐ์ HTML ์์์ ์ ์ฉ๋ ์ ์๋๋ฐ, ์ด๋ ์ด๋ค ๊ท์น์ด ์ฐ์ ํ ์ง ๊ฒฐ์ ํด์ผ ํฉ๋๋ค.
์ด๊ฒ์ด ๋ฐ๋ก ์บ์ค์บ์ด๋ฉ์ ๊ฐ๋ ์ธ๋ฐ, ๊ท์น์ด ๋ ๊ตฌ์ฒด์ ์ผ์๋ก ์ฐ์ ์์๊ฐ ๋์ต๋๋ค.
MDN ๋ฌธ์์์๋ User Agent(์ฌ์ฉ์ ์์ด์ ํธ)๊ฐ ๋ค์ํ ์ถ์ฒ์์ ์ค๋ ์์ฑ ๊ฐ์ ์ด๋ป๊ฒ ๊ฒฐํฉํ๋์ง ์ ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๊ณ ๋งํ๊ณ ์์ต๋๋ค.
์ฌ๊ธฐ์ ์ ์ User Agent๊ฐ ๋ฌด์์ธ์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
User Agent๋?
User Agent๋ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ์น ๋ธ๋ผ์ฐ์ ์์ ์จ๊ฒจ์ง ์ค์ํ ๊ธฐ๋ฅ ์ค ํ๋๋ก ์ฌ์ฉ์์ OS, ๋ฒ์ , ์น ๋ธ๋ผ์ฐ์ , ๋๋ฐ์ด์ค ๋ฑ์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ต๋๋ค.
๊ณผ๊ฑฐ์๋ ์น ๋ธ๋ผ์ฐ์ ๋ง๋ค ์์ฒด ์์ง์ ์ฌ์ฉํ๋๋ฐ ๋ธ๋ผ์ฐ์ ๋ง๋ค ๊ธฐ๋ฅ์ ๋ํ ์ง์ ๋ฒ์, ํธํ์ฑ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ด๋ค ๋ธ๋ผ์ฐ์ ์์ ์ด๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋์ง๋ฅผ ๊ธฐ๋กํ์ต๋๋ค. ์ฌ๋ฌ ์น ๋ธ๋ผ์ฐ์ ์์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค๊ณ ํฉ๋๋ค.
๊ทธ๋ฌ๋ ์์ฆ์์ ๋๋ถ๋ถ์ ๋ธ๋ผ์ฐ์ ๋ค์ด ํฌ๋กฌ ๊ธฐ๋ฐ์ ๋ธ๋งํฌ ์์ง์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ด ํ์์ฑ์ด ์ ์ด์ก๊ณ ์ ์ํ ๊ธฐ๊ธฐ ์ ๋ณด๋ OS๋ฅผ ๊ตฌ๋ถํ๋ ๋ฐ์ ๋ง์ด ์ฌ์ฉํ๋ค๊ณ ํฉ๋๋ค.
CSS ์คํ์ผ์ ์ฌ๋ฌ ๊ณณ์์ ์ค๋ณต์ผ๋ก ์์ฑ๋ ์ ์์ต๋๋ค.
์ด๋, ์ค์ ๋ก ์ด๋ค ์คํ์ผ์ด ์ ์ฉ๋๋์ง๋ ํด๋น ์คํ์ผ์ ์ฐ์ ์์์ ๋ฐ๋ผ ๊ฒฐ์ ๋ฉ๋๋ค.
์ด๋ค ์์๋ค์ ์ํด ์ฐ์ ์์๊ฐ ๊ฒฐ์ ๋๋์ง ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
โ Origin ์ฐ์ ์์
Origin์ ์ด๋ค ์์ฒ์ผ๋ก๋ถํฐ ์ ์ฉ๋์๋์ง, CSS ๊ท์น์ด ์ด๋์ ์๋์ง๋ฅผ ๋งํฉ๋๋ค. CSS๋ฅผ ์ ๊ณตํ๋ ๊ณณ ์ ๋๋ก ์ดํดํ ์ ์์ต๋๋ค.
CSS์ Origin์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. User Agent Stylesheet
• ์ฌ์ฉ์ ์์ด์ ํธ๋ ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ด์ฅ๋ ์คํ์ผ์ํธ๋ฅผ ๋งํฉ๋๋ค.
• ๋ธ๋ผ์ฐ์ ๋ง๋ค ๊ธฐ๋ณธ ์คํ์ผ์ด ์กฐ๊ธ์ฉ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ํผ๋ธ๋ฆฌ์ฑ ํ ๋
normalize.css
๋reset.css
์ฒ๋ผ ๊ณตํต ์์ฑ์ ์ฌ์ ์ํ๋ css๋ฅผ ์์ฑํ๊ณค ํฉ๋๋ค.•
<h1>
ํ๊ทธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํฌ๊ณ ๊ตต๊ฒ ํ์๋๋ ๊ฒ์ ์์๋ก ๋ค ์ ์์ต๋๋ค.2. Author Stylesheet
• ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ ํ์ CSS๋ก ์น ๊ฐ๋ฐ์๊ฐ ์์ฑํ ์คํ์ผ์ํธ๋ฅผ ๋งํฉ๋๋ค.
• link๋ก import ํด์ ์ฌ์ฉํ๊ฑฐ๋,
<style>
๋ธ๋ก์์ ์ฌ์ฉํ๊ฑฐ๋, ์ธ๋ผ์ธ ์คํ์ผ๋ก ์์ฑ๋ ์คํ์ผ์ํธ๋ฅผ ๋ชจ๋ ํฌํจํฉ๋๋ค.• ๊ฐ๋ฐ์๊ฐ ์น ์ฌ์ดํธ์์
<h1>
ํ๊ทธ์color: blue
์์ฑ์ ์ง์ ํด ๋์๋ค๋ฉด ํด๋น ์ฌ์ดํธ์์<h1>
ํ๊ทธ์ ์์์ ํ๋์์ผ๋ก ํ์๋ฉ๋๋ค.3. User Stylesheet
• ๊ฐ๋ฐ์๊ฐ ์๋ ์น ์ฌ์ดํธ ์ฌ์ฉ์๊ฐ ์ค์ ํ๋ ์คํ์ผ์ํธ๋ฅผ ๋งํฉ๋๋ค.
• ์ผ๋ถ ์ฌ์ฉ์๋ ์๊ฐ์ ๋ถํธ์ ์ค์ด๊ธฐ ์ํ ๋ชฉ์ ๋ฑ์ผ๋ก ์์ ๋ง์ ์คํ์ผ์ํธ๋ฅผ ๋ธ๋ผ์ฐ์ ์ ์ ์ฉํ ์ ์์ต๋๋ค.
Origin์ ๋ฐ๋ฅธ ์ผ๋ฐ์ ์ธ CSS ์ฐ์ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Author Stylesheet > User Stylesheet > User Agent Stylesheet
๋ง์ผ
!important
๊ฐ ํฌํจ๋ ์์ฑ์ด๋ผ๋ฉด ์ฐ์ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.User Agent Stylesheet > User Stylesheet > Author Stylesheet
์น ๋ธ๋ผ์ฐ์ ์ ๊ฐ๋ฐ์ ๋๊ตฌ์์ Elements > Styles ํญ์ ์ผ๋ฉด ํ์ฌ ํ์ด์ง์ ์ ์ฉ๋ ์คํ์ผ๋ค์ ๋ณผ ์ ์๋๋ฐ,
์ฌ๊ธฐ์ User Agent Stylesheet์ Author Stylesheet๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
โ Author Style ์ฐ์ ์์
Author Stylesheet์์ ์์ฑํ ์ ์๋ ์ข ๋ฅ๋ ์ธ๋ผ์ธ ์คํ์ผ(inline style), ๋ด๋ถ ์คํ์ผ(internal/embedded style), ์ธ๋ถ ์คํ์ผ(external style) ์ธ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
1. ์ธ๋ผ์ธ ์คํ์ผ
HTML ์์ ๋ด์ ์ง์ ์ ์ฉ๋ ์คํ์ผ์ ๋งํฉ๋๋ค.
<div style="color: red;">This is an inline style.</div>
2. ๋ด๋ถ ์คํ์ผ
HTML ๋ฌธ์ ๋ด
<head>
์น์ ์<style>
ํ๊ทธ ๋ด์ ์ ์๋ ์คํ์ผ์ ๋งํฉ๋๋ค.<style> .example { color: blue; } </style>
3. ์ธ๋ถ ์คํ์ผ
์ธ๋ถ CSS ํ์ผ์ ์ ์๋ ์คํ์ผ์ ๋งํฉ๋๋ค.
HTML ๋ฌธ์์์๋
<link>
ํ๊ทธ๋ฅผ ์ฌ์ฉํด ์ธ๋ถ ์คํ์ผ์ํธ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.<link rel="stylesheet" href="styles.css">
Author Style ์ ์ฉ ๋ฐฉ์์์์ ์ฐ์ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ธ๋ผ์ธ ์คํ์ผ > ๋ด๋ถ ์คํ์ผ > ์ธ๋ถ ์คํ์ผ
โ Specificity ์ฐ์ ์์
CSS ์ ํ์์ ํน์ ์ฑ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค. Specificity์์ ๋ถ๋ฅ๋๋ ์นดํ ๊ณ ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ดํธ ์์ ์์ฑ๋ ์ ํ์๋ ์์์ ๋๋ค.
1. ID ์นดํ ๊ณ ๋ฆฌ
• id ์ ํ์ (
#id
)2. CLASS ์นดํ ๊ณ ๋ฆฌ
• class ์ ํ์ (
.class
)• ์์ฑ ์ ํ์ (
[type="text"]
,[title|="first"]
)• ์์ฌ ํด๋์ค (
:hover
,checked
,:nth-child(2n)
)3. TYPE ์นดํ ๊ณ ๋ฆฌ
• HTML ์์ ์ ํ์ (
p
,h1
,span
)• ์์ฌ ์์ (
::before
,::placeholder
)4. ์ฐ์ ์์์ ์ํฅ์ ๋ฏธ์น์ง ์๋ ๊ฒ๋ค
๋ค์ ์ ํ์๋ค์ ์คํ์ผ์ ์ ์ฉ๋์ง๋ง ์บ์ค์บ์ด๋ฉ ์ฐ์ ์์์๋ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
• ์ ์ฒด ์ ํ์(
*
)•
:where()
์์ฌ ํด๋์คSpecificity ์ฐ์ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ID ์นดํ ๊ณ ๋ฆฌ > CLASS ์นดํ ๊ณ ๋ฆฌ > TYPE ์นดํ ๊ณ ๋ฆฌ
๋ค์๊ณผ ๊ฐ์ ์นดํ ๊ณ ๋ฆฌ์ ์๊ฑฐํ์ฌ ์ต์ข ์ฐ์ ์์๋ ์นดํ ๊ณ ๋ฆฌ๋ณ ์ ์๊ฐ ๊ฒฐํฉํ์ฌ ๊ฒฐ์ ๋ฉ๋๋ค.
MDN ๋ฌธ์์ ์ค๋ช ์์๋
0-0-0
์ ๊ฐ์ ํ์์ผ๋ก ์ ์๋ฅผ ๋ถ์ฌํฉ๋๋ค.#id { color: blue; /* category 1. 1-0-0 */ } .class { color: yellow; /* category 2. 0-1-0 */ } p { color: red; /* category 3. 0-0-1 */ } * { color: gray; /* category 4. 0-0-0 */ }
See the Pen css cascading example 1 by RIMI (@RIMI-the-flexboxer) on CodePen.
CSS Specificity๋ฅผ ๋ฐ๋ค ์ํ๊ณ๋ก ๋ํ๋ธ ๋ค์ ๊ทธ๋ฆผ๋ ์ดํดํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๊ฒฐ๋ก
CSS๋ ์คํ์ผ์ ์ ์ฉํ๋ ๊ณผ์ ์์ ์บ์ค์บ์ด๋ฉ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ์คํ์ผ ๊ท์น์ ์ฐ์ ์์๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
์ด ๊ณผ์ ์์ Origin, Specification, ์คํ์ผ ์ ์ฉ ๋ฐฉ๋ฒ ๋ฑ์ ๊ณ ๋ คํ์ฌ ์ฐ์ ์์๋ฅผ ํ๋จํฉ๋๋ค.
์บ์ค์บ์ด๋ฉ์ ์ ์ฒด ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์คํ์ผ ๊ท์น๊ณผ ์์๊ฐ ๋งค์น๋์๋์ง๋ฅผ ๊ฒ์ฌํ์ฌ ํด๋น ์์์ ๊ด๋ จ๋ ์คํ์ผ ์์ฑ๋ง ์ ๋ณํฉ๋๋ค.
- Origin ๋ฐ
!important
์์ฑ์ ๋ฐ๋ฅธ ์ฐ์ ์์- User Agent vs. Author vs. User stylesheet ๊ฐ ์ฐ์ ์์๋ฅผ ํ๋ณํฉ๋๋ค.
!important
์์ฑ ์ฌ์ฉ ์ฌ๋ถ์ ๋ฐ๋ผ ์ฐ์ ์์๊ฐ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค.
- Specification ์ฐ์ ์์
- ID ์นดํ ๊ณ ๋ฆฌ > CLASS ์นดํ ๊ณ ๋ฆฌ > TYPE ์นดํ ๊ณ ๋ฆฌ ์์ผ๋ก ์ฐ์ ์์๊ฐ ์ ํด์ง๋๋ค.
- ์์ฑ ์์
- ๊ฐ์ ์์์ ๋์ผํ ์์ฑ์ด ์ ์ธ๋์์ ๊ฒฝ์ฐ, ๋์ค์ ์ ์ธ๋ ์คํ์ผ์ด ์ ์ฉ๋ฉ๋๋ค.
.class { font-size: 12px; font-weight: 700; font-family: Pretendard; color: blue; color: red; /* ๋์ค์ ์์ฑ๋ red color๊ฐ ์ ์ฉ๋จ */ }
โ
!important
์์ฑ!important
๊ฐ ์ ์ฉ๋ ์คํ์ผ์ ๊ฐ์ฅ ์ฐ์ ์์๊ฐ ๋์ต๋๋ค.๊ทธ๋ฌ๋
!important
๊ฐ ๋จ๋ฐ๋ ์ฝ๋๋ ๋๋ฒ๊น ์ ๋ณต์กํ๊ฒ ๋ง๋ค์ด ์ฝ๋์ ์ ์ง๋ณด์๋ฅผ ์ด๋ ต๊ฒ ๋ง๋ค๊ธฐ ๋๋ฌธ์ ์ง์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.๋์ CSS ์บ์ค์บ์ด๋ฉ์ ๊ณ ๋ คํ์ฌ ์์ฑํด ๋ด ์๋ค.
<p class="contents" id="hello">hello</p> <p class="contents"> this is css</p> <p class="contents">my awesome css</p> <p class="contents">lets go</p>
#hello { color: blue; font-size: 50px; } p.contents { color: gray; font-size: 20px; background-color: pink; } .highlight { background-color: yellow; }
See the Pen css cascading example 2 by RIMI (@RIMI-the-flexboxer) on CodePen.
๋ค์๊ณผ ๊ฐ์ ์์์์ lets go ๋ถ๋ถ์ ๋ ธ๋์ ํ์ด๋ผ์ดํธ๋ฅผ ์ฃผ๊ธฐ ์ํด์ highlight ํด๋์ค๋ฅผ ์ถ๊ฐํ๊ณ
<p class="contents highlight">lets go</p>
๋ก ์ฝ๋๋ฅผ ์์ ํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ํ๋ CSS๊ฐ ์ ์ฉ๋์ง ์์ต๋๋ค.์คํ์ผ์
background-color: yellow !important;
๋ก ์์ ํ๋ค๋ฉด ์ฐ์ ์์๊ฐ ์ ์ผ ๋์์ง๊ธฐ ๋๋ฌธ์ ์ํ๋ ์คํ์ผ์ ์ฝ๊ฒ ์ ์ฉ์ํฌ ์ ์๊ฒ ์ฃ .ํ์ง๋ง
!important
์ ์ฉ ์ ์คํ์ผ์ ์ดํด๋ณด๋ฉด p.contents์ .highlight ์คํ์ผ ์ฐ์ ์์๋ 0-1-1๊ณผ 0-1-0์ผ๋ก p.contents์ ์ฐ์ ์์๊ฐ ๋ ๋๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.์ด๋ฅผ ๊ฐ์ํ์ฌ .highlight๋ฅผ .contents.highlight๋ก ์์ ํ์ฌ ์ฐ์ ์์๋ฅผ ๋์ธ๋ค๋ ์ง, ์์ฑ ์์๋ฅผ ๊ณ ๋ คํ์ฌ p.highlight๋ก ์์ ํ๋ค๋ฉด ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
๊ฐ๋จํ ์์๋ฅผ ํตํด ์ค๋ช ํ์ง๋ง CSS ์บ์ค์บ์ด๋ฉ ๊ท์น์ ์ ์ดํดํ๊ณ ํ์ฉํ๋ฉด
!important
์ฌ์ฉ์ ์ต์ํํ๋ฉด์๋ ์ ์ง๋ณด์์ฑ์ ๊ณ ๋ คํ ์คํ์ผ๋ง์ ์์ฑํ ์ ์์ ๊ฒ์ ๋๋ค.์ฐธ๊ณ
CSS: Cascading Style Sheets | MDN
Introducing the CSS Cascade - CSS: Cascading Style Sheets | MDN
Specificity - CSS: Cascading Style Sheets | MDN
์น ๋ธ๋ผ์ฐ์ ์ ์จ๊ฒจ์ง ์ค์ ๊ธฐ๋ฅ, ์ฌ์ฉ์ ์์ด์ ํธ(User Agent ...
'TECH' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React์์ TMap API ์ฌ์ฉํ๊ธฐ (1) 2023.12.30 ์ ์ ์์ ์ ์ src์์ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ข์๊น? (2) 2023.12.16 ๋ชจ๋ ธ๋ ํฌ ๋์ ํ๊ธฐ(Feat. Nx) (4) 2023.08.27 ๋ฆฌ์กํธ ์ฟผ๋ฆฌ์ StaleTime๊ณผ CacheTime (0) 2023.01.24 [React] useMemo์ useCallback๋ก ๋ฆฌ์กํธ ๋ ๋๋ง ์ฑ๋ฅ ์ต์ ํํ๊ธฐ(Feat. React.memo) (0) 2022.04.09