CSS ์ปจํ ์ด๋ ์ฟผ๋ฆฌ ์ด๋ฆ ๋ฒ์ ์ง์ ์ ํตํด ๊ฒฉ๋ฆฌ๋๊ณ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ ์คํ์ผ๋ง์ ํ์ ํ๊ตฌํฉ๋๋ค. ์คํ์ผ ์ถฉ๋์ ๋ฐฉ์งํ๊ณ ๊ฐ๋ ฅํ๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ UI ์์๋ฅผ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์.
CSS ์ปจํ ์ด๋ ์ฟผ๋ฆฌ ์ด๋ฆ ๋ฒ์ ์ง์ : ์ปจํ ์ด๋ ์ฐธ์กฐ ๊ฒฉ๋ฆฌ ๊ตฌํ
์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ CSS ์คํ์ผ ๊ด๋ฆฌ๊ฐ ์ ์ ๋ ์ด๋ ค์์ง๊ณ ์์ต๋๋ค. ํนํ ๊น๋ค๋ก์ด ์์ญ ์ค ํ๋๋ ์ปจํ ์ด๋ ์ฟผ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ปดํฌ๋ํธ ๋ด์ ์ ์ฉ๋ ์คํ์ผ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๋ถ๋ถ์ ์๋์น ์๊ฒ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ก ํ๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ์ปจํ ์ด๋ ์ฐธ์กฐ ๊ฒฉ๋ฆฌ๋ผ๊ณ ๋ ํ๋ CSS ์ปจํ ์ด๋ ์ฟผ๋ฆฌ ์ด๋ฆ ๋ฒ์ ์ง์ ์ด ํ์ํ ์ด์ ์ ๋๋ค.
๋ฌธ์ ์ : ์ปจํ ์ด๋ ์ฟผ๋ฆฌ ๋ด ์คํ์ผ ์ถฉ๋
์ปจํ ์ด๋ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์์๊ฐ ๋ทฐํฌํธ๊ฐ ์๋ ์ปจํ ์ด๋ ์์์ ํฌ๊ธฐ ๋๋ ๊ธฐํ ํน์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ์คํ์ผ์ ์กฐ์ ํ ์ ์์ต๋๋ค. ๋งค์ฐ ๊ฐ๋ ฅํ์ง๋ง ์ฃผ์ํ์ง ์์ผ๋ฉด ์๊ธฐ์น ์์ ์คํ์ผ ์ถฉ๋์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ๊ฐ์ ์์ฒด ์ปจํ ์ด๋ ์ฟผ๋ฆฌ๊ฐ ์๋ ์นด๋ ์ปดํฌ๋ํธ์ ๋ ์ธ์คํด์ค๊ฐ ์๋ ์๋๋ฆฌ์ค๋ฅผ ์๊ฐํด ๋ณด์ธ์. ๋ ์นด๋ ๋ชจ๋ ๋ด๋ถ ์์์ ๋์ผํ ํด๋์ค ์ด๋ฆ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํ ์ปจํ ์ด๋ ์ฟผ๋ฆฌ์ ์ํด ์ ์ฉ๋ ์คํ์ผ์ด ์๋์น ์๊ฒ ๋ค๋ฅธ ์ปจํ ์ด๋๋ก ๋์ถ๋ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ์ ์ธ๊ณ์ ์ ์ ์ ํ์ ํ๋งคํ๋ ์น์ฌ์ดํธ๋ฅผ ์์ํด ๋ณด์ธ์. ์ง์ญ๋ง๋ค ์ ํ ์นด๋์ ์ ํธํ๋ ์๊ฐ์ ์คํ์ผ์ด ๋ค๋ฆ ๋๋ค. CSS์ ์ฃผ์ํ์ง ์์ผ๋ฉด ์ ๋ฝ ์ฌ์ฉ์๋ฅผ ์ํด ์ค๊ณ๋ ์คํ์ผ ๋ณ๊ฒฝ ์ฌํญ์ด ์์์ ์ฌ์ฉ์๊ฐ ๋ณด๋ ์ ํ ์นด๋์ ๋ชจ์์ ์๋์น ์๊ฒ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์ด๋ ๋ค์ํ ํ๋ฉด ํฌ๊ธฐ์ ๋ ์ด์์์ ๋ง๊ฒ ์กฐ์ ํด์ผ ํ๋ ์ ํ ์นด๋์ ๊ฐ์ ์ปดํฌ๋ํธ์ ๊ด๋ จ์ด ์์ผ๋ฉฐ, ์ ์ฌ์ ์ผ๋ก ๋ค๋ฅธ ์ปจํ ์คํธ์์ ์คํ์ผ์ด ์ถฉ๋ํ ์ ์์ต๋๋ค. ์ ์ ํ ๊ฒฉ๋ฆฌ๊ฐ ์์ผ๋ฉด ๋ค์ํ ์ง์ญ์์ ์ผ๊ด๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ์งํ๋ ๊ฒ์ด ์ ๋ชฝ์ด ๋ฉ๋๋ค.
์ปจํ ์ด๋ ์ฟผ๋ฆฌ ์ด๋ฆ ๋ฒ์ ์ง์ ์ดํด
์ปจํ ์ด๋ ์ฟผ๋ฆฌ ์ด๋ฆ ๋ฒ์ ์ง์ ์ ์ปจํ ์ด๋ ์ฟผ๋ฆฌ์ ๋ฒ์๋ฅผ ๊ฒฉ๋ฆฌํ์ฌ ์คํ์ผ ์ถฉ๋์ ๋ฐฉ์งํ๊ณ ์ปดํฌ๋ํธ ๋ด์ ์ ์ฉ๋ ์คํ์ผ์ด ํด๋น ์ปดํฌ๋ํธ์๋ง ์ํฅ์ ๋ฏธ์น๋๋ก ํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค. ํต์ฌ ๊ฐ๋ ์ ์ปจํ ์ด๋ ์์์ ์ด๋ฆ์ ์ฐ๊ฒฐํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ด ์ด๋ฆ์ ์ปจํ ์ด๋ ์ฟผ๋ฆฌ ๋ด์์ ์ฌ์ฉ๋๋ ์ ํ๊ธฐ์ ์ผ๋ถ๊ฐ ๋์ด ๋ฒ์๋ฅผ ์ ํํฉ๋๋ค.
ํ์ฌ ์ปจํ ์ด๋ ์ฟผ๋ฆฌ ๋ฒ์ ์ง์ ์ ๋ํ '์ด๋ฆ'์ ์ง์ ์ ์ํ๋ ํ์คํ๋ CSS ์์ฑ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ CSS ๋ณ์(์ฌ์ฉ์ ์ง์ ์์ฑ)์ ์๋ฆฌํ ์ ํ๊ธฐ ์ ๋ต์ ํจ๊ป ์ฌ์ฉํ์ฌ ๋์ผํ ํจ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
์ปจํ ์ด๋ ์ฐธ์กฐ ๊ฒฉ๋ฆฌ ๊ตฌํ ๊ธฐ์
CSS ๋ณ์ ๋ฐ ์ฐฝ์์ ์ธ ์ ํ๊ธฐ ์ ๋ต์ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋ ์ฐธ์กฐ ๊ฒฉ๋ฆฌ๋ฅผ ๊ตฌํํ๋ ๋ช ๊ฐ์ง ๊ธฐ์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1. CSS ๋ณ์๋ฅผ ๋ฒ์ ์๋ณ์๋ก ์ฌ์ฉ
์ด ์ ๊ทผ ๋ฐฉ์์ CSS ๋ณ์๋ฅผ ํ์ฉํ์ฌ ๊ฐ ์ปจํ ์ด๋ ์์์ ๋ํ ๊ณ ์ ํ ์๋ณ์๋ฅผ ๋ง๋ญ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด๋ฌํ ์๋ณ์๋ฅผ ์ปจํ ์ด๋ ์ฟผ๋ฆฌ ์ ํ๊ธฐ์์ ์ฌ์ฉํ์ฌ ์คํ์ผ ๋ฒ์๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
HTML:
<div class="card-container" style="--card-id: card1;">
<div class="card">
<h2 class="card-title">Product A</h2>
<p class="card-description">Description of Product A.</p>
</div>
</div>
<div class="card-container" style="--card-id: card2;">
<div class="card">
<h2 class="card-title">Product B</h2>
<p class="card-description">Description of Product B.</p>
</div>
</div>
CSS:
.card-container {
container: card-container / inline-size;
}
@container card-container (max-width: 300px) {
[style*="--card-id: card1;"] .card {
background-color: #f0f0f0;
}
[style*="--card-id: card2;"] .card {
background-color: #e0e0e0;
}
}
์ด ์์์๋ ๊ฐ .card-container์ CSS ๋ณ์ --card-id๋ฅผ ์ค์ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ปจํ
์ด๋ ์ฟผ๋ฆฌ๋ ์์ ์์์ --card-id ๋ณ์ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ํน์ .card ์์๋ฅผ ๋์์ผ๋ก ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ปจํ
์ด๋ ์ฟผ๋ฆฌ ๋ด์ ์ ์ฉ๋ ์คํ์ผ์ด ์๋ํ ์นด๋์๋ง ์ํฅ์ ๋ฏธ์น๋๋ก ํ ์ ์์ต๋๋ค.
์ค์ ๊ณ ๋ ค ์ฌํญ:
style*์์ฑ ์ ํ๊ธฐ๋ ์คํ์ผ ์์ฑ์ ์ง์ ๋ ํ์ ๋ฌธ์์ด์ด ํฌํจ๋์ด ์๋์ง ํ์ธํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๊ธฐ๋ฅ์ ์ด์ง๋ง ๊ฐ์ฅ ์ฑ๋ฅ์ด ์ข์ ์ ํ๊ธฐ๋ ์๋๋๋ค.- ๊ณ ์ ํ ID๋ฅผ ์์ฑํ๋ ๊ฒ์ ํนํ ๋์ ์ ํ๋ฆฌ์ผ์ด์ (์: JavaScript ์ฌ์ฉ)์์ ์ถฉ๋์ ๋ฐฉ์งํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
- ์ด ์ ๊ทผ ๋ฐฉ์์ ์ธ๋ผ์ธ ์คํ์ผ์ ์์กดํฉ๋๋ค. ๋ฒ์ ์ง์ ์๋ ํ์ฉ๋์ง๋ง ์ธ๋ผ์ธ ์คํ์ผ์ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ๋ฉด ์ ์ง ๊ด๋ฆฌ์ฑ์ด ์ ํ๋ ์ ์์ต๋๋ค. CSS-in-JS ์๋ฃจ์ ๋๋ ์๋ฒ์ธก ๋ ๋๋ง์ผ๋ก ์ด๋ฌํ ์ธ๋ผ์ธ ์คํ์ผ์ ์์ฑํ๋ ๊ฒ์ ๊ณ ๋ คํด ๋ณด์ธ์.
2. ๋ฐ์ดํฐ ์์ฑ์ ๋ฒ์ ์๋ณ์๋ก ์ฌ์ฉ
CSS ๋ณ์์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐ์ดํฐ ์์ฑ์ ์ฌ์ฉํ์ฌ ์ปจํ
์ด๋ ์์์ ๋ํ ๊ณ ์ ํ ์๋ณ์๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ ๋ฒ์ ์๋ณ์๋ฅผ style ์์ฑ์์ ๋ถ๋ฆฌํ๋ฏ๋ก ์ข
์ข
์ ํธ๋ฉ๋๋ค.
HTML:
<div class="card-container" data-card-id="card1">
<div class="card">
<h2 class="card-title">Product A</h2>
<p class="card-description">Description of Product A.</p>
</div>
</div>
<div class="card-container" data-card-id="card2">
<div class="card">
<h2 class="card-title">Product B</h2>
<p class="card-description">Description of Product B.</p>
</div>
</div>
CSS:
.card-container {
container: card-container / inline-size;
}
@container card-container (max-width: 300px) {
[data-card-id="card1"] .card {
background-color: #f0f0f0;
}
[data-card-id="card2"] .card {
background-color: #e0e0e0;
}
}
์ฌ๊ธฐ์๋ data-card-id ์์ฑ์ ์ฌ์ฉํ์ฌ ๊ฐ ์นด๋ ์ปจํ
์ด๋๋ฅผ ๊ณ ์ ํ๊ฒ ์๋ณํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ CSS ์ ํ๊ธฐ๋ ์ผ์นํ๋ data-card-id๊ฐ ์๋ ์ปจํ
์ด๋ ๋ด์์ .card ์์๋ฅผ ๋์์ผ๋ก ํฉ๋๋ค. ์ด๋ ์ปจํ
์ด๋ ์ฟผ๋ฆฌ์ ๋ฒ์๋ฅผ ์ง์ ํ๋ ๋ ๊นจ๋ํ๊ณ ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
์ฅ์ :
style*์์ฑ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ๊ฐ๋ ์ฑ์ด ๋๊ณ ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ฝ์ต๋๋ค.style*์ ๊ด๋ จ๋ ์ ์ฌ์ ์ธ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.- ์คํ์ผ๋ง ๊ด๋ จ ์ฌํญ์ ํ๋ ์ ํ ์ด์ ๋ ์ด์ด์์ ๋ถ๋ฆฌํฉ๋๋ค.
3. CSS ๋ชจ๋ ๋ฐ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ ํ์ฉ
์ผ๋ฐ์ ์ผ๋ก CSS ๋ชจ๋ ๋ฐ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ๋ ๋ช ๋ช ๊ท์น๊ณผ ๋ฒ์๊ฐ ์ง์ ๋ ์คํ์ผ๋ง์ ํตํด ๊ณ ์ ํ ๊ฒฉ๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ปจํ ์ด๋ ์ฟผ๋ฆฌ์ ๊ฒฐํฉํ๋ฉด ์ด ์ ๊ทผ ๋ฐฉ์์ด ๋งค์ฐ ํจ๊ณผ์ ์ผ ์ ์์ต๋๋ค.
CSS ๋ชจ๋์ ์ฌ์ฉํ๋ React ์ปดํฌ๋ํธ๋ฅผ ์๊ฐํด ๋ณด์ธ์.
// Card.module.css
.container {
container: card-container / inline-size;
}
.card {
/* Default card styles */
}
@container card-container (max-width: 300px) {
.card {
background-color: #f0f0f0;
}
}
// Card.jsx
import styles from './Card.module.css';
function Card(props) {
return (
<div className={styles.container}>
<div className={styles.card}>
<h2 className={styles.title}>{props.title}</h2>
<p className={styles.description}>{props.description}</p>
</div>
</div>
);
}
export default Card;
์ด ์์์๋ CSS ๋ชจ๋์ด Card.module.css ๋ด์ ๊ฐ CSS ๊ท์น์ ๋ํด ๊ณ ์ ํ ํด๋์ค ์ด๋ฆ์ ์๋์ผ๋ก ์์ฑํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด .card ์์์ ์ ์ฉ๋ ์คํ์ผ์ด ํด๋น ํน์ ์ปดํฌ๋ํธ ์ธ์คํด์ค ๋ด์ .card ์์์๋ง ์ ์ฉ๋ฉ๋๋ค. ์ปจํ
์ด๋ ์ฟผ๋ฆฌ์ ๊ฒฐํฉํ๋ฉด ์คํ์ผ์ด ์ปดํฌ๋ํธ๋ก ๊ฒฉ๋ฆฌ๋๊ณ ์ปจํ
์ด๋์ ํฌ๊ธฐ์ ๋ฐ๋ผ ์กฐ์ ๋ฉ๋๋ค.
CSS ๋ชจ๋์ ์ด์ :
- ์๋ ์ด๋ฆ ๋ฒ์ ์ง์ : ํด๋์ค ์ด๋ฆ ์ถฉ๋์ ๋ฐฉ์งํฉ๋๋ค.
- ์ ์ง ๊ด๋ฆฌ์ฑ ํฅ์: ์คํ์ผ์ ์ํ ์ปดํฌ๋ํธ์ ๋ก์ปฌํ๋ฉ๋๋ค.
- ์ฝ๋ ๊ตฌ์ฑ ๊ฐ์ : ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ๋ฅผ ์ด์งํฉ๋๋ค.
4. Shadow DOM
Shadow DOM์ ๊ฐ๋ ฅํ ์คํ์ผ ์บก์ํ๋ฅผ ์ ๊ณตํฉ๋๋ค. Shadow DOM ํธ๋ฆฌ ๋ด์ ์ ์๋ ์คํ์ผ์ ์ฃผ๋ณ ๋ฌธ์๋ก ๋์ถ๋์ง ์์ผ๋ฉฐ ์ฃผ๋ณ ๋ฌธ์์ ์คํ์ผ์ Shadow DOM ๋ด์ ์คํ์ผ์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค(CSS ํํธ ๋๋ ์ฌ์ฉ์ ์ง์ ์์ฑ์ ์ฌ์ฉํ์ฌ ๋ช ์์ ์ผ๋ก ๊ตฌ์ฑ๋์ง ์์ ๊ฒฝ์ฐ).
Shadow DOM์ ์ค์ ํ๊ธฐ๊ฐ ๋ ๋ณต์กํ์ง๋ง ๊ฐ์ฅ ๊ฐ๋ ฅํ ํํ์ ์คํ์ผ ๊ฒฉ๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก JavaScript๋ฅผ ์ฌ์ฉํ์ฌ Shadow DOM์ ๋ง๋ค๊ณ ๊ด๋ฆฌํฉ๋๋ค.
// JavaScript
const cardContainer = document.querySelector('.card-container');
const shadow = cardContainer.attachShadow({mode: 'open'});
const cardTemplate = `
<style>
:host {
display: block;
container: card-container / inline-size;
}
.card {
/* Default card styles */
}
@container card-container (max-width: 300px) {
.card {
background-color: #f0f0f0;
}
}
</style>
<div class="card">
<h2 class="card-title">Product Title</h2>
<p class="card-description">Product description.</p>
</div>
`;
shadow.innerHTML = cardTemplate;
์ด ์์์๋ ์นด๋์ ์คํ์ผ๊ณผ ๊ตฌ์กฐ๊ฐ Shadow DOM ๋ด์ ์บก์ํ๋ฉ๋๋ค. ์ปจํ
์ด๋ ์ฟผ๋ฆฌ๋ Shadow DOM์ ์คํ์ผ ํ๊ทธ ๋ด์ ์ ์๋์ด ์๋ ํธ๋ฆฌ ๋ด์ ์์์๋ง ์ํฅ์ ๋ฏธ์น๋๋ก ํฉ๋๋ค. :host ์ ํ๊ธฐ๋ ์ฌ์ฉ์ ์ง์ ์์ ์์ฒด๋ฅผ ๋์์ผ๋ก ์ง์ ํ์ฌ ์์์ ์ปจํ
์ด๋ ์ปจํ
์คํธ๋ฅผ ์ ์ฉํ ์ ์์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๊ฐ์ฅ ๋์ ์์ค์ ์คํ์ผ ๊ฒฉ๋ฆฌ๋ฅผ ์ ๊ณตํ์ง๋ง ๊ฐ์ฅ ๋ณต์กํ ๊ตฌํ์ด๊ธฐ๋ ํฉ๋๋ค.
์ฌ๋ฐ๋ฅธ ๊ธฐ์ ์ ํ
์ปจํ ์ด๋ ์ฐธ์กฐ ๊ฒฉ๋ฆฌ์ ๋ํ ์ต์์ ์ ๊ทผ ๋ฐฉ์์ ํ๋ก์ ํธ์ ํน์ ์๊ตฌ ์ฌํญ๊ณผ ๊ธฐ์กด ์ํคํ ์ฒ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
- ๊ฐ๋จํ ํ๋ก์ ํธ: CSS์ ํจ๊ป ๋ฐ์ดํฐ ์์ฑ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋น๊ต์ ๊ฐ๋จํ ์คํ์ผ๋ง ์๊ตฌ ์ฌํญ์ด ์๋ ์๊ท๋ชจ ํ๋ก์ ํธ๋ฅผ ์์ํ๊ธฐ์ ์ข์ ๋ฐฉ๋ฒ์ ๋๋ค.
- ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ: CSS ๋ชจ๋ ๋๋ ์ด์ ์ ์ฌํ ์๋ฃจ์ ์ React, Vue ๋๋ Angular์ ๊ฐ์ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ ํ๋ก์ ํธ์ ์ ํฉํฉ๋๋ค.
- ๊ณ ๋๋ก ์บก์ํ๋ ์ปดํฌ๋ํธ: Shadow DOM์ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๊ฒฉ๋ฆฌ๋ฅผ ์ ๊ณตํ์ง๋ง ์ค์ ์ด ๋ ๋ณต์กํ๊ณ ๋ชจ๋ ์ฌ์ฉ ์ฌ๋ก์ ์ ํฉํ์ง ์์ ์ ์์ต๋๋ค.
- ๋ ๊ฑฐ์ ํ๋ก์ ํธ: CSS ๋ณ์๋ฅผ ๋ฒ์ ์๋ณ์๋ก ๋์ ํ๋ฉด ๋ ์ฌ์ด ๋ง์ด๊ทธ๋ ์ด์ ๊ฒฝ๋ก๊ฐ ๋ ์ ์์ต๋๋ค.
์ปจํ ์ด๋ ์ฟผ๋ฆฌ ์ด๋ฆ ๋ฒ์ ์ง์ ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
์ผ๊ด๋๊ณ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅํ ์คํ์ผ๋ง์ ๋ณด์ฅํ๋ ค๋ฉด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด์ธ์.
- ์ผ๊ด๋ ๋ช
๋ช
๊ท์น ์ฌ์ฉ: ํผ๋์ ๋ฐฉ์งํ๊ธฐ ์ํด CSS ๋ณ์ ๋๋ ๋ฐ์ดํฐ ์์ฑ์ ๋ํ ๋ช
ํํ ๋ช
๋ช
๊ท์น์ ์ค์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ชจ๋ ์ปจํ
์ด๋ ๊ด๋ จ ๋ณ์์ ์ ๋์ฌ๋ฅผ
--container-๋ก ์ง์ ํฉ๋๋ค. - ๊ณ ์ ํ ID ์์ฑ: ๋ฒ์ ์ง์ ์ ์ฌ์ฉ๋๋ ID๊ฐ ์ปดํฌ๋ํธ์ ๋ชจ๋ ์ธ์คํด์ค์์ ๊ณ ์ ํ์ง ํ์ธํฉ๋๋ค. UUID ๋๋ ์ด์ ์ ์ฌํ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ์ง์ ์ผ๋ก ์์ ID๋ฅผ ์์ฑํฉ๋๋ค.
- ๋ฒ์ ์ง์ ์ ๋ต ๋ฌธ์ํ: ๋ชจ๋ ๊ฐ๋ฐ์๊ฐ ์ง์นจ์ ์ดํดํ๊ณ ๋ฐ๋ฅด๋๋ก ํ๋ก์ ํธ์ ์คํ์ผ ๊ฐ์ด๋์ ์ ํํ ๋ฒ์ ์ง์ ์ ๋ต์ ๋ช ํํ๊ฒ ๋ฌธ์ํํฉ๋๋ค.
- ์ฒ ์ ํ ํ ์คํธ: ์ปจํ ์ด๋ ์ฟผ๋ฆฌ๊ฐ ์์๋๋ก ์๋ํ๊ณ ์คํ์ผ ์ถฉ๋์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด ๋ค์ํ ์ปจํ ์คํธ์์ ์ปดํฌ๋ํธ๋ฅผ ์ฒ ์ ํ ํ ์คํธํฉ๋๋ค. ์๋ํ๋ ์๊ฐ์ ํ๊ท ํ ์คํธ๋ฅผ ๊ณ ๋ คํด ๋ณด์ธ์.
- ์ฑ๋ฅ ๊ณ ๋ ค: ์ ํํ ๋ฒ์ ์ง์ ๊ธฐ์ ์ ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ์ ์ํ์ธ์. ๋ ๋๋ง ์๋๋ฅผ ์ ํ์ํฌ ์ ์๋ ์ง๋์น๊ฒ ๋ณต์กํ ์ ํ๊ธฐ๋ฅผ ํผํ์ธ์.
๋จ์ํ ๋๋จธ: ๋ค์ํ ์ปจํ ์ด๋ ์์ฑ๊ณผ ํจ๊ป ์ปจํ ์ด๋ ์ฟผ๋ฆฌ ์ฌ์ฉ
์ปจํ
์ด๋ ์ฟผ๋ฆฌ๋ ์ข
์ข
์ปจํ
์ด๋์ ๋๋น์ ๋ง๊ฒ ์กฐ์ ํ๋ ๊ฒ๊ณผ ๊ด๋ จ์ด ์์ง๋ง ๋ค๋ฅธ ์ปจํ
์ด๋ ์์ฑ์ ๋ฐ์ํ ์๋ ์์ต๋๋ค. container-type ์์ฑ์ ๋ ๊ฐ์ง ์ฃผ์ ๊ฐ์ ์ ๊ณตํฉ๋๋ค.
size: ์ปจํ ์ด๋ ์ฟผ๋ฆฌ๋ ์ปจํ ์ด๋์ inline-size(๊ฐ๋ก ์ฐ๊ธฐ ๋ชจ๋์ ๋๋น)์ block-size(์ธ๋ก ์ฐ๊ธฐ ๋ชจ๋์ ๋์ด) ๋ชจ๋์ ๋ฐ์ํฉ๋๋ค.inline-size: ์ปจํ ์ด๋ ์ฟผ๋ฆฌ๋ ์ปจํ ์ด๋์ inline-size(๋๋น)์๋ง ๋ฐ์ํฉ๋๋ค.
container-type ์์ฑ์ ๊ณ ๊ธ ๋ธ๋ผ์ฐ์ API๊ฐ ํ์ํ layout, style ๋ฐ state์ ๊ฐ์ ๋ ๋ณต์กํ ๊ฐ๋ ํ์ฉํฉ๋๋ค. ์ด๋ ์ด ๋ฌธ์์ ๋ฒ์๋ฅผ ๋ฒ์ด๋์ง๋ง CSS๊ฐ ๋ฐ์ ํจ์ ๋ฐ๋ผ ํ๊ตฌํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
CSS ์ปจํ ์ด๋ ์ฟผ๋ฆฌ ๋ฒ์ ์ง์ ์ ๋ฏธ๋
์น ๊ฐ๋ฐ ์ปค๋ฎค๋ํฐ์์ ๊ฐ๋ ฅํ ์ปจํ ์ด๋ ์ฟผ๋ฆฌ ๋ฒ์ ์ง์ ์ ํ์์ฑ์ด ์ ์ ๋ ์ธ์๋๊ณ ์์ต๋๋ค. ํฅํ CSS ๋ฒ์ ์๋ ์ปจํ ์ด๋ ์ด๋ฆ ๋๋ ๋ฒ์๋ฅผ ์ ์ํ๋ ๋ ํ์คํ๋๊ณ ์ง์ ์ ์ธ ๋ฐฉ๋ฒ์ด ํฌํจ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํ๋ก์ธ์ค๊ฐ ๊ฐ์ํ๋๊ณ CSS ๋ณ์ ๋๋ ๋ฐ์ดํฐ ์์ฑ์ ์ฌ์ฉํ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ํ์ํ์ง ์์ต๋๋ค.
์ปจํ
์ด๋ ์ฟผ๋ฆฌ ๊ธฐ๋ฅ์ ๋ํ ์
๋ฐ์ดํธ๋ CSS Working Group์ ์ฌ์๊ณผ ๋ธ๋ผ์ฐ์ ๊ณต๊ธ์
์ฒด ๊ตฌํ์ ์ฃผ์ํ์ธ์. @container ๊ตฌ๋ฌธ๊ณผ ๊ฐ์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ง์์ ์ผ๋ก ๊ฐ์ ๋๊ณ ๊ฐ์ ๋๊ณ ์์ต๋๋ค.
๊ฒฐ๋ก
CSS ์ปจํ ์ด๋ ์ฟผ๋ฆฌ ์ด๋ฆ ๋ฒ์ ์ง์ ์ ๋ชจ๋์์ด๊ณ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅํ๋ฉฐ ์ถฉ๋ ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ์คํ์ผ ์ถฉ๋์ ๋ฌธ์ ์ ์ ์ดํดํ๊ณ ์ด ๊ฐ์ด๋์ ์ค๋ช ๋ ๊ธฐ์ ์ ๊ตฌํํจ์ผ๋ก์จ ์ปจํ ์ด๋ ์ฟผ๋ฆฌ๊ฐ ์๋ํ ๋๋ก ์๋ํ๊ณ ์ปดํฌ๋ํธ๊ฐ ๊ฒฉ๋ฆฌ๋๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๋๋ก ํ ์ ์์ต๋๋ค. ์น ๊ฐ๋ฐ์ด ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ ์ด๋ฌํ ๊ธฐ์ ์ ๋ง์คํฐํ๋ ๊ฒ์ ์ฌ์ฉ์๊ฐ ์ ์ธ๊ณ ์ด๋์ ์๋ ๋ค์ํ ์ปจํ ์คํธ์ ํ๋ฉด ํฌ๊ธฐ์ ์๋ฒฝํ๊ฒ ์ ์ํ๋ ํ์ฅ ๊ฐ๋ฅํ๊ณ ๊ฐ๋ ฅํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.