CSS ์ปค์คํ ํ๋กํผํฐ(--var)๋ฅผ ์ฐ๋ค ๋ณด๋ฉด ์์ฌ์ด ๋ถ๋ถ๋ค์ด ์๋๋ฐ, ์ผ๋จ ์๋ชป๋ ๊ฐ์ ๋ฃ์ด๋ ์๋ฌ๊ฐ ๋์ง ์๊ณ , ์ด๊ธฐ๊ฐ์ด๋ ์์ ์ฌ๋ถ๋ฅผ ๋ช ํํ๊ฒ ์ ์ดํ ๋ฐฉ๋ฒ๋ ์๋ค. ์ ๋๋ฉ์ด์ ๋ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์, ๊ฐ๋๋ ๊ธธ์ด ๊ฐ์ด ์๊ฐ์ ๋ฐ๋ผ ๋ณํ๋ ํจ๊ณผ๋ฅผ ๊ตฌํํ๋ ค๋ฉด ๊ฒฐ๊ตญ ์๋ฐ์คํฌ๋ฆฝํธ์ ์์กดํด์ผ ํ๋ค. ์ด๋ฐ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๊ธฐ ์ํด CSS Houdini API ์ค ํ๋๋ก ๋ฑ์ฅํ ๊ฒ์ด ๋ฐ๋ก @property๋ค. CSS ์ปค์คํ ํ๋กํผํฐ์ ํ์ , ์ด๊ธฐ๊ฐ, ์์ ์ฌ๋ถ ๋ฑ์ ๋ช ์์ ์ผ๋ก ๋ฑ๋กํ ์ ์๊ฒ ํด ์ฃผ๋๋ฐ, Baseline 2024์ ํฌํจ๋๋ฉด์ ์ฃผ์ ๋ธ๋ผ์ฐ์ ์์๋ ์์ ์ ์ผ๋ก ์ธ ์ ์๋ ์์ค์ด ๋๋ค.
@property
@property๋ CSS ์์์ ์ปค์คํ
ํ๋กํผํฐ๋ฅผ ๋ช
์์ ์ผ๋ก ๋ฑ๋กํ๋ at-rule์ด๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ CSS.registerProperty()๋ฅผ ํธ์ถํ๋ ๊ฒ๊ณผ ๋์ผํ ์ผ์ CSS๋ง์ผ๋ก ํ ์ ์๋ค.
@property --rotation {
syntax: "<angle>";
inherits: false;
initial-value: 45deg;
}
- syntax: ํ์ฉํ ๊ฐ์ ํ์ ์ ์ง์ ํ๋ค. ex) , , , , ๋ฑ
- inherits: ์์ ์ฌ๋ถ๋ฅผ ์ค์ ํ๋ค.
- initial-value: ์ด๊ธฐ๊ฐ์ ์ค์ ํ๋ค. ๋จ, ์ด ๊ฐ์ computationally independent ์ด์ด์ผ ํ๋๋ฐ, ์๋ฅผ ๋ค์ด 10px์ ๊ฐ๋ฅํ์ง๋ง, ๋ถ๋ชจ ํฐํธ ํฌ๊ธฐ์ ์์กดํ๋ 3em์ ํ์ฉ๋์ง ์๋๋ค.
syntax์ inherits๋ ํ์๋ค. ๋ ์ค ํ๋๋ผ๋ ๋น ์ง๋ฉด ์ ์ฒด @property ์ ์ธ์ด ๋ฌด์๋๋ค.
initial-value๋ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ํ์์ธ๋ฐ, syntax: "*"๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ๋ฐ๋์ ์ง์ ํด์ผ ํ๋ค๊ณ ํ๋ค.
@property์ ์ ๋๋ฉ์ด์
์ผ๋ฐ custom property๋ ๋ฌธ์์ด๋ก ์ทจ๊ธ๋๊ธฐ ๋๋ฌธ์, ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ ์ ๋๋ฉ์ด์ ์ด ๋์ํ์ง ์๋๋ค.
@keyframes rotate {
to {
--angle: 360deg; /* ๋ฌธ์์ด์ด๊ธฐ ๋๋ฌธ์ ๋ณด๊ฐ ๋ถ๊ฐ */
}
}
ํ์ง๋ง @property๋ก ํ์ ์ ๋ฑ๋กํ๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ํด๋น ๊ฐ์ ์ธ์ํด ๋ณด๊ฐํ ์ ์๋๋ฐ, ๋ฒํผ ํ ๋๋ฆฌ์ ๊ทธ๋ผ๋์ธํธ๊ฐ ๋ถ๋๋ฝ๊ฒ ํ๋ฅด๋ ํจ๊ณผ๋ฅผ @property๋ฅผ ํ์ฉํด ์ ์ฉํด๋ณด์๋ค. conic-gradient์ from ๊ฐ๋์ --angle์ ์ฐ๊ฒฐํ๊ณ , ์ด ๊ฐ์ @property๋ก ํ์ ์ผ๋ก ๋ฑ๋กํด ์ ๋๋ฉ์ด์ ํ๋ฉด ๊ทธ๋ผ๋์ธํธ์ ์งํ ๋ฐฉํฅ๋ง ํ์ ํ๊ฒ ๋๋ค. ํด๋น ๋ฐฉ๋ฒ์ผ๋ก ํ ๋๋ฆฌ๊ฐ ์์ฐ์ค๋ฝ๊ฒ ํ๋ฅด๋ ํจ๊ณผ๋ฅผ ๋ง๋ค ์ ์์๋ค. (๋ฌธ๋ฒ์ Tailwind๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ค.)
@property --angle {
syntax: "<angle>";
inherits: false;
initial-value: 0deg;
}
.btn-border {
background:
linear-gradient(white, white) padding-box,
conic-gradient(
from var(--angle),
var(--color-green-500, #dddd07),
var(--color-blue-400, #4a9df7),
var(--color-pink-500, #e361af)
) border-box;
border: 4px solid transparent;
animation: spin 3s linear infinite;
}
@keyframes spin {
to { --angle: 360deg; }
}
'๐ WIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ์ด๋ฒ ์ฃผ์ ์๊ฒ ๋ ๊ฒ๋ค (0) | 2025.11.02 |
|---|---|
| ์ด๋ฏธ์ง ํ๋ฆฌ๋ก๋ฉ์ ๊ตฌํํ๋ฉฐ ์๊ฒ ๋ ๊ฒ๋ค (4) | 2025.10.25 |
| i18next-parser ์ฌ์ฉํด์ ๋ฒ์ญ ํ๋ก์ธ์ค ๊ฐ์ ํ๊ธฐ (2) | 2025.09.20 |
| Storybook v8 preset ์๋ฌ ํธ๋ฌ๋ธ์ํ (0) | 2025.08.31 |
| Tailwind v4 ๋ง์ด๊ทธ๋ ์ด์ : Dynamic spacing utilities (0) | 2025.08.24 |