π¨ CSS λ³μ(--variable) μ¬μ©λ² & μμ© μ 리
CSS λ³μ κΈ°λ₯
볡μ‘ν μΉμ¬μ΄νΈ κ°μ κ²½μ° μμ²λ μμ CSSλ₯Ό κ°μ§κ³ μλλ°, μ μ§λ³΄μλ₯Ό νλ€ λ³΄λ©΄ μ¬λ¬ κ³³μμ μ¬μ©ν μμμ κ°μ νκΊΌλ²μ λ°κΏμΌ ν λκ° μλ€. κ·Έ κ°λ€μ νλμ© μ°Ύμμ μΌμΌμ΄ λ°κΎΈλ €λ©΄ μλΉν νΌκ³€ν κ²μ΄κ³ , λμ λ°λΌ μ€μλ λ§μ κ²μ΄λ€.
κ·Έλμ μ¬ν νλ‘κ·Έλλ° μΈμ΄μ²λΌ λ³μλ₯Ό μ΄μ©νλ©΄, μμ μ λ°μ κ±Έμ³ μ¬μ©λλ μμμ κ°μ λ³μμ μ μ₯νκ³ νΈμΆνλ©΄ λ³΄λ€ ν¨μ¨μ μΈ νλ‘κ·Έλλ°μ΄ κ°λ₯ν΄μ§λ€.
CSS λ³μ μ μΈ λ° νΈμΆ
CSSμμ λ³μμ μ΄λ¦μ μ§μ ν λλ λ³μ 맨 μμ -- λ₯Ό λΆμ¬μ£Όμ΄μΌ νλ€. κ·Έλ¦¬κ³ λ³μλ₯Ό νΈμΆν΄ μ¬μ©ν λλ var(λ³μλͺ
)νμμ μ¬μ©νλ€.
:root {
--main-font-color: #000f22; /* CSS μ μ λ³μ μ μΈ */
}
div {
color: var(--main-font-color); /* CSS λ³μ μ¬μ© */
}
CSS λ³μ μ μΈ μ€μ½ν
μ μ λ³μ μ€μ½ν
CSSμ :root μμ¬ν΄λμ€λ λ¬Έμ νΈλ¦¬μ λ£¨νΈ μμλ₯Ό μ ννλ€. μ¦, HTML λ¬Έμμ λ£¨νΈ μμλ <html> μμμ΄λ―λ‘, :rootμ htmlμ κ°λ€κ³ 보면 λλ€.
λ³΄ν΅ μ΄ μμμ css λ³μλ₯Ό μ μΈν΄ μ¬μ©νλ€κ³ 보면λλ€. μλ°μ€ν¬λ¦½νΈλ‘ λ°μ§λ©΄ μΌμ’ μ μ μ λ³μ μμμ΄λΌκ³ μ΄ν΄νλ©΄ λλ€. :rootμμ CSS λ³μλ₯Ό μ μΈνμ¬ HTML λ¬Έμ μ΄λμμλ ν΄λΉ λ³μμ μ κ·Όν μ μλλ‘ κ΅¬μ±νλ κ²μ νν ν¨ν΄μ΄λ€.
μ§μ λ³μ μ€μ½ν
μμ νλνλ λ§λ€ μ§μ λ³μλ‘μ νμ©ν μ μλ€. μ§μλ³μλ‘ μ μΈλ CSS λ³μλ λ³μλͺ μ΄ κ°μμ§λΌλ μ 체 μμμ 곡μ λμ§ μκ³ μ€λ‘μ§ κ·Έ μμμμλ§ μ μ©λκ² λλ€.
div {
--font-color: #000f22; /* CSS μ§μ λ³μ μ μΈ */
color: var(--font-color); /* CSS λ³μ μ¬μ© */
}
p {
--font-color: #000fff; /* CSS μ§μ λ³μ μ μΈ */
color: var(--font-color); /* CSS λ³μ μ¬μ© */
}
CSS λ³μμ μμ
CSS λ³μ μμ μμλλ νΉμ±μ μ§λκ³ μλ€. λ³΄ν΅ HTMLμμ μμ μ리먼νΈμ κ°μ΄ μ§μ λμ§ μμ κ²½μ° λΆλͺ¨ μ리먼νΈμ κ°μ μμλ°λλ°, CSS λ³μλ‘ μ μΈλ κ°μ΄λΌλ μμΈ μμ΄ μμλλ€.
- div.oneμ font-size : 10px
- div.twoμ font-size : 2rem
- div.threeμ font-size : 10px (.oneμμ λ³μλ₯Ό μμ λ°μ)
<div class='one'>
<div class='two'></div>
<div class='three'></div>
</div>
.one {
--test: 10px;
font-size: var(--test);
}
.two {
--test: 2rem;
font-size: var(--test); /* 2rem */
}
.three {
font-size: var(--test); /* 10px */ /* .oneμμ λ³μλ₯Ό μμ λ°μ */
}
CSS λ³μ λμ²΄κ° μ€μ
λ§μΌ CSS λ³μμ μκ° λ무 λ§μ, νΉμ λ³μκ° μ μ λ¬λμ§ μλ¬λμ§ λͺ¨λ₯Όλ, λ³μκ°μ΄ μλ€λ©΄, var() λ₯Ό μ€μ²©ν¨μΌλ‘μ¨ μ¬λ¬ κ°μ λ체 λ³μλ₯Ό μ μν μ μλ€.
.newCustomer {
/* --new-font-colorκ° μμΌλ©΄ orangeλ₯Ό μ¬μ© */
color: var(--new-font-color, orange);
}
.oldCustomer {
/* --old-font-colorκ° μμΌλ©΄ var(--normal-font-color, blue)λ₯Ό μ¬μ©νλ€ */
/* κ·Έλ°λ° λ --normal-font-colorκ° μμΌλ©΄ blueλ₯Ό μ¬μ©νλ€ */
color: var(--old-font-color, var(--normal-font-color, blue));
}
CSS λ³μ μ¬μ© μ£Όμμ¬ν
μ ν¨νμ§ μμ CSS λ³μκ°μ΄ μ€μ λ κ²½μ°
λΈλΌμ°μ κ° μ ν¨νμ§ μμ var()λ₯Ό λ§λλ©΄ κ·Έ μμ±μ μ΄κΈ°κ°μ΄λ μμλ κ°μ μ¬μ©νλ€.
μλ₯Όλ€μ΄ μλ .chicken μ νμμ λ³μκ°μ΄ 16pxλ‘ μ ν¨νμ§ μμ color κ°μ΄ λ€μ΄κ° μ μ΄λ€. μ΄ κ²½μ°, v.chickenμ λΆλͺ¨ μ리먼νΈμ color μμ±κ°μ μμλ°κ² λλ€. κ·Έλ°λ° λ§μΌ .chickenμ λΆλͺ¨ μ리먼νΈκ° μμκ²½μ° λΈλΌμ°μ μ κΈ°λ³Έ κ°μ΄ λ€μ΄κ°λ€.
:root {
--chicken-color: 16px;
}
.chicken {
color: blue;
}
.chicken2 {
color: var(--chicken-color); /* color: 16pxμ μ ν¨νμ§ μμ */
}
λ³μλ‘ λ¨μκ° μ¬μ© μ£Όμμ¬ν
λ§μΌ μμ±μ λ¨μ κ°μ λ³μλ‘ μ²λ¦¬ν΄μΌ ν λ λ³΄ν΅ μλμ κ°μ΄ μ€μ νλ©΄ λλ€κ³ μκ°ν ν μΈλ°, μ€μ λΈλΌμ°μ λ μ«μμ λ¨μ μ¬μμ 무μλ―Έν κ³΅λ°±μ΄ λ°μνλ©΄μ λκ°μ ν ν°μΌλ‘ μΈμνλ λ¬Έμ μ μ΄ λ°μνλ€.
.block {
--p: 33;
width: var(--p)vw;
height: var(--p)vh;
}
/*
.block {
width: 33 vw; λμ΄μ°κΈ°κ° μ μ©λμ΄ μλ¬λ₯Ό λ°μμν¨λ€
height: 33 vh;
}
*/
λ°λΌμ μ΄ κ²½μ° calc() ν¨μλ₯Ό μ¬μ©ν΄μΌ μνλ μλλ₯Ό μ΄νν μ μλ€.
.block {
--p: 33;
width: calc(var(--p) * 1vw);
height: calc(var(--p) * 1vh);
}
CSS λ³μ νμ© μμ
colorμ rgbλ₯Ό λ³μν
λ¨μν 16μ§μ μμ μ½λ(#fff)λ₯Ό λ³μμ μ μ₯νλ κ²μ λμ΄μ, rgb λ° alpha(ν¬λͺ λ)λ₯Ό λ³μλ‘ μΈλ°νκ² μ‘°μ ν μλ μλ€.
:root {
--color: 240, 240, 240;
--alpha: 0.8;
}
div {
background-color: rgba(var(--color), var(--alpha)); /* rgba(240, 240, 240, 80%) */
}
background-imageμ urlμ λ³μν
μμμ λ°°κ²½ μ΄λ―Έμ§ κ²½λ‘λ₯Ό λ³μλ‘ μ²λ¦¬νμ¬μΌ ν λ μ£Όμν΄μΌν μ μ΄ μλ€.
μλ₯Όλ€μ΄ μλμ κ°μ΄ μ΄λ―Έμ§ κ²½λ‘λ§μ λ³μμ μ€μ νκ³ μμ± λΆλΆμμ url(var(--img)) μμΌλ‘ νΈμΆνλ λ°©λ²μ λ¬Έλ²μ μΌλ‘ μ§μνμ§ μλλ€.
:root {
--img: "img/sample.jpg";
}
div {
background: url(var(--img)); /* ERROR - λμλμ§ μμ */
}
λ°λΌμ url(μ΄λ―Έμ§κ²½λ‘) μ체λ₯Ό λ³μννμ¬ μ¬μ©νλ©΄ λλ€.
:root {
--img: url("img/sample.jpg");
}
div {
background: var(--img);
}
JavaScriptμμ CSS λ³μ μ‘°μνκΈ°
μλ°μ€ν¬λ¦½νΈλ‘ μ¬ν μ€νμΌ μμ±μ λ³ν μμΌ λμ μΈ μλ‘λ¬λ‘ν ννμ΄μ§λ₯Ό ꡬμ±νλ―μ΄ CSS λ³μλ μ‘°μμ΄ κ°λ₯νλ€.
μλ°μ€ν¬λ¦½νΈλ‘ CSS λ³μκ° μ»κΈ°
μλ₯Ό λ€μ΄ μμ μμμ λ£¨νΈ κ°μ ν΄λμ€(:root)μ μ μΈν νΉμ λ³μμ κ°μ κ°μ Έμ€λ μ€ν¬λ¦½νΈ μ½λλ λ€μκ³Ό κ°λ€.
:root {
--hover: red;
}
// κ°μ ν΄λμ€ μμ μ»κΈ°
let root = document.querySelector(':root');
// window.getComputedStyle λ©μλλ₯Ό μ΄μ©νλ©΄, ν΄λΉ μμμ μ μμ μΌλ‘ μ μ©λ λͺ¨λ ννμ styleμ λ°ννλ€
let variables = getComputedStyle(root);
// λ³μ κ° μ»κΈ°
variables.getPropertyValue('--hover');
μλ°μ€ν¬λ¦½νΈλ‘ CSS λ³μκ° λ³κ²½νκΈ°
κ·Έλ¬λ μ¬κΈ°μ μ£Όμν μ μ getComputedStyle() λ©μλλ‘ μ€νμΌ μμ±μ κ°μ Έμ¬μ μμ§λ§, μ΄ μμ±μ λ°λ‘ λ³κ²½ν μ μλ€λ μ μ΄λ€. κ·Έλμ λ§μΌ μλ°μ€ν¬λ¦½νΈλ‘ λ³μμ κ°μ λμ μΌλ‘ μ‘°μνκ³ μΆλ€λ©΄, λ€λ₯Έ μ€νμΌ μμ± μ κ·Όνλ―μ΄ μΈλΌμΈ μ€νμΌλ‘ μ‘°μνλ μ λ°μ μλ€.
λ€μμ CSS λ³μμ λ°°κ²½ μ΄λ―Έμ§ κ°μ μ€μ νκ³ , λ²νΌμ λλ₯΄λ©΄ μ΄ CSS λ³μκ°μ λ³κ²½ν¨μΌλ‘μ¨ μμμ λ°°κ²½ μ΄λ―Έμ§λ₯Ό λ³ν μν€λ μμ μ΄λ€. λ¨Όμ μλμ κ°μ΄ html μΈλΌμΈ μ€νμΌμ λ°°κ²½ μ΄λ―Έμ§μ CSS λ³μλ₯Ό μ μν΄ λλλ€.
<div style="--bg-img: url(https://p4.wallpaperbetter.com/wallpaper/757/701/315/beach-high-definition-1920x1080-nature-beaches-hd-art-wallpaper-preview.jpg)"></div>
<button>λ°°κ²½ μ΄λ―Έμ§ λ°κΎΈκΈ°</button>
div {
background: var(--bg-img);
background-size: cover;
width: 500px;
height: 300px;
}
κ·Έλ¦¬κ³ μλ°μ€ν¬λ¦½νΈλ‘ μμμ μ κ·Όνκ³ style.setProperty('cssλ³μ', 'κ°') λ©μλλ‘ λ³μλ₯Ό μ¬μ€μ ν΄μ£Όλ©΄ λλ€.
document.querySelector('button').addEventListener('click', (e) => {
const $div = document.querySelector('div');
$div.style.setProperty('--bg-img', 'url(https://cdn.imweb.me/upload/S201903225c9441f9db892/219f92a94fb2a.jpg)');
})
See the Pen cssλ³μ μλ°μ€ν¬λ¦½νΈ μ‘°μ by barzz12 (@inpaSkyrim) on CodePen.
μλ°μ€ν¬λ¦½νΈλ‘ CSS λ³μ λ€λ£°λ μ£Όμμ
1. CSS λ³μκ° μ€λ³΅λ κ²½μ° μ°μ μμ
μ΄λ°μμΌλ‘ css λ³μλ₯Ό νμ©ν λ μ£Όμν μ μ μλ°μ€ν¬λ¦½νΈλ‘ λ³μ κ°μ λ³κ²½νλ κ²½μ° μΈλΌμΈμΌλ‘ CSSκ° μ μΈλκΈ° λλ¬Έμ, λ³λμ css νμΌμ μ μν λ³μλ³΄λ€ μμ± μ μ© μ°μ μμκ° λμ λ§μΌ λ³μλ₯Ό μ€λ³΅ μ μΈλ κ² μμ κ²½μ° μ£Όμλ₯Ό μνμ¬μΌ νλ€.
2. μ μμΌλ‘ CSS λ³μλ₯Ό μ¬μ©ν΄μΌ νλ€λ©΄ μμ μμμ μ μΈ
λν νΉμ html νκ·Έ μμμ μΈλΌμΈμΌλ‘ css λ³μλ₯Ό μ μΈνλ€λ©΄, κ·Έ λ³μλ ν΄λΉ μμμλ§ λ€μ΄μλ μ§μλ³μλ‘μ μ·¨κΈ λκΈ° λλ¬Έμ λ€λ₯Έ μμμμ κ°μ Έλ€ μ°μ§ λͺ»νλ€. μ΄λλ <html> μ΄λ <body> νκ·Έμ κ°μ μμ μμμ μΈλΌμΈ μ€νμΌλ‘ css λ³μλ₯Ό μ μ₯νλ μμΌλ‘, μμμ λ°°μ λ css λ³μ μμ κΈ°λ₯μ μμ©νλ©΄ λλ€.