CSS ์ค์ฒฉ์ ํ์ ํ์ฉํ์ฌ ์ ๋๋๊ณ ๊ฐ๋ ์ฑ ๋์ ์คํ์ผ์ํธ๋ฅผ ๋ง๋ค๊ณ ๋ช ์๋๋ฅผ ์ ๋ฐํ๊ฒ ์ ์ดํ์ธ์. ์ต์ CSS ๊ฐ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ํ ๊ธ๋ก๋ฒ ๊ฐ์ด๋์ ๋๋ค.
CSS ์ค์ฒฉ ๋ง์คํฐํ๊ธฐ: ์ฝ๋ ๊ตฌ์กฐํ์ ๋ช ์๋ ์ฌ์ธต ๋ถ์
์น ๊ฐ๋ฐ์ ์ธ๊ณ๋ ๋์์์ด ์งํํ๋ฉฐ, ์ฐ๋ฆฌ์ ์์ ์ ๋ ํจ์จ์ ์ผ๋ก ๋ง๋ค๊ณ ์ฝ๋๋ฅผ ๋ ๊ฒฌ๊ณ ํ๊ฒ ๋ง๋๋ ์๋ก์ด ๋๊ตฌ, ๊ธฐ์ , ์ธ์ด ๊ธฐ๋ฅ๋ค์ด ๋ฑ์ฅํ๊ณ ์์ต๋๋ค. CSS ์ฌ์์ ๊ฐ์ฅ ๊ธฐ๋๋๊ณ ํ์ ์ ์ธ ์ถ๊ฐ ๊ธฐ๋ฅ ์ค ํ๋๋ CSS ์ค์ฒฉ ๋ชจ๋(CSS Nesting Module)์ ๋๋ค. ์๋ ๋์ ๊ฐ๋ฐ์๋ค์ Sass, Less, Stylus์ ๊ฐ์ ์ ์ฒ๋ฆฌ๊ธฐ(preprocessor)์ ์์กดํ์ฌ ์ค์ฒฉ์ ์ด์ ์ ๋๋ ค์์ง๋ง, ์ด์ ์ด ๊ฐ๋ ฅํ ๊ตฌ์กฐํ ๊ธฐ๋ฅ์ด CSS์์ ๋ค์ดํฐ๋ธ๋ก ์ ๊ณต๋ฉ๋๋ค. ์ด ์ข ํฉ ๊ฐ์ด๋์์๋ CSS ์ค์ฒฉ ๊ท์น์ ๋ณต์ก์ฑ์ ๊น์ด ํ๊ณ ๋ค์ด, ์คํ์ผ์ํธ ๊ตฌ์กฐํ, ๊ฐ๋ ์ฑ, ๊ทธ๋ฆฌ๊ณ ๊ฒฐ์ ์ ์ผ๋ก CSS ๋ช ์๋์ ์ด๋ป๊ฒ ์ํธ ์์ฉํ๋์ง์ ๋ํ ์ฌ๋ ์๋ ์ํฅ์ ํ๊ตฌํ ๊ฒ์ ๋๋ค.
๋น์ ์ด ์๋ จ๋ ํ๋ก ํธ์๋ ์์ง๋์ด์ด๋ ์น ๊ฐ๋ฐ ์ฌ์ ์ ์ด์ ๋ง ์์ํ๋ , ๋ค์ดํฐ๋ธ CSS ์ค์ฒฉ์ ์ดํดํ๋ ๊ฒ์ ์ ์ง๋ณด์ ๊ฐ๋ฅํ๊ณ ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ ํ๋์ ์ธ ์คํ์ผ์ํธ๋ฅผ ์์ฑํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ ๊ตฌ๋ฌธ, ์ค์ ์ ์ฉ ์ฌ๋ก, ๋ชจ๋ฒ ์ฌ๋ก, ๊ทธ๋ฆฌ๊ณ ๋ค์ํ ๊ธ๋ก๋ฒ ๊ฐ๋ฐ ํ๊ฒฝ์์์ ์ฑํ ๊ณ ๋ ค ์ฌํญ์ ์ดํด๋ณผ ๊ฒ์ ๋๋ค.
๋ค์ดํฐ๋ธ CSS ์ค์ฒฉ์ ์ฌ๋ช : ํจ๋ฌ๋ค์์ ์ ํ
CSS ์ค์ฒฉ์ด๋ ๋ฌด์์ธ๊ฐ?
ํต์ฌ์ ์ผ๋ก CSS ์ค์ฒฉ์ ํ๋์ ์คํ์ผ ๊ท์น ์์ ๋ค๋ฅธ ์คํ์ผ ๊ท์น์ ์์ฑํ ์ ์๊ฒ ํด์ฃผ๋ฉฐ, ๋ด๋ถ ๊ท์น์ ์ธ๋ถ ๊ท์น ์ ํ์์ ์์์ด๊ฑฐ๋ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๊ด๋ จ๋ ์์์ ์ ์ฉ๋ฉ๋๋ค. ์ด๋ HTML์ ๊ณ์ธต์ ๊ตฌ์กฐ๋ฅผ ๋ฐ์ํ์ฌ CSS๋ฅผ ๋ ์ง๊ด์ ์ด๊ณ ๋ฐ๋ผ๊ฐ๊ธฐ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
์ ํต์ ์ผ๋ก, ์นด๋์ ๊ฐ์ ํน์ ์ปดํฌ๋ํธ ๋ด์ ์์ ์คํ์ผ์ ์ง์ ํ๋ ค๋ฉด ๊ฐ ๋ถ๋ถ์ ๋ํด ๋ณ๋์ ๊ท์น์ ์์ฑํด์ผ ํ์ต๋๋ค:
.card {
border: 1px solid #eee;
padding: 1rem;
}
.card h3 {
color: #333;
margin-bottom: 0.5rem;
}
.card p {
font-size: 0.9em;
}
.card a {
color: #007bff;
text-decoration: none;
}
CSS ์ค์ฒฉ์ ์ฌ์ฉํ๋ฉด ์ด๊ฒ์ด ํจ์ฌ ๋ ๊ฐ๊ฒฐํ๊ณ ๊ฐ๋ ์ฑ์ด ์ข์์ง๋๋ค:
.card {
border: 1px solid #eee;
padding: 1rem;
h3 {
color: #333;
margin-bottom: 0.5rem;
}
p {
font-size: 0.9em;
a {
color: #007bff;
text-decoration: none;
}
}
}
์ฆ๊ฐ์ ์ธ ์ด์ ์ ๋ช ํํฉ๋๋ค: ๋ถ๋ชจ ์ ํ์์ ๋ฐ๋ณต ๊ฐ์, ๋ ผ๋ฆฌ์ ๊ทธ๋ฃนํ๋ก ์ธํ ๊ฐ๋ ์ฑ ํฅ์, ๊ทธ๋ฆฌ๊ณ ๋ ์ปดํฌ๋ํธ ์งํฅ์ ์ธ ์คํ์ผ๋ง ์ ๊ทผ ๋ฐฉ์์ ๋๋ค.
"์" ์ฌ์ฉํ๋๊ฐ: ๊ธ๋ก๋ฒ ๊ฐ๋ฐ์ ์ํ ์ค์ฒฉ์ ์ด์
๋ค์ดํฐ๋ธ CSS ์ค์ฒฉ์ ๋์ ์ ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์๊ฒ ๋ฐํฅ์ ์ผ์ผํค๋ ์ฌ๋ฌ ์ด์ ์ ์ ๊ณตํฉ๋๋ค:
- ๊ฐ๋ ์ฑ ๋ฐ ์ ์ง๋ณด์์ฑ ํฅ์: ์คํ์ผ์ด HTML ๊ตฌ์กฐ๋ฅผ ๋ฐ์ํ์ฌ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ทธ๋ฃนํ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ค์ ๋ชจ๊ตญ์ด๋ ๋ฌธํ์ ๋ฐฐ๊ฒฝ์ ๊ด๊ณ์์ด ์ด๋ค ์คํ์ผ์ด ์ปดํฌ๋ํธ ๋ด ์ด๋ค ์์์ ์ ์ฉ๋๋์ง ๋น ๋ฅด๊ฒ ์ดํดํ ์ ์์ต๋๋ค. ์คํ์ผ ๋๋ฒ๊น ๋ฐ ์์ ์๊ฐ์ด ๋จ์ถ๋ฉ๋๋ค.
- ๋ฐ๋ณต ๊ฐ์ (DRY ์์น): ์ค์ฒฉ์ ๋ถ๋ชจ ์ ํ์๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์ ๋ ฅํ ํ์๋ฅผ ์์ "๋ฐ๋ณตํ์ง ๋ง๋ผ"(Don't Repeat Yourself, DRY) ์์น์ ์ค์ํฉ๋๋ค. ์ด๋ ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ์ ์ ๋ ์๊ณ ๊นจ๋ํ ์ฝ๋๋ฒ ์ด์ค๋ก ์ด์ด์ง๋๋ค.
- ๊ตฌ์กฐํ ๊ฐ์ : CSS์ ๋ํ ๋ ๋ชจ๋ํ๋๊ณ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ์ ์ ๊ทผ์ ์ฉ์ดํ๊ฒ ํฉ๋๋ค. ๋ด๋น๊ฒ์ด์ ๋ฐ, ๋ชจ๋ฌ ๋ํ ์์ ๋๋ ์ ํ ๋ชฉ๋ก๊ณผ ๊ฐ์ ํน์ UI ์ปดํฌ๋ํธ์ ๊ด๋ จ๋ ์คํ์ผ์ ๋จ์ผ ์ค์ฒฉ ๋ธ๋ก ๋ด์ ์์ ํ ํฌํจํ ์ ์์ต๋๋ค. ์ด๋ ๋ค๋ฅธ ํ๊ณผ ์ง์ญ์ ๊ฑธ์น ๋๊ท๋ชจ ํ์ ํ๋ก์ ํธ์์ ํนํ ์ ์ฉํฉ๋๋ค.
- ๋ ๋น ๋ฅธ ๊ฐ๋ฐ ์ฃผ๊ธฐ: ์คํ์ผ์ํธ๋ฅผ ๋ ์ฝ๊ฒ ์์ฑํ๊ณ , ์ฝ๊ณ , ๊ด๋ฆฌํ ์ ์๊ฒ ํจ์ผ๋ก์จ ์ค์ฒฉ์ ๋ ๋น ๋ฅธ ๊ฐ๋ฐ ์ฃผ๊ธฐ์ ๊ธฐ์ฌํ ์ ์์ต๋๋ค. ๊ฐ๋ฐ์๋ค์ ๋ณต์กํ CSS ํ์ผ์ ํ์ํ๋ ๋ฐ ์๊ฐ์ ๋ ๋ค์ด๊ณ ๊ธฐ๋ฅ ๊ตฌ์ถ์ ๋ ๋ง์ ์๊ฐ์ ํ ์ ํ ์ ์์ต๋๋ค.
- ์ ์ฒ๋ฆฌ๊ธฐ์์ ๊ฐ๊ต ์ญํ : Sass์ ๊ฐ์ ์ ์ฒ๋ฆฌ๊ธฐ์์ ์ด๋ฏธ ์ค์ฒฉ์ ์ต์ํ ์ ์ธ๊ณ ๋๋ค์์ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ค์๊ฒ ์ด ๋ค์ดํฐ๋ธ ๊ธฐ๋ฅ์ ๋ ๋ถ๋๋ฌ์ด ์ ํ์ ์ ๊ณตํ๋ฉฐ ์ผ๋ถ ํ๋ก์ ํธ์์๋ ๋น๋ ๋๊ตฌ ์ฒด์ธ์ ๋ณต์ก์ฑ์ ์ ์ฌ์ ์ผ๋ก ์ค์ผ ์ ์์ต๋๋ค.
์ญ์ฌ์ ๋งฅ๋ฝ: ์ ์ฒ๋ฆฌ๊ธฐ ๋ ๋ค์ดํฐ๋ธ CSS ์ค์ฒฉ
10๋ ์ด์ ๋์ CSS ์ ์ฒ๋ฆฌ๊ธฐ๋ ๋ณ์, ๋ฏน์ค์ธ, ํจ์, ๊ทธ๋ฆฌ๊ณ ๊ฒฐ์ ์ ์ผ๋ก ์ค์ฒฉ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํจ์ผ๋ก์จ ๋ค์ดํฐ๋ธ CSS์ ๊ณต๋ฐฑ์ ๋ฉ์์์ต๋๋ค. Sass(Syntactically Awesome Style Sheets)๋ ๋น ๋ฅด๊ฒ ์ ๊ณ ํ์ค์ด ๋์ด ๊ฐ๋ฐ์๋ค์ด ๋ ๋์ ์ด๊ณ ๊ตฌ์กฐํ๋ CSS๋ฅผ ์์ฑํ ์ ์๊ฒ ํ์ต๋๋ค. Less์ Stylus๋ ์ ์ฌํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ต๋๋ค.
์ ์ฒ๋ฆฌ๊ธฐ๋ ๋งค์ฐ ์ ์ฉํ์ง๋ง, ์ ์ฒ๋ฆฌ๊ธฐ ์ฝ๋๋ฅผ ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉํ๊ธฐ ์ ์ ํ์ค CSS๋ก ์ปดํ์ผํด์ผ ํ๋ ์ถ๊ฐ ๋น๋ ๋จ๊ณ๋ฅผ ๋์ ํฉ๋๋ค. ๋ค์ดํฐ๋ธ CSS ์ค์ฒฉ์ ์ด ๋จ๊ณ๋ฅผ ์ ๊ฑฐํ์ฌ ๋ธ๋ผ์ฐ์ ๊ฐ ์ค์ฒฉ๋ ๊ท์น์ ์ง์ ํด์ํ ์ ์๊ฒ ํฉ๋๋ค. ์ด๋ ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํ๊ณ ๋ณต์กํ ๋๊ตฌ์ ๋ํ ์์กด๋๋ฅผ ์ค์ผ ์ ์์ด, ๋ ๊ฐ๋จํ ์ค์ ์ ํ๋ก์ ํธ๋ ์์ CSS ์ ๊ทผ ๋ฐฉ์์ ๋ชฉํ๋ก ํ๋ ํ๋ก์ ํธ์ ๋ ์ฉ์ดํฉ๋๋ค.
๋ค์ดํฐ๋ธ CSS ์ค์ฒฉ์ด ์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์์ ํ ๋์ฒดํ๋ ๊ฒ์ ์๋๋ผ๋ ์ ์ ์ ์ํด์ผ ํฉ๋๋ค. ์ ์ฒ๋ฆฌ๊ธฐ๋ ์ฌ์ ํ ๋ค์ดํฐ๋ธ CSS์์๋ ์์ง ์ฌ์ฉํ ์ ์๋ ๋ ๋์ ๋ฒ์์ ๊ธฐ๋ฅ(๋ฃจํ, ์กฐ๊ฑด๋ฌธ, ๊ณ ๊ธ ํจ์ ๋ฑ)์ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ง์ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก์์, ํนํ ๋ธ๋ผ์ฐ์ ์ง์์ด ํ๋๋จ์ ๋ฐ๋ผ ๋ค์ดํฐ๋ธ ์ค์ฒฉ์ ๋งค๋ ฅ์ ์ธ ๋์์ ์ ๊ณตํฉ๋๋ค.
์ค์ CSS ์ค์ฒฉ ๊ท์น: ๊ตฌ๋ฌธ๊ณผ ์ฌ์ฉ๋ฒ
CSS ์ค์ฒฉ์ ๊ตฌ๋ฌธ์ ๊ธฐ์กด CSS ์ง์์ ๋ฐํ์ผ๋ก ์ง๊ด์ ์ผ๋ก ๋ง๋ค์ด์ก์ต๋๋ค. ํต์ฌ ๊ฐ๋ ์ ์ค์ฒฉ๋ ๊ท์น์ ์ ํ์๊ฐ ๋ถ๋ชจ ์ ํ์์ ์์์ ์ผ๋ก ๊ฒฐํฉ๋๋ค๋ ๊ฒ์ ๋๋ค. `&` ๊ธฐํธ๋ ๋ถ๋ชจ ์ ํ์๋ฅผ ๋ช ์์ ์ผ๋ก ์ฐธ์กฐํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
๊ธฐ๋ณธ ๊ตฌ๋ฌธ: ์์์ ๋ฐ ๋ช ์์ ์ค์ฒฉ
์์ ์ด๋ฆ, ํด๋์ค ๋๋ ID์ ๊ฐ์ ๊ฐ๋จํ ์ ํ์๋ฅผ ๋ค๋ฅธ ์ ํ์ ์์ ์ค์ฒฉํ๋ฉด, ์ด๋ ์์์ ์ผ๋ก ๋ถ๋ชจ ์ ํ์์ ์์์ ์ฐธ์กฐํฉ๋๋ค:
.component {
background-color: lightblue;
h2 { /* .component ๋ด์ h2๋ฅผ ๋์์ผ๋ก ํจ */
color: darkblue;
}
button { /* .component ๋ด์ button์ ๋์์ผ๋ก ํจ */
padding: 0.5rem 1rem;
border: none;
}
}
`&`(์ฐํผ์๋) ๊ธฐํธ๋ ๋ถ๋ชจ ์ ํ์ ์์ฒด๋ฅผ ์ฐธ์กฐํด์ผ ํ๊ฑฐ๋ ์ ํ์ ์ฐ๊ฒฐ, ํ์ ์ ํ์ ๋๋ ๋ถ๋ชจ ์์ ๊ณผ ๊ฐ์ ๋ ๋ณต์กํ ๊ด๊ณ๋ฅผ ๋ง๋ค๊ณ ์ถ์ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ ๋ช ์์ ์ผ๋ก ๋ถ๋ชจ ์ ํ์๋ฅผ ๋ํ๋ ๋๋ค.
.button {
background-color: #007bff;
color: white;
padding: 10px 15px;
border-radius: 4px;
&:hover { /* .button:hover๋ฅผ ๋์์ผ๋ก ํจ */
background-color: #0056b3;
}
&.primary { /* .button.primary๋ฅผ ๋์์ผ๋ก ํจ */
font-weight: bold;
}
& + & { /* ๋ฐ๋ก ์์ ๋ค๋ฅธ .button์ด ์๋ .button์ ๋์์ผ๋ก ํจ */
margin-left: 10px;
}
}
์ธ์ `&`๋ฅผ ๋ช ์์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์ธ์ ์์์ ์์ ์ ํ์ ์์กดํ ์ง ์ดํดํ๋ ๊ฒ์ด ํจ๊ณผ์ ์ธ ์ค์ฒฉ CSS๋ฅผ ์์ฑํ๋ ์ด์ ์ ๋๋ค.
์์ ์ค์ฒฉํ๊ธฐ
์์ ์ค์ฒฉ์ ์๋ง๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก์ด๋ฉฐ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์คํ์ผ์ ๊ฐ๋ ์ฑ์ ํฌ๊ฒ ํฅ์์ํต๋๋ค:
.navigation {
ul {
list-style: none;
padding: 0;
margin: 0;
li {
display: inline-block;
margin-right: 15px;
a {
text-decoration: none;
color: #333;
&:hover {
color: #007bff;
}
}
}
}
}
์ด ๊ตฌ์กฐ๋ `ul`, `li`, `a` ์์๊ฐ `.navigation` ๋ด์์ ํน๋ณํ ์คํ์ผ๋ง๋์ด, ์คํ์ผ์ด ์ ์ถ๋์ด ํ์ด์ง์ ๋ค๋ฅธ ๊ณณ์ ์๋ ์ ์ฌํ ์์์ ์ํฅ์ ๋ฏธ์น๋ ๊ฒ์ ๋ฐฉ์งํ๋ค๋ ๊ฒ์ ๋ช ํํ๊ฒ ๋ณด์ฌ์ค๋๋ค.
ํด๋์ค์ ID ์ค์ฒฉํ๊ธฐ
ํด๋์ค์ ID๋ฅผ ์ค์ฒฉํ๋ฉด ์ปดํฌ๋ํธ์ ํน์ ์ํ๋ ๋ณํ๊ณผ ๊ด๋ จ๋ ๋งค์ฐ ๊ตฌ์ฒด์ ์ธ ์คํ์ผ๋ง์ด ๊ฐ๋ฅํฉ๋๋ค:
.product-card {
border: 1px solid #ccc;
padding: 1rem;
&.out-of-stock {
opacity: 0.6;
filter: grayscale(100%);
cursor: not-allowed;
}
#price-tag {
font-size: 1.2em;
font-weight: bold;
color: #e44d26;
}
}
์ฌ๊ธฐ์ `.product-card.out-of-stock`์ ๋ค๋ฅด๊ฒ ์คํ์ผ๋ง๋๊ณ , ์นด๋ ๋ด์ ๊ณ ์ ํ `price-tag` ID๋ ํน์ ์คํ์ผ์ ๋ฐ์ต๋๋ค. ID๋ฅผ ์ค์ฒฉํ ์๋ ์์ง๋ง, ๋๋ถ๋ถ์ ์ต์ CSS ์ํคํ ์ฒ์์๋ ๋ ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ์ํด ํด๋์ค๋ฅผ ์ ํธํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ผ๋ก ๊ถ์ฅ๋ฉ๋๋ค.
๊ฐ์ ํด๋์ค์ ๊ฐ์ ์์ ์ค์ฒฉํ๊ธฐ
๊ฐ์ ํด๋์ค(์: `:hover`, `:focus`, `:active`, `:nth-child()`)์ ๊ฐ์ ์์(์: `::before`, `::after`, `::first-line`)๋ ์ํธ์์ฉ์ด๋ ๊ตฌ์กฐ์ ์คํ์ผ๋ง์ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฅผ `&`์ ํจ๊ป ์ค์ฒฉํ๋ฉด ๋ถ๋ชจ ์ ํ์์์ ๊ด๊ณ๊ฐ ๋ช ์์ ์ด๊ณ ๋ช ํํด์ง๋๋ค:
.link {
color: blue;
text-decoration: underline;
&:hover {
color: darkblue;
text-decoration: none;
}
&:focus {
outline: 2px solid lightblue;
}
&::before {
content: "โก๏ธ ";
margin-right: 5px;
}
}
์ด ํจํด์ ์ํธ์์ฉ ์์๋ฅผ ์คํ์ผ๋งํ๊ณ HTML์ ๋ณต์กํ๊ฒ ๋ง๋ค์ง ์์ผ๋ฉด์ ์ฅ์์ ์ธ ์ฝํ ์ธ ๋ฅผ ์ถ๊ฐํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
๋ฏธ๋์ด ์ฟผ๋ฆฌ์ @supports ์ค์ฒฉํ๊ธฐ
CSS ์ค์ฒฉ์ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ ์ค ํ๋๋ `@media` ๋ฐ `@supports` ๊ท์น์ ์ ํ์ ๋ด์ ์ง์ ์ค์ฒฉํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ ๋ฐ์ํ ๋ฐ ๊ธฐ๋ฅ ์ข ์ ์คํ์ผ์ ํด๋น ์ปดํฌ๋ํธ์ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ทธ๋ฃนํํ์ฌ ์ ์งํฉ๋๋ค:
.header {
background-color: #f8f8f8;
padding: 1rem 2rem;
@media (max-width: 768px) {
padding: 1rem;
text-align: center;
h1 {
font-size: 1.5rem;
}
}
@supports (display: grid) {
display: grid;
grid-template-columns: 1fr auto;
align-items: center;
}
}
์ด๋ฅผ ํตํด `.header` ์ปดํฌ๋ํธ์ ๊ด๋ จ๋ ๋ชจ๋ ์คํ์ผ, ์ฆ ๋ฐ์ํ ๋ณํ์ ํฌํจํ ๋ชจ๋ ์คํ์ผ์ ํ ๊ณณ์ ๋ ์ ์์ต๋๋ค. ์ด๋ ํนํ ๋ณต์กํ๊ณ ์ ์ํ ๋์์ธ์ ์ ์ง๋ณด์์ฑ์ ํฌ๊ฒ ํฅ์์ํต๋๋ค.
๋ฏธ๋์ด ์ฟผ๋ฆฌ๊ฐ ์ค์ฒฉ๋๋ฉด, ๊ทธ ๊ท์น์ *ํด๋น ๋ฏธ๋์ด ์กฐ๊ฑด ํ์์* ๋ถ๋ชจ ์ ํ์์ ์ ์ฉ๋ฉ๋๋ค. ๋ฏธ๋์ด ์ฟผ๋ฆฌ๊ฐ ๋ฃจํธ์ ์๊ฑฐ๋ ์คํ์ผ ๊ท์น ๋ด์ ์๋ ๊ฒฝ์ฐ, ์์ฒด์ ์ผ๋ก ์ค์ฒฉ๋ ์ ํ์๋ฅผ ํฌํจํ ์๋ ์์ต๋๋ค:
@media (min-width: 1024px) {
.container {
max-width: 1200px;
margin: 0 auto;
.sidebar {
width: 300px;
}
}
}
์ด๋ฌํ ์ ์ฐ์ฑ์ ๋ณต์กํ ๊ธ๋ก๋ฒ ์คํ์ผ์ํธ๋ฅผ ๊ตฌ์กฐํํ๋ ๋ฐ ํฐ ํ์ ์ ๊ณตํ๋ฉฐ, ๋ค์ํ ์ง์ญ์ ๊ฑธ์ณ ๋ค์ํ ํ๋ฉด ํฌ๊ธฐ์ ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฅ์ ๋์ํ ์ ์์ต๋๋ค.
์ ํ์ ๋ชฉ๋ก ์ค์ฒฉํ๊ธฐ
์ ํ์ ๋ชฉ๋ก๋ ์ค์ฒฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๊ณตํต๋ ์ค์ฒฉ ์คํ์ผ์ ๊ณต์ ํ๋ ์ฌ๋ฌ ์์๊ฐ ์๋ ๊ฒฝ์ฐ:
h1, h2, h3 {
font-family: 'Open Sans', sans-serif;
margin-bottom: 1em;
+ p { /* h1, h2, ๋๋ h3 ๋ฐ๋ก ๋ค์ ์ค๋ ๋จ๋ฝ์ ๋์์ผ๋ก ํจ */
margin-top: -0.5em;
font-style: italic;
}
}
์ฌ๊ธฐ์ `+ p` ๊ท์น์ `h1`, `h2`, ๋๋ `h3` ์์ ๋ฐ๋ก ๋ค์ ์ค๋ ๋ชจ๋ `p` ์์์ ์ ์ฉ๋ฉ๋๋ค.
& ๊ธฐํธ์ ์ค์์ฑ๊ณผ ์ฌ์ฉ ์์
`&` ๊ธฐํธ๋ ๊ณ ๊ธ CSS ์ค์ฒฉ์ ์ด์์ ๋๋ค. ์ด๊ฒ์ *์ ์ฒด ๋ถ๋ชจ ์ ํ์*๋ฅผ ๋ฌธ์์ด๋ก ๋ํ๋ ๋๋ค. ์ด๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ํ์์ ์ ๋๋ค:
- ์๊ธฐ ์ฐธ์กฐ: `:hover` ๋๋ `&.is-active` ์์ ์ ๊ฐ์ด.
- ๋ณตํฉ ์ ํ์: ๋ถ๋ชจ๋ฅผ ๊ณต๋ฐฑ ์์ด ๋ค๋ฅธ ์ ํ์์ ๊ฒฐํฉํ ๋ (์: `&.modifier`).
- ์์ ์ด์ธ์ ๊ฒฐํฉ์: ์ธ์ ํ์ (`+`), ์ผ๋ฐ ํ์ (`~`), ์์(`>`), ๋๋ ์ด ๊ฒฐํฉ์์ ๊ฐ์ด.
- at-๊ท์น ์ค์ฒฉ: `@media`์ `@supports` ๊ท์น์ `&`๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์ฌ์ฉํ์ง ์๊ณ ์ค์ฒฉํ ์ ์์ต๋๋ค. `&`๊ฐ ์๋ต๋๋ฉด ์ค์ฒฉ๋ ์ ํ์๋ ์์์ ์ผ๋ก ์์์ด ๋ฉ๋๋ค. `&`๊ฐ ์์ผ๋ฉด at-๊ท์น ๋ด์์ ๋ช ์์ ์ผ๋ก ๋ถ๋ชจ๋ฅผ ๋์์ผ๋ก ํฉ๋๋ค.
์ฐจ์ด์ ์ ๊ณ ๋ คํด ๋ณด์ธ์:
.parent {
.child { /* .parent .child๋ก ์ปดํ์ผ๋จ */
color: blue;
}
&.modifier { /* .parent.modifier๋ก ์ปดํ์ผ๋จ */
font-weight: bold;
}
> .direct-child { /* .parent > .direct-child๋ก ์ปดํ์ผ๋จ */
border-left: 2px solid red;
}
}
๊ฒฝํ ๋ฒ์น: ๋ถ๋ชจ์ ์์์ ๋์์ผ๋ก ํ๋ ค๋ ๊ฒฝ์ฐ ์ข ์ข `&`๋ฅผ ์๋ตํ ์ ์์ต๋๋ค. ๋ถ๋ชจ ์์ฒด๋ฅผ ๊ฐ์ ํด๋์ค, ๊ฐ์ ์์, ์์ฑ ์ ํ์๋ก ๋์์ผ๋ก ํ๊ฑฐ๋ ๋ค๋ฅธ ํด๋์ค/ID์ ๊ฒฐํฉํ๋ ค๋ ๊ฒฝ์ฐ `&`๋ ํ์์ ์ ๋๋ค.
CSS ์ค์ฒฉ๊ณผ ๋ช ์๋ ์ดํดํ๊ธฐ
๋ช ์๋(Specificity)๋ ์ฌ๋ฌ ๊ท์น์ด ์ ์ฌ์ ์ผ๋ก ๋์ผํ ์์๋ฅผ ๋์์ผ๋ก ํ ๋ ์ด๋ค ์คํ์ผ ์ ์ธ์ด ์ ์ฉ๋ ์ง๋ฅผ ๊ฒฐ์ ํ๋ CSS์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ๋๋ค. ์ด๋ ์ข ์ข ์ ์ ์์คํ ์ผ๋ก ์ค๋ช ๋๋ฉฐ, ๋ค๋ฅธ ์ ํ์ ์ ํ์์ ์ ์๊ฐ ํ ๋น๋ฉ๋๋ค:
- ์ธ๋ผ์ธ ์คํ์ผ: 1000์
- ID: 100์
- ํด๋์ค, ์์ฑ, ๊ฐ์ ํด๋์ค: 10์
- ์์, ๊ฐ์ ์์: 1์
- ์ ์ฒด ์ ํ์(`*`), ๊ฒฐํฉ์(`+`, `~`, `>`), ๋ถ์ ๊ฐ์ ํด๋์ค(`:not()`): 0์
๊ฐ์ฅ ๋์ ๋ช ์๋ ์ ์๋ฅผ ๊ฐ์ง ๊ท์น์ด ์ด๊น๋๋ค. ์ ์๊ฐ ๊ฐ์ผ๋ฉด ๋ง์ง๋ง์ ์ ์ธ๋ ๊ท์น์ด ์ฐ์ ํฉ๋๋ค.
์ค์ฒฉ์ด ๋ช ์๋์ ๋ฏธ์น๋ ์ํฅ: &์ ๊ฒฐ์ ์ ์ญํ
์ด ๋ถ๋ถ์์ ๋ค์ดํฐ๋ธ CSS ์ค์ฒฉ์ ๋ฏธ๋ฌํ์ง๋ง ์ค์ํ ๋์์ค๋ฅผ ๋์ ํฉ๋๋ค. ์ค์ฒฉ๋ ์ ํ์์ ๋ช ์๋๋ ๊ทธ๊ฒ์ด ์ด๋ป๊ฒ ํํํ๋ ์ ํ์๋ก ํด์๋๋์ง์ ๋ฐ๋ผ ๊ณ์ฐ๋ฉ๋๋ค. `&` ๊ธฐํธ์ ์ ๋ฌด๋ ์ด ๊ณ์ฐ์ ์๋นํ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
์ค์ฒฉ๊ณผ ์์์ ๋ช ์๋ (&๊ฐ ์๋ต๋ ๋)
๋ช ์์ ์ผ๋ก `&`๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ ํ์๋ฅผ ์ค์ฒฉํ๋ฉด, ์ด๋ ์์์ ์ผ๋ก ์์ ๊ฒฐํฉ์๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ์ค์ฒฉ๋ ๊ท์น์ ๋ช ์๋๋ ๋ถ๋ชจ์ ๋ช ์๋์ ์ค์ฒฉ๋ ์ ํ์์ ๋ช ์๋์ ํฉ์ ๋๋ค.
์์:
.container { /* ๋ช
์๋: (0,1,0) */
color: black;
p { /* .container p๋ก ํด์๋จ */
color: blue; /* ๋ช
์๋: (0,1,0) + (0,0,1) = (0,1,1) */
}
.text-highlight { /* .container .text-highlight๋ก ํด์๋จ */
background-color: yellow; /* ๋ช
์๋: (0,1,0) + (0,1,0) = (0,2,0) */
}
}
์ด ๊ฒฝ์ฐ, ์ค์ฒฉ๋ ๊ท์น์ ๋ถ๋ชจ์ ๋ช ์๋์ ์์ ์ ๋ช ์๋๋ฅผ ๋ํ๋ฉฐ, ์ด๋ ์ ํต์ ์ธ CSS ๊ฒฐํฉ ์ ํ์์ ์๋ ๋ฐฉ์๊ณผ ์ ํํ ๊ฐ์ต๋๋ค. ๋๋ผ์ด ์ ์ ์์ต๋๋ค.
์ค์ฒฉ๊ณผ ๋ช ์์ ๋ช ์๋ (&๊ฐ ์ฌ์ฉ๋ ๋)
`&`๋ฅผ ์ฌ์ฉํ๋ฉด ๋ช ์์ ์ผ๋ก ์ ์ฒด ๋ถ๋ชจ ์ ํ์ ๋ฌธ์์ด์ ๋ํ๋ ๋๋ค. ์ด๋ ์ค์ฒฉ๋ ์ ํ์์ ๋ช ์๋๊ฐ ๋ง์น *ํด์๋ ์ ์ฒด ๋ถ๋ชจ ์ ํ์*์ ์ค์ฒฉ ๋ถ๋ถ์ ๋ํ ๊ฒ์ฒ๋ผ ๊ณ์ฐ๋๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
์์:
.btn { /* ๋ช
์๋: (0,1,0) */
padding: 10px;
&:hover { /* .btn:hover๋ก ํด์๋จ */
background-color: lightgrey; /* ๋ช
์๋: (0,1,0) + (0,1,0) = (0,2,0) */
}
&.active { /* .btn.active๋ก ํด์๋จ */
border: 2px solid blue; /* ๋ช
์๋: (0,1,0) + (0,1,0) = (0,2,0) */
}
}
์ด๊ฒ์ ์์๋๋ก ์๋ํฉ๋๋ค: ํด๋์ค `btn`์ด ๊ฐ์ ํด๋์ค `:hover`๋ ๋ค๋ฅธ ํด๋์ค `.active`์ ๊ฒฐํฉ๋๋ฉด ์์ฐ์ค๋ฝ๊ฒ ๋ ๋์ ๋ช ์๋๋ฅผ ๊ฐ๊ฒ ๋ฉ๋๋ค.
๋ฏธ๋ฌํ ์ฐจ์ด๋ ๋ณต์กํ ๋ถ๋ชจ ์ ํ์์์ ๋ฐ์ํฉ๋๋ค. `&` ๊ธฐํธ๋ ๋ถ๋ชจ์ ์ ์ฒด ๋ช ์๋๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ ๋ฌํฉ๋๋ค. ์ด๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ด์ง๋ง, ์ ์คํ๊ฒ ๊ด๋ฆฌํ์ง ์์ผ๋ฉด ์์์น ๋ชปํ ๋ช ์๋ ๋ฌธ์ ์ ์์ธ์ด ๋ ์๋ ์์ต๋๋ค.
๊ณ ๋ คํด ๋ณด์ธ์:
#app .main-content .post-article { /* ๋ช
์๋: (1,2,1) */
font-family: sans-serif;
& p {
/* ์ด๊ฒ์ (#app .main-content .post-article p)๊ฐ ์๋ */
/* ์ด๊ฒ์ (#app .main-content .post-article) p */
/* ๋ช
์๋: (1,2,1) + (0,0,1) = (1,2,2) */
line-height: 1.6;
}
}
์ฌ๊ธฐ์ `p` ์์ ์๋ `&`๋ `p`๊ฐ ์์์ ์ผ๋ก `.post-article` ๋ด์ `p`๋ฅผ ๋์์ผ๋ก ํ๋ฏ๋ก ์ผ๋ฐ์ ์ผ๋ก ์๋ต๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ช ์์ ์ผ๋ก ์ฌ์ฉ๋ ๊ฒฝ์ฐ, `& p`๋ `&`๊ฐ ์ ์ฒด ๋ถ๋ชจ ์ ํ์ ๋ฌธ์์ด์ ๋ํ๋ธ๋ค๋ ์ ์ธ์๋ ์์ ์ ํ์์ ๊ธฐ๋ณธ ๋์์ด๋ ๋ช ์๋ ๊ณ์ฐ์ ์๋ฏธ ์๊ฒ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค. ํต์ฌ ๊ท์น์ ๊ทธ๋๋ก์ ๋๋ค: ์ค์ฒฉ๋ ์ ํ์๊ฐ ๊ฒฐํฉ์๋ก ๊ตฌ๋ถ๋ ์์์ด *์๋* ๋, `&`๊ฐ ์ฌ์ฉ๋๋ฉฐ ๊ทธ ๋ช ์๋๋ *ํด์๋* ๋ถ๋ชจ์ ๋ช ์๋์ ๋ํด์ง๋๋ค.
& ๋์์ ๋ํ ํต์ฌ ์ฌํญ (W3C ๋ช ์ธ์ ๊ธฐ์ค): ์ค์ฒฉ๋ ์ ํ์์์ `&`๊ฐ ์ฌ์ฉ๋ ๋, ์ด๋ *๋ถ๋ชจ ์ ํ์*๋ก ๋์ฒด๋ฉ๋๋ค. ์ด๋ ๋ช ์๋๊ฐ ๋ง์น ๋ถ๋ชจ ์ ํ์ ๋ฌธ์์ด์ ์ฐ๊ณ ๊ทธ ๋ค์ ์ค์ฒฉ ๋ถ๋ถ์ ๋ง๋ถ์ธ ๊ฒ์ฒ๋ผ ๊ณ์ฐ๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด๋ ์ ์ฒ๋ฆฌ๊ธฐ ๋์๊ณผ๋ ๊ทผ๋ณธ์ ์ผ๋ก ๋ค๋ฆ ๋๋ค. ์ ์ฒ๋ฆฌ๊ธฐ์์๋ `&`๊ฐ ๋ช ์๋ ๊ณ์ฐ์ ์ํด ์ข ์ข ๋ถ๋ชจ ์ ํ์์ *๋ง์ง๋ง ๋ถ๋ถ*๋ง์ ๋ํ๋์ต๋๋ค(์: Sass์์ `.foo &`์ ํด์, ์ฌ๊ธฐ์ ๋ถ๋ชจ๊ฐ `.foo .bar`์ผ ๋ `&`๊ฐ `.bar`๋ก ํด์๋ ์ ์์). ๋ค์ดํฐ๋ธ CSS ์ค์ฒฉ์ `&`๋ ํญ์ *์ ์ฒด* ๋ถ๋ชจ ์ ํ์๋ฅผ ๋ํ๋ ๋๋ค. ์ด๋ ์ ์ฒ๋ฆฌ๊ธฐ์์ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ฐ๋ฐ์๋ค์๊ฒ ์ค์ํ ์ฐจ์ด์ ์ ๋๋ค.
๋ช ํ์ฑ์ ์ํ ์์:
.component-wrapper .my-component { /* ๋ถ๋ชจ ๋ช
์๋: (0,2,0) */
background-color: lavender;
.item { /* .component-wrapper .my-component .item์ผ๋ก ํด์๋จ. ๋ช
์๋: (0,3,0) */
padding: 10px;
}
&.highlighted { /* .component-wrapper .my-component.highlighted๋ก ํด์๋จ. ๋ช
์๋: (0,3,0) */
border: 2px solid purple;
}
> .inner-item { /* .component-wrapper .my-component > .inner-item์ผ๋ก ํด์๋จ. ๋ช
์๋: (0,3,0) */
color: indigo;
}
}
๋ชจ๋ ๊ฒฝ์ฐ์, ์ค์ฒฉ๋ ์ ํ์์ ๋ช ์๋๋ ํํํ๋ ๊ตฌ์กฐ๋ก ์์ฑ๋์์ ๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ํด์๋ ๊ตฌ์ฑ ์์๋ค๋ก๋ถํฐ ๋์ ๋ฉ๋๋ค. ์ค์ฒฉ์ ์ฃผ์ ๊ฐ์น๋ ๋ช ์๋ ์ ์๋ฅผ ์กฐ์ํ๋ ์๋ก์ด ๋ฐฉ๋ฒ์ด ์๋๋ผ, ํ์ค CSS๊ฐ ์ด๋ฏธ ๊ฒฐํฉ ์ ํ์๋ฅผ ํตํด ํ์ฉํ๋ ๋ฒ์ ๋ด์์์ *๊ตฌ์กฐํ*์ ๋๋ค.
ํํ ํจ์ ๊ณผ ์ด๋ฅผ ํผํ๋ ๋ฐฉ๋ฒ
- ๊ณผ๋ํ ์ค์ฒฉ: ์ค์ฒฉ์ด ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ํ์ง๋ง, ์ง๋์น๊ฒ ๊น์ ์ค์ฒฉ(์: 5๋จ๊ณ ์ด์)์ ๋งค์ฐ ๋์ ๋ช ์๋๋ฅผ ์ด๋ํ์ฌ ๋์ค์ ์คํ์ผ์ ๋ฎ์ด์ฐ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ์ด๋ ์ ์ฒ๋ฆฌ๊ธฐ์์๋ ํํ ๋ฌธ์ ์ ๋๋ค. ์ค์ฒฉ ์์ค์ ์ต์ํํ๊ณ , ๋๋ถ๋ถ์ ์ปดํฌ๋ํธ์๋ ์ด์์ ์ผ๋ก 2-3๋จ๊ณ ๊น์ด๋ก ์ ์งํ์ธ์.
- ๋ช ์๋ ์ ์: ๋์ ๋ช ์๋๋ ๋ ๊ตฌ์ฒด์ ์ธ ์ ํ์๋ก ์ด์ด์ง๊ณ , ์ด๋ฅผ ๋ฎ์ด์ฐ๋ ค๋ฉด ํจ์ฌ ๋ ๋์ ๋ช ์๋๊ฐ ํ์ํฉ๋๋ค. ์ด๋ ๊ฐ๋ฐ์๋ค์ด `!important`๋ ์ง๋์น๊ฒ ๋ณต์กํ ์ ํ์์ ์์กดํ๊ฒ ๋๋ "๋ช ์๋ ์ ์"์ผ๋ก ๋ฒ์ง ์ ์์ผ๋ฉฐ, ์คํ์ผ์ํธ๋ฅผ ๊นจ์ง๊ธฐ ์ฝ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ญ๋๋ค. ์ค์ฒฉ์ ์๋ชป ์ฌ์ฉํ๋ฉด ์ด๋ฅผ ์ ํ์ํฌ ์ ์์ต๋๋ค.
- ์๋์น ์์ ๋ช ์๋ ์ฆ๊ฐ: ํญ์ ๋ถ๋ชจ ์ ํ์์ ๋ช ์๋๋ฅผ ์ธ์งํด์ผ ํฉ๋๋ค. ์ค์ฒฉํ ๋, ๋ณธ์ง์ ์ผ๋ก ๋ ๊ตฌ์ฒด์ ์ธ ์ ํ์๋ฅผ ๋ง๋๋ ๊ฒ์ ๋๋ค. ๋ถ๋ชจ๊ฐ ์ด๋ฏธ ๋งค์ฐ ๊ตฌ์ฒด์ ์ด๋ผ๋ฉด(์: ID), ์ค์ฒฉ๋ ๊ท์น์ ๊ทธ ๋์ ๋ช ์๋๋ฅผ ์์๋ฐ์ ๋ค๋ฅธ ๊ณณ์์ ๋ ์ผ๋ฐ์ ์ธ ์คํ์ผ์ ์ ์ฉํ๋ ค ํ ๋ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค.
- ์ ์ฒ๋ฆฌ๊ธฐ ๋์๊ณผ์ ํผ๋: ์ ์ฒ๋ฆฌ๊ธฐ ์ค์ฒฉ์ ์ต์ํ ๊ฐ๋ฐ์๋ค์ `&`๊ฐ ๋์ผํ๊ฒ ์๋ํ๋ค๊ณ ๊ฐ์ ํ ์ ์์ต๋๋ค. ์ธ๊ธํ๋ฏ์ด, ๋ค์ดํฐ๋ธ CSS์ `&`๋ ํญ์ *์ ์ฒด* ๋ถ๋ชจ ์ ํ์๋ฅผ ๋ํ๋ด๋ฏ๋ก, ์ผ๋ถ ์ ์ฒ๋ฆฌ๊ธฐ ํด์๊ณผ ๋น๊ตํ ๋ ๋ช ์๋๊ฐ ์ธ์๋๋ ๋ฐฉ์์ ์์ด ํต์ฌ์ ์ธ ์ฐจ์ด๊ฐ ๋ ์ ์์ต๋๋ค.
์ด๋ฌํ ํจ์ ์ ํผํ๋ ค๋ฉด ํญ์ ์ ํ์์ ๋ช ์๋๋ฅผ ๊ณ ๋ คํ์ธ์. ๋ช ์๋๋ฅผ ๋ถ์ํ๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๊ณ , ์ปดํฌ๋ํธ์ ๋ํด์๋ ID๋ณด๋ค ํด๋์ค ๊ธฐ๋ฐ ์ ํ์๋ฅผ ์ฐ์ ์ํ์ธ์. BEM(Block, Element, Modifier)์ด๋ ์ ํธ๋ฆฌํฐ ์ฐ์ CSS์ ๊ฐ์ ๋ฐฉ๋ฒ๋ก ์ ์ฌ์ฉํ์ฌ ์ฒ์๋ถํฐ ๋ช ์๋๋ฅผ ๊ด๋ฆฌํ๋๋ก CSS ์ํคํ ์ฒ๋ฅผ ๊ณํํ์ธ์. ์ด๋ฌํ ๋ฐฉ๋ฒ๋ก ์ ์ค์ฒฉ๊ณผ ํจ๊ณผ์ ์ผ๋ก ๊ฒฐํฉ๋ ์ ์์ต๋๋ค.
ํจ๊ณผ์ ์ธ CSS ์ค์ฒฉ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
CSS ์ค์ฒฉ์ ํ์ ์ง์ ์ผ๋ก ํ์ฉํ๋ ค๋ฉด, ๊ธ๋ก๋ฒ ๊ฐ๋ฐํ ์ ๋ฐ์ ๊ฑธ์ณ ์ ์ง๋ณด์์ฑ, ํ์ฅ์ฑ, ํ์ ์ ์ด์งํ๋ ์ผ๋ จ์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ ๊ฒ์ด ํ์์ ์ ๋๋ค.
- ๊ณผ๋ํ๊ฒ ์ค์ฒฉํ์ง ์๊ธฐ: ์ฌ๋ฐ๋ฅธ ๊ท ํ ์ฐพ๊ธฐ: ์ ํน์ ์ผ ์ ์์ง๋ง, 3-4๋จ๊ณ ์ด์ ์ค์ฒฉํ๋ ๊ฒ์ ํผํ์ธ์. ๊ทธ ์ด์์ด ๋๋ฉด ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๊ณ ๋ช ์๋๊ฐ ๋ค๋ฃจ๊ธฐ ์ด๋ ค์์ง ์ ์์ต๋๋ค. ์ค์ฒฉ์ ์ ์ฒด DOM ๊ตฌ์กฐ๋ฅผ ์๋ฒฝํ๊ฒ ๋ฐ์ํ๋ ๋ฐฉ๋ฒ์ด ์๋๋ผ, ์ปดํฌ๋ํธ์ ๊ด๋ จ ์คํ์ผ์ ๊ทธ๋ฃนํํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์๊ฐํ์ธ์. ๋งค์ฐ ๊น์ DOM ๊ตฌ์กฐ์ ๊ฒฝ์ฐ, ์ปดํฌ๋ํธ๋ฅผ ๋ถํดํ๊ฑฐ๋ ์ฑ๋ฅ ๋ฐ ์ ์ง๋ณด์์ฑ์ ์ํด ์ง์ ์ ์ธ ํด๋์ค ์ ํ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์.
- ๊ฐ๋ ์ฑ ์ฐ์ : ๊น๋ํ๊ฒ ์ ์งํ๊ธฐ: ์ค์ฒฉ์ ์ฃผ์ ๋ชฉํ๋ ๊ฐ๋ ์ฑ ํฅ์์ ๋๋ค. ์ค์ฒฉ๋ ๋ธ๋ก์ด ๋ช ํํ๊ฒ ๋ค์ฌ์ฐ๊ธฐ๋๊ณ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ทธ๋ฃนํ๋์๋์ง ํ์ธํ์ธ์. ๋ณต์กํ ์ค์ฒฉ ๊ตฌ์กฐ๋ ํน์ ์๋๋ฅผ ์ค๋ช ํ๊ธฐ ์ํด ํ์ํ ๊ฒฝ์ฐ ์ฃผ์์ ์ถ๊ฐํ์ธ์.
- ๋ ผ๋ฆฌ์ ๊ทธ๋ฃนํ: ๊ด๋ จ ์คํ์ผ ์ค์ฒฉํ๊ธฐ: ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ ๊ทธ ์ง๊ณ ์์๊ณผ ์ง์ ์ ์ผ๋ก ๊ด๋ จ๋ ๊ท์น๋ง ์ค์ฒฉํ์ธ์. ์์ ํ ๊ด๋ จ ์๋ ์์์ ๋ํ ์คํ์ผ์ ์ค์ฒฉ๋์ง ์์ ์ํ๋ก ๋์ด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฒํผ์ ๋ชจ๋ ์ํธ์์ฉ ์ํ(`:hover`, `:focus`)๋ ๋ฒํผ์ ์ฃผ ๊ท์น ๋ด์ ์ค์ฒฉ๋์ด์ผ ํฉ๋๋ค.
- ์ผ๊ด๋ ๋ค์ฌ์ฐ๊ธฐ: ๋ช ํ์ฑ ํฅ์: ์ค์ฒฉ๋ ๊ท์น์ ๋ํด ์ผ๊ด๋ ๋ค์ฌ์ฐ๊ธฐ ์คํ์ผ(์: 2์นธ ๋๋ 4์นธ ๊ณต๋ฐฑ)์ ์ฑํํ์ธ์. ์ด ์๊ฐ์ ๊ณ์ธต ๊ตฌ์กฐ๋ ์ ํ์ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋น ๋ฅด๊ฒ ์ดํดํ๋ ๋ฐ ์ค์ํฉ๋๋ค. ์ด๋ ํนํ ๋ค์ํ ๊ฐ์ธ๋ค์ด ์๋ก ๋ค๋ฅธ ์ฝ๋ฉ ์คํ์ผ ์ ํธ๋๋ฅผ ๊ฐ์ง ์ ์๋ ์ ์ธ๊ณ์ ์ผ๋ก ๋ถ์ฐ๋ ํ์์ ์ค์ํฉ๋๋ค. ํต์ผ๋ ์คํ์ผ ๊ฐ์ด๋๊ฐ ๋์์ด ๋ฉ๋๋ค.
-
๋ชจ๋์ ๋์์ธ: ์ปดํฌ๋ํธ์ ํจ๊ป ์ค์ฒฉ ์ฌ์ฉํ๊ธฐ: CSS ์ค์ฒฉ์ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ
์ฒ์ ๊ฒฐํฉ๋ ๋ ๋น์ ๋ฐํฉ๋๋ค. ๊ฐ ์ปดํฌ๋ํธ์ ๋ํด ์ต์์ ํด๋์ค(์: `.card`, `.modal`, `.user-avatar`)๋ฅผ ์ ์ํ๊ณ , ๊ทธ ๋ถ๋ชจ ๋ด์ ๋ชจ๋ ๋ด๋ถ ์์, ํด๋์ค, ์ํ ์คํ์ผ์ ์ค์ฒฉํ์ธ์. ์ด๋ ์คํ์ผ์ ์บก์ํํ๊ณ ์ ์ญ ์คํ์ผ ์ถฉ๋์ ์ํ์ ์ค์
๋๋ค.
.product-card { /* ๊ธฐ๋ณธ ์คํ์ผ */ &__image { /* ์ด๋ฏธ์ง ๊ด๋ จ ์คํ์ผ */ } &__title { /* ์ ๋ชฉ ๊ด๋ จ ์คํ์ผ */ } &--featured { /* ์์ ์ ์คํ์ผ */ } }์ ์์ ๋ ๋ช ํ์ฑ์ ์ํด BEM๊ณผ ์ ์ฌํ ๋ค์ด๋ฐ ์ปจ๋ฒค์ ์ ์ฌ์ฉํ์ง๋ง, ๋ค์ดํฐ๋ธ CSS ์ค์ฒฉ์ ๋ ๊ฐ๋จํ ์ปดํฌ๋ํธ ํด๋์ค ์ด๋ฆ๊ณผ๋ ์ํํ๊ฒ ์๋ํฉ๋๋ค.
- ํ์ : ํ ๊ฐ์ด๋๋ผ์ธ ์๋ฆฝ: ๋์ผํ ์ฝ๋๋ฒ ์ด์ค์์ ์์ ํ๋ ํ์ ๊ฒฝ์ฐ, CSS ์ค์ฒฉ ์ฌ์ฉ์ ๋ํ ๋ช ํํ ๊ฐ์ด๋๋ผ์ธ์ ์๋ฆฝํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ค์ํฉ๋๋ค. ์ค์ฒฉ ๊น์ด ์ ํ, `&` ์ฌ์ฉ ์์ , ์ค์ฒฉ๋ ๊ท์น ๋ด์์ ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ ผ์ํ๊ณ ํฉ์ํ์ธ์. ๊ณต์ ๋ ์ดํด๋ ๋ถ์ผ์น์ ์ ์ง๋ณด์ ๋ฌธ์ ๋ฅผ ์๋ฐฉํฉ๋๋ค.
- ๋ธ๋ผ์ฐ์ ํธํ์ฑ: ์ง์ ๋ฐ ํด๋ฐฑ ํ์ธ: ๋ค์ดํฐ๋ธ CSS ์ค์ฒฉ์ด ๊ด๋ฒ์ํ ๋ธ๋ผ์ฐ์ ์ง์์ ๋ฐ๊ณ ์์ง๋ง, ๋์ ๊ณ ๊ฐ์ ๋ํ ํ์ฌ ํธํ์ฑ์ ํ์ธํ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค. Can I use...์ ๊ฐ์ ๋๊ตฌ๋ ์ต์ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ตฌํ ๋ธ๋ผ์ฐ์ ์ ๋ํ ๋ ๋์ ์ง์์ด ํ์ํ ํ๊ฒฝ์ ๊ฒฝ์ฐ, ํํํ CSS๋ก ์ปดํ์ผ๋๋ CSS ์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ํด๋ฐฑ ๋ฉ์ปค๋์ฆ์ผ๋ก PostCSS์ ์ค์ฒฉ ํ๋ฌ๊ทธ์ธ์ ๊ตฌํํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์. ์ ์ง์ ํฅ์ ์ ๋ต๋ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ค์ฒฉ ๊ธฐ๋ฅ์ด ์ฌ์ฉ๋๊ณ ๋ ์ ๋ฅํ ๋ธ๋ผ์ฐ์ ์๋ ๋ ๊ฐ๋จํ๊ณ ํํํ๋ ๋์์ด ์ ๊ณต๋ฉ๋๋ค.
- ๋ฌธ๋งฅ์ ์คํ์ผ ๋ ์ ์ญ ์คํ์ผ: ๋ฌธ๋งฅ์ ์คํ์ผ(ํน์ ์ปดํฌ๋ํธ *๋ด์์๋ง* ์ ์ฉ๋๋ ์คํ์ผ)์ ์ค์ฒฉ์ ์ฌ์ฉํ์ธ์. ์ ์ญ ์คํ์ผ(์: `body`, `h1` ๊ธฐ๋ณธ ์คํ์ผ, ์ ํธ๋ฆฌํฐ ํด๋์ค)์ ์คํ์ผ์ํธ์ ๋ฃจํธ ์์ค์ ์ ์งํ์ฌ ์ฝ๊ฒ ์ฐพ์ ์ ์๊ณ ์ค์ฒฉ๋ ์ปจํ ์คํธ์์ ์ค์๋ก ๋์ ๋ช ์๋๋ฅผ ์์๋ฐ์ง ์๋๋ก ํ์ธ์.
๊ณ ๊ธ ์ค์ฒฉ ๊ธฐ์ ๋ฐ ๊ณ ๋ ค ์ฌํญ
์ฌ์ฉ์ ์ง์ ์์ฑ(CSS ๋ณ์)๊ณผ ํจ๊ป ์ค์ฒฉํ๊ธฐ
CSS ์ฌ์ฉ์ ์ง์ ์์ฑ(๋ณ์)์ ๋์ ์ด๊ณ ์ ์ง๋ณด์ ๊ฐ๋ฅํ ์คํ์ผ์ ๋ง๋๋ ๋ฐ ์์ฒญ๋ ํ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ์ค์ฒฉ๊ณผ ํจ๊ณผ์ ์ผ๋ก ๊ฒฐํฉํ์ฌ ์ปดํฌ๋ํธ๋ณ ๋ณ์๋ฅผ ์ ์ํ๊ฑฐ๋ ์ค์ฒฉ๋ ์ปจํ ์คํธ ๋ด์์ ์ ์ญ ๋ณ์๋ฅผ ์์ ํ ์ ์์ต๋๋ค:
.theme-dark {
--text-color: #eee;
--background-color: #333;
.card {
background-color: var(--background-color);
color: var(--text-color);
a {
color: var(--accent-color, lightblue); /* accent-color์ ํด๋ฐฑ ๊ฐ */
}
&.featured {
--card-border-color: gold; /* ์ง์ญ ๋ณ์ ์ ์ */
border-color: var(--card-border-color);
}
}
}
์ด ์ ๊ทผ ๋ฐฉ์์ ๊ฐ๋ ฅํ ํ ๋ง ์ค์ ๋ฐ ์ฌ์ฉ์ ์ ์๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ฉฐ, DOM์ ์ฌ๋ฌ ์์ค์์ ์์, ๊ธ๊ผด ๋๋ ๊ฐ๊ฒฉ์ ์กฐ์ ํ ์ ์์ด ์คํ์ผ์ํธ๋ฅผ ๋ค์ํ ๋์์ธ ์๊ตฌ ์ฌํญ๊ณผ ๋ฌธํ์ ๋ฏธํ์ ๋งค์ฐ ์ ์ ๊ฐ๋ฅํ๊ฒ ๋ง๋ญ๋๋ค.
์บ์ค์ผ์ด๋ ๋ ์ด์ด(@layer)์ ์ค์ฒฉ ๊ฒฐํฉํ๊ธฐ
CSS ์บ์ค์ผ์ด๋ ๋ ์ด์ด(`@layer`) ์ ์์ ๊ฐ๋ฐ์๊ฐ CSS ์บ์ค์ผ์ด๋์์ ๋ ์ด์ด์ ์์๋ฅผ ๋ช ์์ ์ผ๋ก ์ ์ํ ์ ์๊ฒ ํ์ฌ ์คํ์ผ ์ฐ์ ์์์ ๋ํ ๋ ํฐ ์ ์ด๊ถ์ ์ ๊ณตํฉ๋๋ค. ์ค์ฒฉ์ ์บ์ค์ผ์ด๋ ๋ ์ด์ด ๋ด์์ ์ฌ์ฉํ์ฌ ๋ ์ด์ด ์์๋ฅผ ์ ์งํ๋ฉด์ ์ปดํฌ๋ํธ๋ณ ์คํ์ผ์ ๋์ฑ ์ฒด๊ณ์ ์ผ๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค:
@layer base, components, utilities;
@layer components {
.button {
background-color: blue;
color: white;
&:hover {
background-color: darkblue;
}
&.outline {
background-color: transparent;
border: 1px solid blue;
color: blue;
}
}
}
์ด ์กฐํฉ์ ๊ตฌ์กฐ(์ค์ฒฉ์ ํตํด)์ ์ฐ์ ์์(๋ ์ด์ด๋ฅผ ํตํด) ๋ชจ๋์ ๋ํด ๋น๊ตํ ์ ์๋ ์ ์ด๋ ฅ์ ์ ๊ณตํ์ฌ, ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ ๋ค์ํ ๊ธ๋ก๋ฒ ํ์์ ์ฌ์ฉ๋๋ ๋์์ธ ์์คํ ์ ์ค์ํ ๋งค์ฐ ๊ฒฌ๊ณ ํ๊ณ ์์ธก ๊ฐ๋ฅํ ์คํ์ผ์ํธ๋ฅผ ๋ง๋ญ๋๋ค.
Shadow DOM ๋ฐ ์น ์ปดํฌ๋ํธ์ ํจ๊ป ์์ ํ๊ธฐ
Shadow DOM์ ํ์ฉํ๋ ์น ์ปดํฌ๋ํธ๋ ์บก์ํ๋๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ UI ์์๋ฅผ ์ ๊ณตํฉ๋๋ค. Shadow DOM ๋ด์ ์คํ์ผ์ ์ผ๋ฐ์ ์ผ๋ก ํด๋น ์ปดํฌ๋ํธ๋ก ๋ฒ์๊ฐ ์ง์ ๋ฉ๋๋ค. CSS ์ค์ฒฉ์ ์ปดํฌ๋ํธ์ ๋ด๋ถ ์คํ์ผ์ํธ ์ปจํ ์คํธ ๋ด์์ ์ฌ์ ํ ์ ์ฉ๋๋ฉฐ, ์ปดํฌ๋ํธ์ ๋ด๋ถ ๊ตฌ์กฐ์ ๋ํด ๋์ผํ ๊ตฌ์กฐ์ ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
Shadow DOM์ ๊ดํตํ๊ฑฐ๋ ์ฌ๋กฏ์ ์ํฅ์ ๋ฏธ์น๋ ์คํ์ผ์ ๊ฒฝ์ฐ, CSS ํํธ(`::part()`)์ ์ฌ์ฉ์ ์ง์ ์์ฑ์ด ์ธ๋ถ์์์ ์ฌ์ฉ์ ์ ์๋ฅผ ์ํ ์ฃผ์ ๋ฉ์ปค๋์ฆ์ผ๋ก ๋จ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ ์ค์ฒฉ์ ์ญํ ์ Shadow DOM *๋ด๋ถ*์ ์คํ์ผ์ ๊ตฌ์ฑํ์ฌ ์ปดํฌ๋ํธ์ ๋ด๋ถ CSS๋ฅผ ๋ ๊น๋ํ๊ฒ ๋ง๋๋ ๊ฒ์ ๋๋ค.
๊น์ ์ค์ฒฉ์ ์ฑ๋ฅ ์ํฅ
๊น์ ์ค์ฒฉ์ ์ ํ์ ๋ช ์๋๋ฅผ ์ฆ๊ฐ์ํฌ ์ ์์ง๋ง, ํ๋ ๋ธ๋ผ์ฐ์ ์์ง์ ๊ณ ๋๋ก ์ต์ ํ๋์ด ์์ต๋๋ค. ๋ ๋๋ง์ ๋ํ ๊น๊ฒ ์ค์ฒฉ๋ ์ ํ์์ ์ฑ๋ฅ ์ํฅ์ ๋ณต์กํ ๋ ์ด์์, ๊ณผ๋ํ ๋ฆฌํ๋ก์ฐ ๋๋ ๋นํจ์จ์ ์ธ JavaScript์ ๊ฐ์ ๋ค๋ฅธ ์์ธ์ ๋นํด ์ผ๋ฐ์ ์ผ๋ก ๋ฏธ๋ฏธํฉ๋๋ค. ๊น์ ์ค์ฒฉ์ ์ฃผ์ ์ฐ๋ ค๋ ์ ์ง๋ณด์์ฑ๊ณผ ๋ช ์๋ ๊ด๋ฆฌ์ด์ง, ์์ ๋ ๋๋ง ์๋๊ฐ ์๋๋๋ค. ๊ทธ๋ฌ๋ ์ง๋์น๊ฒ ๋ณต์กํ๊ฑฐ๋ ์ค๋ณต๋ ์ ํ์๋ฅผ ํผํ๋ ๊ฒ์ ์ผ๋ฐ์ ์ธ ํจ์จ์ฑ๊ณผ ๋ช ํ์ฑ์ ์ํด ํญ์ ์ข์ ์ต๊ด์ ๋๋ค.
CSS์ ๋ฏธ๋: ์์ผ๋ก์ ์ ๋ง
๋ค์ดํฐ๋ธ CSS ์ค์ฒฉ์ ๋์ ์ CSS๊ฐ ๊ฒฌ๊ณ ํ๊ณ ๊ฐ๋ ฅํ ์คํ์ผ๋ง ์ธ์ด๋ก์ ๊ณ์ ์งํํ๊ณ ์์์ ๋ณด์ฌ์ฃผ๋ ์ค์ํ ์ด์ ํ์ ๋๋ค. ์ด๋ ๊ฐ๋ฐ์์๊ฒ ์คํ์ผ๋ง ๋ฉ์ปค๋์ฆ์ ๋ํ ๋ ์ง์ ์ ์ธ ์ ์ด๊ถ์ ๋ถ์ฌํ์ฌ ๊ธฐ๋ณธ์ ์ธ ์์ ์ ๋ํ ์ธ๋ถ ๋๊ตฌ ์์กด๋๋ฅผ ์ค์ด๋ ์ถ์ธ๋ฅผ ๋ฐ์ํฉ๋๋ค.
CSS ์ํน ๊ทธ๋ฃน์ ์ค์ฒฉ์ ๋ํ ์ถ๊ฐ ๊ฐ์ , ๋ ๊ณ ๊ธ ์ ํ์ ๊ธฐ๋ฅ, ๊ทธ๋ฆฌ๊ณ ์บ์ค์ผ์ด๋๋ฅผ ๊ด๋ฆฌํ๋ ๋์ฑ ์ ๊ตํ ๋ฐฉ๋ฒ์ ํฌํจํ์ฌ ์๋ก์ด ๊ธฐ๋ฅ์ ๊ณ์ ํ์ํ๊ณ ํ์คํํ๊ณ ์์ต๋๋ค. ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์ ์ปค๋ฎค๋ํฐ ํผ๋๋ฐฑ์ ์ด๋ฌํ ๋ฏธ๋ ์ฌ์์ ํ์ฑํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํ๋ฉฐ, CSS๊ฐ ํ๋์ ์ด๊ณ ๋์ ์ธ ์น ๊ฒฝํ์ ๊ตฌ์ถํ๋ ์ค์ ์๊ตฌ ์ฌํญ์ ๊ณ์ ์ถฉ์กฑํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
์ค์ฒฉ๊ณผ ๊ฐ์ ๋ค์ดํฐ๋ธ CSS ๊ธฐ๋ฅ์ ์์ฉํ๋ ๊ฒ์ ๋ ํ์คํ๋๊ณ ์ํธ ์ด์ฉ ๊ฐ๋ฅํ ์น์ ๊ธฐ์ฌํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด๋ ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ๋ฅผ ๊ฐ์ํํ๊ณ ์ ๊ท ์ง์ ์์ ํ์ต ๊ณก์ ์ ์ค์ฌ, ๋ ๋์ ๊ตญ์ ์ ์ฒญ์ค์๊ฒ ์น ๊ฐ๋ฐ์ ๋ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๊ฒ ๋ง๋ญ๋๋ค.
๊ฒฐ๋ก : ์ ์ธ๊ณ ๊ฐ๋ฐ์ ์ญ๋ ๊ฐํ
CSS ์ค์ฒฉ ๊ท์น์ ๋จ์ํ ๋ฌธ๋ฒ์ ์คํ(syntactic sugar) ์ด์์ ๋๋ค. ์ด๋ ์ฐ๋ฆฌ์ ์คํ์ผ์ํธ์ ์๋ก์ด ์์ค์ ๊ตฌ์กฐ, ๊ฐ๋ ์ฑ, ํจ์จ์ฑ์ ๊ฐ์ ธ๋ค์ฃผ๋ ๊ทผ๋ณธ์ ์ธ ํฅ์์ ๋๋ค. ๊ฐ๋ฐ์๊ฐ ๊ด๋ จ ์คํ์ผ์ ์ง๊ด์ ์ผ๋ก ๊ทธ๋ฃนํํ ์ ์๊ฒ ํจ์ผ๋ก์จ, ๋ณต์กํ UI ์ปดํฌ๋ํธ ๊ด๋ฆฌ๋ฅผ ๋จ์ํํ๊ณ , ์ค๋ณต์ ์ค์ด๋ฉฐ, ๋ ๊ฐ์ํ๋ ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ์ด์งํฉ๋๋ค.
๋ช ์๋์ ๋ฏธ์น๋ ์ํฅ, ํนํ `&`์ ๋ช ์์ ์ฌ์ฉ์ ๋ํ ์ ์คํ ๊ณ ๋ ค๊ฐ ํ์ํ์ง๋ง, ๊ทธ ๋ฉ์ปค๋์ฆ์ ์ดํดํ๋ฉด ๊ฐ๋ฐ์๋ ๋ ์์ธก ๊ฐ๋ฅํ๊ณ ์ ์ง๋ณด์ ๊ฐ๋ฅํ CSS๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ ์ฒ๋ฆฌ๊ธฐ ์์กด์ ์ธ ์ค์ฒฉ์์ ๋ค์ดํฐ๋ธ ๋ธ๋ผ์ฐ์ ์ง์์ผ๋ก์ ์ ํ์ ๋ ์ ๋ฅํ๊ณ ์๊ธ์์กฑ์ ์ธ CSS ์ํ๊ณ๋ก์ ์์ง์์ ์๋ฆฌ๋ ์ค์ถ์ ์ธ ์๊ฐ์ ๋๋ค.
์ ์ธ๊ณ์ ํ๋ก ํธ์๋ ์ ๋ฌธ๊ฐ๋ค์๊ฒ CSS ์ค์ฒฉ์ ์์ฉํ๋ ๊ฒ์ ๋ ๊ฒฌ๊ณ ํ๊ณ , ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ, ์ฆ๊ฑฐ์ด ์ฌ์ฉ์ ๊ฒฝํ์ ๋ง๋๋ ํ ๊ฑธ์์ ๋๋ค. ์ด๋ฌํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ฑํํ๊ณ ๋ช ์๋์ ๋ฏธ๋ฌํ ์ฐจ์ด๋ฅผ ์ดํดํจ์ผ๋ก์จ, ์ด ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ์๊ฐ์ ์ํ์ ๊ฒฌ๋๊ณ ์ ์ธ๊ณ์ ๋ค์ํ ์ฌ์ฉ์ ์๊ตฌ๋ฅผ ์ถฉ์กฑ์ํค๋ ๋ ๊นจ๋ํ๊ณ ํจ์จ์ ์ด๋ฉฐ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.