CSS / CSS Custom property (variable)
CSS Custom property (variable)
CSS Custom property нь CSS-д өөрийн гэсэн хувьсагч тодорхойлох боломжийг олгоно. Нэг утгыг олон газар ашигладаг бол variable ашиглах нь засахад, дахин ашиглахад хавьгүй хялбар болгоно.
Зарлах ба ашиглах
Custom property -- давхар зураасаар эхэлнэ:
css
/* Зарлах */
.card {
--card-bg: #0f172a;
--card-radius: 12px;
}
/* Ашиглах */
.card {
background: var(--card-bg);
border-radius: var(--card-radius);
}
:root selector — глобал variable
:root нь HTML баримтын хамгийн дээд элемент (<html>)-ийг сонгоно. Энд тодорхойлсон variable бүх хуудсанд хүртээмжтэй байна:
css
:root {
/* Өнгө */
--color-bg: #0b1120;
--color-surface: #0f172a;
--color-elevated: #1e293b;
--color-border: #1e293b;
--color-text: #f1f5f9;
--color-muted: #94a3b8;
--color-dim: #475569;
--color-primary: #a78bfa;
--color-success: #4ade80;
--color-danger: #f87171;
/* Хэмжээ */
--radius-sm: 4px;
--radius-md: 8px;
--radius-lg: 12px;
--radius-full: 9999px;
/* Зай */
--space-1: 4px;
--space-2: 8px;
--space-3: 12px;
--space-4: 16px;
--space-6: 24px;
--space-8: 32px;
--space-12: 48px;
/* Фонт */
--font-sm: 0.875rem;
--font-base: 1rem;
--font-lg: 1.125rem;
--font-xl: 1.25rem;
--font-2xl: 1.5rem;
--font-3xl: 1.875rem;
}
var() — ашиглах ба fallback утга
css
.button {
background: var(--color-primary);
/* Fallback: variable байхгүй бол ашиглах утга */
color: var(--color-text, #f1f5f9);
/* Давхарласан fallback */
border: 1px solid var(--color-border, var(--color-elevated, #1e293b));
}
Компонент дотор override хийх
Global variable-г компонент дотор override хийж болно:
css
:root {
--color-primary: #a78bfa; /* нил ягаан */
}
/* Энэ компонент дотор өөр утга */
.danger-zone {
--color-primary: #f87171; /* улаан */
}
.danger-zone .button {
background: var(--color-primary); /* улаан болно */
}
Dark / Light theme
css
:root {
--bg: #ffffff;
--text: #1e293b;
--surface: #f8fafc;
}
[data-theme="dark"] {
--bg: #0b1120;
--text: #f1f5f9;
--surface: #0f172a;
}
body {
background: var(--bg);
color: var(--text);
}
.card {
background: var(--surface);
}
html
<body data-theme="dark">
...
</body>
JavaScript-ээр CSS variable өөрчлөх
JavaScript нь CSS custom property-г унших ба бичих боломжтой:
javascript
// Унших
const root = document.documentElement;
const primary = getComputedStyle(root).getPropertyValue("--color-primary");
console.log(primary); // " #a78bfa"
// Бичих — бүх хуудсанд нөлөөлнө
root.style.setProperty("--color-primary", "#4ade80");
// Тодорхой элементэд
const card = document.querySelector(".card");
card.style.setProperty("--card-bg", "#1e293b");
Жишээ — theme toggle товч:
javascript
const toggleBtn = document.getElementById("theme-toggle");
toggleBtn.addEventListener("click", () => {
const current = document.documentElement.getAttribute("data-theme");
document.documentElement.setAttribute(
"data-theme",
current === "dark" ? "light" : "dark",
);
});
Бодит жишээ — бүрэн компонент системтэй
css
:root {
--btn-bg: #7c3aed;
--btn-hover: #6d28d9;
--btn-text: #ffffff;
--btn-radius: var(--radius-md);
--btn-padding: var(--space-2) var(--space-4);
--btn-font: var(--font-base);
}
.btn {
background: var(--btn-bg);
color: var(--btn-text);
border-radius: var(--btn-radius);
padding: var(--btn-padding);
font-size: var(--btn-font);
border: none;
cursor: pointer;
transition: background 0.15s;
}
.btn:hover {
background: var(--btn-hover);
}
/* Variant — зөвхөн variable-г override хийнэ */
.btn-danger {
--btn-bg: #dc2626;
--btn-hover: #b91c1c;
}
.btn-ghost {
--btn-bg: transparent;
--btn-hover: #1e293b;
--btn-text: #a78bfa;
}
html
<button class="btn">Үндсэн</button>
<button class="btn btn-danger">Устгах</button>
<button class="btn btn-ghost">Цуцлах</button>
Дараагийн хичээлд:
Specificity ба cascade-ийн дүрмийг судална. Яагаад зарим CSS дүрэм нөгөөгөө дарж, зарим нь үгүй болдгийг тооцооллоор ойлгоно.