CSS ๋ค์คํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๋ ๊น๋ํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ์คํ์ผ์ํธ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋ณด์ธ์. ํฅ์๋ ๊ตฌ์ฑ๊ณผ ํ์ฅ์ฑ์ ์ํ ์ด์ , ๊ตฌ๋ฌธ, ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์์๋ณด์ธ์.
CSS ๋ค์คํ ๋ง์คํฐํ๊ธฐ: ํ์ฅ ๊ฐ๋ฅํ ํ๋ก์ ํธ๋ฅผ ์ํ ์คํ์ผ ๊ตฌ์ฑ
CSS ๋ค์คํ (Nesting)์ ๋ชจ๋ CSS์ ๋น๊ต์ ์๋กญ๊ณ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ผ๋ก, ์คํ์ผ์ํธ๋ฅผ ๋์ฑ ์ง๊ด์ ์ด๊ณ ์ฒด๊ณ์ ์ผ๋ก ๊ตฌ์ฑํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. CSS ๊ท์น์ ์๋ก ์ค์ฒฉ์ํฌ ์ ์๊ฒ ํจ์ผ๋ก์จ, HTML ๊ตฌ์กฐ๋ฅผ ๋ฐ์ํ๋ ๋ฐฉ์์ผ๋ก ์์์ ์คํ์ผ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ง๋ค์ด ๋ ๊น๋ํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
CSS ๋ค์คํ ์ด๋ ๋ฌด์์ธ๊ฐ?
์ ํต์ ์ผ๋ก CSS๋ ๊ฐ ์์๊ฐ ๋ฐ์ ํ๊ฒ ๊ด๋ จ๋์ด ์๋๋ผ๋ ๊ฐ๊ฐ์ ๋ํด ๋ณ๋์ ๊ท์น์ ์์ฑํด์ผ ํ์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ด๋น๊ฒ์ด์ ๋ฉ๋ด์ ๊ทธ ๋ชฉ๋ก ํญ๋ชฉ์ ์คํ์ผ์ ์ง์ ํ๋ ค๋ฉด ์ผ๋ฐ์ ์ผ๋ก ์ฌ๋ฌ ๊ฐ์ ๋ ๋ฆฝ์ ์ธ ๊ท์น์ ์์ฑํด์ผ ํฉ๋๋ค:
.nav {
/* ๋ด๋น๊ฒ์ด์
๋ฉ๋ด ์คํ์ผ */
}
.nav ul {
/* ์ ๋ ฌ๋์ง ์์ ๋ชฉ๋ก ์คํ์ผ */
}
.nav li {
/* ๋ชฉ๋ก ํญ๋ชฉ ์คํ์ผ */
}
.nav a {
/* ๋งํฌ ์คํ์ผ */
}
CSS ๋ค์คํ ์ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ๊ท์น๋ค์ ๋ถ๋ชจ ์ ํ์ ๋ด์ ์ค์ฒฉ์์ผ ๋ช ํํ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค:
.nav {
/* ๋ด๋น๊ฒ์ด์
๋ฉ๋ด ์คํ์ผ */
ul {
/* ์ ๋ ฌ๋์ง ์์ ๋ชฉ๋ก ์คํ์ผ */
li {
/* ๋ชฉ๋ก ํญ๋ชฉ ์คํ์ผ */
a {
/* ๋งํฌ ์คํ์ผ */
}
}
}
}
์ด๋ฌํ ์ค์ฒฉ ๊ตฌ์กฐ๋ ์์ ๊ฐ์ ๊ด๊ณ๋ฅผ ์๊ฐ์ ์ผ๋ก ๋ํ๋ด์ด ์ฝ๋๋ฅผ ๋ ์ฝ๊ฒ ์ฝ๊ณ ์ดํดํ ์ ์๊ฒ ํด์ค๋๋ค.
CSS ๋ค์คํ ์ ์ด์
CSS ๋ค์คํ ์ ๊ธฐ์กด CSS์ ๋นํด ์ฌ๋ฌ ๊ฐ์ง ์ด์ ์ ์ ๊ณตํฉ๋๋ค:
- ๊ฐ๋ ์ฑ ํฅ์: ์ค์ฒฉ ๊ตฌ์กฐ๋ ์์์ ์คํ์ผ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ ์ฝ๊ฒ ์ดํดํ ์ ์๊ฒ ํด์ค๋๋ค.
- ์ ์ง๋ณด์์ฑ ์ฆ๋: ์คํ์ผ์ด ์ด๋ฏธ HTML ๊ณ์ธต ๊ตฌ์กฐ์ ๋ฐ๋ผ ์ ๋ฆฌ๋์ด ์์ผ๋ฏ๋ก HTML ๊ตฌ์กฐ ๋ณ๊ฒฝ์ CSS์ ๋ฐ์ํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค.
- ์ฝ๋ ์ค๋ณต ๊ฐ์: ์ค์ฒฉ์ ํตํด ์ ํ์ ๋ฐ๋ณต์ ํ์์ฑ์ ์ค์ฌ ๋ ์งง๊ณ ๊ฐ๊ฒฐํ ์ฝ๋๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
- ๊ตฌ์ฑ ๊ฐํ: ๊ด๋ จ๋ ์คํ์ผ์ ํจ๊ป ๊ทธ๋ฃนํํจ์ผ๋ก์จ ๋ค์คํ ์ CSS ๊ฐ๋ฐ์ ์์ด ๋์ฑ ์ฒด๊ณ์ ์ด๊ณ ๊ตฌ์กฐํ๋ ์ ๊ทผ ๋ฐฉ์์ ์ด์งํฉ๋๋ค.
- ํ์ฅ์ฑ ํฅ์: ์ ์ ๋ฆฌ๋ CSS๋ ํฌ๊ณ ๋ณต์กํ ํ๋ก์ ํธ์ ํ์์ ์ ๋๋ค. ๋ค์คํ ์ ํ๋ก์ ํธ๊ฐ ์ฑ์ฅํจ์ ๋ฐ๋ผ ๋ช ํํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
CSS ๋ค์คํ ๊ตฌ๋ฌธ
CSS ๋ค์คํ ์ ๊ธฐ๋ณธ ๊ตฌ๋ฌธ์ ๋ถ๋ชจ ์ ํ์์ ์ค๊ดํธ ์์ CSS ๊ท์น์ ๋ฐฐ์นํ๋ ๊ฒ์ ๋๋ค. ์ค์ฒฉ๋ ๊ท์น์ ๋ถ๋ชจ ์์์ ํ์ ์์์๋ง ์ ์ฉ๋ฉ๋๋ค.
๊ธฐ๋ณธ ์ค์ฒฉ
์ด์ ์์ ์์ ๋ณด์ฌ์ค ๊ฒ์ฒ๋ผ, ํ์ ์์์ ๋ํ ๊ท์น์ ๋ถ๋ชจ ์ ํ์ ๋ด์ ์ง์ ์ค์ฒฉํ ์ ์์ต๋๋ค:
.container {
/* ์ปจํ
์ด๋ ์คํ์ผ */
.item {
/* ์ปจํ
์ด๋ ๋ด ์์ดํ
์คํ์ผ */
}
}
&
(์ฐํผ์๋) ์ ํ์
&
์ ํ์๋ ๋ถ๋ชจ ์ ํ์๋ฅผ ๋ํ๋
๋๋ค. ์ด๋ฅผ ํตํด ๋ถ๋ชจ ์์ ์์ฒด์ ์คํ์ผ์ ์ ์ฉํ๊ฑฐ๋ ๋ถ๋ชจ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ ๋ณต์กํ ์ ํ์๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ด๊ฒ์ ํนํ ์์ฌ ํด๋์ค(pseudo-classes) ๋ฐ ์์ฌ ์์(pseudo-elements)์ ์ ์ฉํฉ๋๋ค.
์์: hover ์ ๋ถ๋ชจ ์คํ์ผ๋ง
.button {
/* ๋ฒํผ ๊ธฐ๋ณธ ์คํ์ผ */
background-color: #eee;
color: #333;
padding: 10px 20px;
border: none;
cursor: pointer;
&:hover {
/* ๋ฒํผ์ ๋ง์ฐ์ค๋ฅผ ์ฌ๋ ธ์ ๋์ ์คํ์ผ */
background-color: #ccc;
}
}
์ด ์์ ์์ &:hover
๋ .button
์์ ์์ฒด์ hover ์คํ์ผ์ ์ ์ฉํฉ๋๋ค.
์์: ์์ฌ ์์ ์ถ๊ฐํ๊ธฐ
.link {
/* ๋งํฌ ๊ธฐ๋ณธ ์คํ์ผ */
color: blue;
text-decoration: none;
position: relative;
&::after {
/* ์์ฌ ์์ ์คํ์ผ */
content: '';
position: absolute;
bottom: -2px;
left: 0;
width: 100%;
height: 2px;
background-color: blue;
transform: scaleX(0);
transform-origin: left;
transition: transform 0.3s ease;
}
&:hover::after {
/* hover ์ ์์ฌ ์์ ์คํ์ผ */
transform: scaleX(1);
}
}
์ฌ๊ธฐ์ &::after
๋ ๋งํฌ์ ๋ฐ์ค ์ญํ ์ ํ๋ ์์ฌ ์์๋ฅผ ์์ฑํ๋ฉฐ, ์ด๋ hover ์ ์ ๋๋ฉ์ด์
ํจ๊ณผ๋ฅผ ์ค๋๋ค. &
๋ ์์ฌ ์์๊ฐ .link
์์์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฐ๊ฒฐ๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
๋ฏธ๋์ด ์ฟผ๋ฆฌ ์ค์ฒฉ
๋ํ ํ๋ฉด ํฌ๊ธฐ๋ ๋ค๋ฅธ ์ฅ์น ํน์ฑ์ ๋ฐ๋ผ ์คํ์ผ์ ์ ์ฉํ๊ธฐ ์ํด CSS ๊ท์น ๋ด์ ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ฅผ ์ค์ฒฉํ ์๋ ์์ต๋๋ค:
.container {
/* ์ปจํ
์ด๋ ๊ธฐ๋ณธ ์คํ์ผ */
width: 100%;
padding: 20px;
@media (min-width: 768px) {
/* ๋ ํฐ ํ๋ฉด์ ์ํ ์คํ์ผ */
width: 768px;
padding: 30px;
}
@media (min-width: 1200px) {
/* ํจ์ฌ ๋ ํฐ ํ๋ฉด์ ์ํ ์คํ์ผ */
width: 1200px;
padding: 40px;
}
}
์ด๋ฅผ ํตํด ๋ฐ์ํ ์คํ์ผ์ ์ฒด๊ณ์ ์ผ๋ก ์ ๋ฆฌํ๊ณ ์ํฅ์ ๋ฏธ์น๋ ์์ ๊ฐ๊น์ด์ ์ ์งํ ์ ์์ต๋๋ค.
@supports
์ค์ฒฉ
@supports
at-rule์ ์ค์ฒฉํ์ฌ ํน์ CSS ๊ธฐ๋ฅ์ด ๋ธ๋ผ์ฐ์ ์์ ์ง์๋๋ ๊ฒฝ์ฐ์๋ง ์คํ์ผ์ ์ ์ฉํ ์ ์์ต๋๋ค:
.element {
/* ๊ธฐ๋ณธ ์คํ์ผ */
display: flex;
justify-content: center;
align-items: center;
@supports (gap: 10px) {
/* gap ์์ฑ์ด ์ง์๋ ๊ฒฝ์ฐ์ ์คํ์ผ */
gap: 10px;
}
@supports not (gap: 10px) {
/* gap์ ์ง์ํ์ง ์๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ํ ๋์ฒด ์คํ์ผ */
margin: 5px;
}
}
์ด๋ฅผ ํตํด ์ต์ CSS ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด์ ๊ตฌํ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ํ ๋์ฒด(fallback) ์คํ์ผ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
CSS ๋ค์คํ ๋ชจ๋ฒ ์ฌ๋ก
CSS ๋ค์คํ ์ ์์ ํ๋ฆ์ ํฌ๊ฒ ๊ฐ์ ํ ์ ์์ง๋ง, ์ง๋์น๊ฒ ๋ณต์กํ๊ฑฐ๋ ์ ์ง๋ณด์ํ๊ธฐ ์ด๋ ค์ด ์คํ์ผ์ํธ๋ฅผ ๋ง๋ค์ง ์๋๋ก ์ ์คํ๊ฒ ์ฌ์ฉํ๊ณ ๋ช ๊ฐ์ง ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ๊น์ ์ค์ฒฉ ํผํ๊ธฐ: ๋๋ฌด ๋ง์ ๋จ๊ณ๋ก ์ค์ฒฉํ๋ฉด ์ฝ๋๋ฅผ ์ฝ๊ณ ๋๋ฒ๊น ํ๊ธฐ ์ด๋ ค์์ง ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก 3-4 ๋จ๊ณ ์ด์ ์ค์ฒฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
&
์ ํ์ ํ๋ช ํ๊ฒ ์ฌ์ฉํ๊ธฐ:&
์ ํ์๋ ๊ฐ๋ ฅํ์ง๋ง ์ค์ฉ๋ ์๋ ์์ต๋๋ค. ์๋ ๋ฐฉ์์ ํ์คํ ์ดํดํ๊ณ ํ์ํ ๋๋ง ์ฌ์ฉํ์ธ์.- ์ผ๊ด๋ ์คํ์ผ ์ ์งํ๊ธฐ: ํ๋ก์ ํธ ์ ๋ฐ์ ๊ฑธ์ณ ์ผ๊ด๋ ์ฝ๋ฉ ์คํ์ผ์ ๊ณ ์ํ์ธ์. ์ด๋ ๊ฒ ํ๋ฉด ํนํ ํ์ผ๋ก ์์ ํ ๋ ์ฝ๋๋ฅผ ๋ ์ฝ๊ฒ ์ฝ๊ณ ์ ์ง๋ณด์ํ ์ ์์ต๋๋ค.
- ์ฑ๋ฅ ๊ณ ๋ คํ๊ธฐ: CSS ๋ค์คํ ์์ฒด๊ฐ ๋ณธ์ง์ ์ผ๋ก ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น์ง๋ ์์ง๋ง, ์ง๋์น๊ฒ ๋ณต์กํ ์ ํ์๋ ์ํฅ์ ์ค ์ ์์ต๋๋ค. ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ํผํ๊ธฐ ์ํด ์ ํ์๋ฅผ ์ต๋ํ ๋จ์ํ๊ฒ ์ ์งํ์ธ์.
- ์ฃผ์ ์ฌ์ฉํ๊ธฐ: ๋ณต์กํ ์ค์ฒฉ ๊ตฌ์กฐ๋ ํน์ดํ ์ ํ์ ์กฐํฉ์ ์ค๋ช ํ๊ธฐ ์ํด ์ฃผ์์ ์ถ๊ฐํ์ธ์. ์ด๋ ๋์ค์ ์์ ๊ณผ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์ด ์ฝ๋๋ฅผ ์ดํดํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
- ๋ค์คํ ๋จ์ฉํ์ง ์๊ธฐ: ์ค์ฒฉํ ์ ์๋ค๊ณ ํด์ ํญ์ ํด์ผ ํ๋ ๊ฒ์ ์๋๋๋ค. ๋๋ก๋ ํ๋ซ(flat)ํ CSS๊ฐ ์๋ฒฝํ๊ฒ ๊ด์ฐฎ๊ณ ๊ฐ๋ ์ฑ์ด ๋ ๋์ต๋๋ค. ์์น์ ์ผ๋ก๊ฐ ์๋๋ผ ๋ช ํ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํฅ์์ํค๋ ๊ณณ์ ๋ค์คํ ์ ์ฌ์ฉํ์ธ์.
๋ธ๋ผ์ฐ์ ์ง์
CSS ๋ค์คํ
์ Chrome, Firefox, Safari, Edge๋ฅผ ํฌํจํ ์ต์ ๋ธ๋ผ์ฐ์ ์์ ํ๋ฅญํ ๋ธ๋ผ์ฐ์ ์ง์์ ์ ๊ณตํฉ๋๋ค. ํ์ง๋ง ํ๋ก๋์
ํ๊ฒฝ์์ ์ฌ์ฉํ๊ธฐ ์ ์๋ ํญ์ ์ต์ ๋ธ๋ผ์ฐ์ ํธํ์ฑ ํ(์: caniuse.com)๋ฅผ ํ์ธํ์ฌ ํ๋ก์ ํธ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋์ง ํ์ธํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ํ์ํ ๊ฒฝ์ฐ ๋ ๋์ ๋ธ๋ผ์ฐ์ ํธํ์ฑ์ ์ํด postcss-nesting
๊ณผ ๊ฐ์ PostCSS ํ๋ฌ๊ทธ์ธ ์ฌ์ฉ์ ๊ณ ๋ คํ์ธ์.
CSS ๋ค์คํ vs. CSS ์ ์ฒ๋ฆฌ๊ธฐ (Sass, Less)
๋ค์ดํฐ๋ธ CSS ๋ค์คํ ์ด ๋์ค๊ธฐ ์ ์๋ Sass๋ Less์ ๊ฐ์ CSS ์ ์ฒ๋ฆฌ๊ธฐ๊ฐ ์ ์ฌํ ์ค์ฒฉ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ต๋๋ค. ์ ์ฒ๋ฆฌ๊ธฐ๋ ์ฌ์ ํ ๋ณ์, ๋ฏน์ค์ธ, ํจ์์ ๊ฐ์ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง, ๋ค์ดํฐ๋ธ CSS ๋ค์คํ ์ ๊ฐ๋จํ ์ค์ฒฉ ์๋๋ฆฌ์ค์์ ๋น๋ ๋จ๊ณ์ ํ์์ฑ์ ์์ ์ค๋๋ค. ๋ค์์ ๋น๊ตํ์ ๋๋ค:
๊ธฐ๋ฅ | ๋ค์ดํฐ๋ธ CSS ๋ค์คํ | CSS ์ ์ฒ๋ฆฌ๊ธฐ (Sass/Less) |
---|---|---|
์ค์ฒฉ | ๋ค์ดํฐ๋ธ ์ง์, ์ปดํ์ผ ํ์ ์์ | CSS๋ก ์ปดํ์ผ ํ์ |
๋ณ์ | CSS ์ฌ์ฉ์ ์ง์ ์์ฑ(๋ณ์) ํ์ | ๋ด์ฅ ๋ณ์ ์ง์ |
๋ฏน์ค์ธ | ๋ค์ดํฐ๋ธ๋ก ์ฌ์ฉ ๋ถ๊ฐ | ๋ด์ฅ ๋ฏน์ค์ธ ์ง์ |
ํจ์ | ๋ค์ดํฐ๋ธ๋ก ์ฌ์ฉ ๋ถ๊ฐ | ๋ด์ฅ ํจ์ ์ง์ |
๋ธ๋ผ์ฐ์ ์ง์ | ์ต์ ๋ธ๋ผ์ฐ์ ์์ ํ์ํจ; ํด๋ฆฌํ ์ฌ์ฉ ๊ฐ๋ฅ | ์ปดํ์ผ ํ์; CSS ์ถ๋ ฅ๋ฌผ์ ํญ๋๊ฒ ํธํ๋จ |
์ปดํ์ผ | ์์ | ํ์ |
๋ฏน์ค์ธ์ด๋ ํจ์์ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ด ํ์ํ๋ค๋ฉด ์ ์ฒ๋ฆฌ๊ธฐ๋ ์ฌ์ ํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ธฐ๋ณธ์ ์ธ ์ค์ฒฉ๊ณผ ๊ตฌ์ฑ์ ์ํด์๋ ๋ค์ดํฐ๋ธ CSS ๋ค์คํ ์ด ๋ ๊ฐ๋จํ๊ณ ํจ์จ์ ์ธ ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค.
์ ์ธ๊ณ์ ์์
๋ค์ ์์๋ CSS ๋ค์คํ ์ด ๋ค์ํ ์น์ฌ์ดํธ ์ปจํ ์คํธ์์ ์ด๋ป๊ฒ ์ ์ฉ๋ ์ ์๋์ง ๋ณด์ฌ์ฃผ๋ฉฐ ๊ทธ ๋ค์ฌ๋ค๋ฅํจ์ ๋ณด์ฌ์ค๋๋ค:
-
์ ์์๊ฑฐ๋ ์ํ ๋ชฉ๋ก (๊ธ๋ก๋ฒ ์์): ์ํ ๋ชฉ๋ก์ด ๊ทธ๋ฆฌ๋ ํํ๋ก ๋ฐฐ์ด๋ ์ ์์๊ฑฐ๋ ์น์ฌ์ดํธ๋ฅผ ์์ํด ๋ณด์ธ์. ๊ฐ ์ํ ์นด๋์๋ ์ด๋ฏธ์ง, ์ ๋ชฉ, ๊ฐ๊ฒฉ ๋ฐ ํด๋ฆญ ์ ๋ ๋ฒํผ์ด ํฌํจ๋ฉ๋๋ค. CSS ๋ค์คํ
์ ์ํ ์นด๋์ ๊ฐ ๊ตฌ์ฑ ์์์ ๋ํ ์คํ์ผ์ ๊น๋ํ๊ฒ ์ ๋ฆฌํ ์ ์์ต๋๋ค:
.product-card { /* ์ ์ฒด ์ํ ์นด๋ ์คํ์ผ */ border: 1px solid #ddd; padding: 10px; .product-image { /* ์ํ ์ด๋ฏธ์ง ์คํ์ผ */ width: 100%; margin-bottom: 10px; } .product-title { /* ์ํ ์ ๋ชฉ ์คํ์ผ */ font-size: 1.2em; margin-bottom: 5px; } .product-price { /* ์ํ ๊ฐ๊ฒฉ ์คํ์ผ */ font-weight: bold; color: #007bff; } .add-to-cart { /* ์ฅ๋ฐ๊ตฌ๋ ๋ด๊ธฐ ๋ฒํผ ์คํ์ผ */ background-color: #28a745; color: white; padding: 8px 12px; border: none; cursor: pointer; &:hover { /* ๋ฒํผ hover ์ ์คํ์ผ */ background-color: #218838; } } }
-
๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ ๋ ์ด์์ (์ ๋ฝ ๋์์ธ ์๊ฐ): ๊ฐ ๊ฒ์๋ฌผ์ ์ ๋ชฉ, ์ ์, ๋ ์ง ๋ฐ ๋ด์ฉ์ด ์๋ ๋ธ๋ก๊ทธ ๋ ์ด์์์ ์๊ฐํด ๋ณด์ธ์. ๋ค์คํ
์ ์คํ์ผ๋ง์ ํจ๊ณผ์ ์ผ๋ก ๊ตฌ์กฐํํ ์ ์์ต๋๋ค:
.blog-post { /* ์ ์ฒด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ ์คํ์ผ */ margin-bottom: 20px; border-bottom: 1px solid #eee; padding-bottom: 20px; .post-header { /* ๊ฒ์๋ฌผ ํค๋ ์คํ์ผ */ margin-bottom: 10px; .post-title { /* ๊ฒ์๋ฌผ ์ ๋ชฉ ์คํ์ผ */ font-size: 2em; margin-bottom: 5px; } .post-meta { /* ๊ฒ์๋ฌผ ๋ฉํ๋ฐ์ดํฐ ์คํ์ผ */ font-size: 0.8em; color: #777; .post-author { /* ์ ์ ์ด๋ฆ ์คํ์ผ */ font-style: italic; } .post-date { /* ๋ ์ง ์คํ์ผ */ margin-left: 10px; } } } .post-content { /* ๊ฒ์๋ฌผ ๋ด์ฉ ์คํ์ผ */ line-height: 1.6; } }
-
์ธํฐ๋ํฐ๋ธ ์ง๋ (๋ถ๋ฏธ ์์): ์น์ฌ์ดํธ๋ ์ข
์ข
์ง๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๋ ์ธํฐ๋ํฐ๋ธ ์ง๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ค์คํ
์ ์ง๋์ ๋ง์ปค์ ํ์
์คํ์ผ์ ์ง์ ํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค:
.map-container { /* ์ง๋ ์ปจํ ์ด๋ ์คํ์ผ */ width: 100%; height: 400px; .map-marker { /* ์ง๋ ๋ง์ปค ์คํ์ผ */ width: 20px; height: 20px; border-radius: 50%; background-color: red; cursor: pointer; &:hover { /* ๋ง์ปค hover ์ ์คํ์ผ */ background-color: darkred; } } .map-popup { /* ์ง๋ ํ์ ์คํ์ผ */ position: absolute; background-color: white; border: 1px solid #ccc; padding: 10px; z-index: 1000; .popup-title { /* ํ์ ์ ๋ชฉ ์คํ์ผ */ font-size: 1.1em; margin-bottom: 5px; } .popup-content { /* ํ์ ๋ด์ฉ ์คํ์ผ */ font-size: 0.9em; } } }
-
๋ชจ๋ฐ์ผ ์ฑ UI (์์์ ๋์์ธ ์์): ํญ ์ธํฐํ์ด์ค๊ฐ ์๋ ๋ชจ๋ฐ์ผ ์ฑ์์ ๋ค์คํ
์ ๊ฐ ํญ๊ณผ ํด๋น ์ฝํ
์ธ ์ ์คํ์ผ๋ง์ ์ ์ดํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค:
.tab-container { /* ํญ ์ปจํ ์ด๋ ์คํ์ผ */ width: 100%; border-bottom: 1px solid #ddd; .tab-header { /* ํญ ํค๋ ์คํ์ผ */ display: flex; .tab-item { /* ๊ฐ ํญ ์์ดํ ์คํ์ผ */ padding: 10px 15px; cursor: pointer; border: none; background-color: transparent; border-bottom: 2px solid transparent; &.active { /* ํ์ฑ ํญ ์คํ์ผ */ border-bottom-color: #007bff; } } } .tab-content { /* ํญ ์ฝํ ์ธ ์คํ์ผ */ padding: 15px; display: none; &.active { /* ํ์ฑ ํญ ์ฝํ ์ธ ์คํ์ผ */ display: block; } } }
๊ฒฐ๋ก
CSS ๋ค์คํ ์ ๋ชจ๋ CSS์ ์ถ๊ฐ๋ ๊ฐ์น ์๋ ๊ธฐ๋ฅ์ผ๋ก, ์คํ์ผ์ํธ๋ฅผ ๋ ์ฒด๊ณ์ ์ด๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ๋ฐฉ์์ผ๋ก ๊ตฌ์กฐํํ ์ ์๊ฒ ํด์ค๋๋ค. ๊ทธ ๊ตฌ๋ฌธ, ์ด์ , ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ดํดํจ์ผ๋ก์จ ์ด ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ CSS ์์ ํ๋ฆ์ ๊ฐ์ ํ๊ณ ๋ ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ์น ํ๋ก์ ํธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. CSS ๋ค์คํ ์ ๋ฐ์๋ค์ฌ ๋ ๊น๋ํ๊ณ ๊ฐ๋ ์ฑ ๋์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ CSS ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํ์ธ์. ํ๋ก์ ํธ์ ๋ค์คํ ์ ํตํฉํ๋ค ๋ณด๋ฉด, ๋ณต์กํ ์คํ์ผ์ํธ๋ฅผ ๊ด๋ฆฌํ๊ณ ๋ค์ํ ๊ธ๋ก๋ฒ ์ปจํ ์คํธ์์ ์๊ฐ์ ์ผ๋ก ๋งค๋ ฅ์ ์ด๊ณ ์ ๊ตฌ์กฐํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋๋ ๋ฐ ์์ด์๋ ์ ๋ ๋๊ตฌ์์ ๋ฐ๊ฒฌํ๊ฒ ๋ ๊ฒ์ ๋๋ค.