CSS / Dark mode
Dark mode
Харанхуй горим нь орчин үеийн вэбийн стандарт болжээ. CSS-д dark mode хэрэгжүүлэх хоёр арга байдаг: prefers-color-scheme media query ба CSS variable хосолсон toggle.
prefers-color-scheme media query
Хэрэглэгчийн үйлдлийн систем дэх тохиргоог унших:
css
/* Гэрэл горим — анхдагч */
body {
background: #ffffff;
color: #0f172a;
}
/* Үйлдлийн систем харанхуй горимд байвал */
@media (prefers-color-scheme: dark) {
body {
background: #0b1120;
color: #f1f5f9;
}
}
Гурван боломжит утга:
css
@media (prefers-color-scheme: dark) {
/* харанхуй */
}
@media (prefers-color-scheme: light) {
/* гэрэл */
}
/* no-preference — хэрэглэгч тодорхойлоогүй, анхдагч хэрэглэнэ */
CSS variable-аар theme — зөв арга
Шинж чанар бүрийг давтан бичихийн оронд өнгийг variable-д хадгалж, theme солих үед зөвхөн variable-ийг өөрчилнэ:
css
/* Гэрэл горим — анхдагч */
:root {
--дэвсгэр: #ffffff;
--гадаргуу: #f8fafc;
--хил: #e2e8f0;
--текст: #0f172a;
--текст-бүдэг: #64748b;
--accent: #7c3aed;
}
/* Харанхуй горим — OS тохиргоогоор */
@media (prefers-color-scheme: dark) {
:root {
--дэвсгэр: #0b1120;
--гадаргуу: #0f172a;
--хил: #1e293b;
--текст: #f1f5f9;
--текст-бүдэг: #94a3b8;
--accent: #a78bfa;
}
}
/* Компонентууд variable ашиглана — theme-ийн тухай мэдэхгүй */
body {
background: var(--дэвсгэр);
color: var(--текст);
}
.карт {
background: var(--гадаргуу);
border: 1px solid var(--хил);
}
.бүдэг-текст {
color: var(--текст-бүдэг);
}
data attribute-аар theme — toggle-д зориулсан арга
JavaScript-ийн toggle товч хийхийн тулд media query биш data-theme attribute ашиглана:
css
/* Гэрэл горим */
[data-theme="light"] {
--дэвсгэр: #ffffff;
--гадаргуу: #f8fafc;
--хил: #e2e8f0;
--текст: #0f172a;
--текст-бүдэг: #64748b;
--accent: #7c3aed;
}
/* Харанхуй горим */
[data-theme="dark"] {
--дэвсгэр: #0b1120;
--гадаргуу: #0f172a;
--хил: #1e293b;
--текст: #f1f5f9;
--текст-бүдэг: #94a3b8;
--accent: #a78bfa;
}
HTML-д:
html
<html data-theme="dark"></html>
Хоёуланг хослуулсан бүрэн шийдэл
OS тохиргоог анхдагч болгож, гараар сэлгэх боломж нэмнэ:
css
/* 1. OS тохиргоог анхдагч болгох */
:root {
--дэвсгэр: #ffffff;
--гадаргуу: #f8fafc;
--хил: #e2e8f0;
--текст: #0f172a;
--текст-бүдэг: #64748b;
--accent: #7c3aed;
}
@media (prefers-color-scheme: dark) {
:root {
--дэвсгэр: #0b1120;
--гадаргуу: #0f172a;
--хил: #1e293b;
--текст: #f1f5f9;
--текст-бүдэг: #94a3b8;
--accent: #a78bfa;
}
}
/* 2. Гараар сэлгэхэд data-theme давамгайлна */
[data-theme="light"] {
--дэвсгэр: #ffffff;
--гадаргуу: #f8fafc;
--хил: #e2e8f0;
--текст: #0f172a;
--текст-бүдэг: #64748b;
--accent: #7c3aed;
}
[data-theme="dark"] {
--дэвсгэр: #0b1120;
--гадаргуу: #0f172a;
--хил: #1e293b;
--текст: #f1f5f9;
--текст-бүдэг: #94a3b8;
--accent: #a78bfa;
}
/* 3. Компонентууд */
body {
background: var(--дэвсгэр);
color: var(--текст);
transition:
background 0.3s ease,
color 0.3s ease;
}
Toggle товч — JavaScript
html
<button id="theme-toggle" aria-label="Горим солих">🌙</button>
javascript
const toggle = document.getElementById("theme-toggle");
const html = document.documentElement;
// Хадгалагдсан тохиргоог уншина
const хадгалагдсан = localStorage.getItem("theme");
if (хадгалагдсан) {
html.setAttribute("data-theme", хадгалагдсан);
toggle.textContent = хадгалагдсан === "dark" ? "☀️" : "🌙";
}
toggle.addEventListener("click", () => {
const одоогийн = html.getAttribute("data-theme");
const шинэ = одоогийн === "dark" ? "light" : "dark";
html.setAttribute("data-theme", шинэ);
localStorage.setItem("theme", шинэ);
toggle.textContent = шинэ === "dark" ? "☀️" : "🌙";
});
css
/* Toggle товчны загвар */
#theme-toggle {
background: var(--гадаргуу);
border: 1px solid var(--хил);
border-radius: 8px;
padding: 8px 12px;
cursor: pointer;
font-size: 18px;
transition: background 0.2s ease;
}
#theme-toggle:hover {
background: var(--хил);
}
Зургийн тохиргоо
Зургийг dark mode-д тохируулах:
css
/* Dark mode-д зургийн гэрлийг бууруулах */
@media (prefers-color-scheme: dark) {
img {
filter: brightness(0.85);
}
}
/* Эсвэл data-theme-аар */
[data-theme="dark"] img {
filter: brightness(0.85);
}
/* SVG дүрс */
[data-theme="dark"] .дүрс {
filter: invert(1);
}
color-scheme property
Хөтчийн анхдагч UI элементүүдэд (input, select, scrollbar) мэдэгдэнэ:
css
:root {
color-scheme: light dark; /* хоёуланг дэмждэг */
}
[data-theme="dark"] {
color-scheme: dark;
}
[data-theme="light"] {
color-scheme: light;
}
Бодит жишээ: ulaanbaatar.app-ийн theme систем
css
:root {
/* Харанхуй горим — анхдагч (энэ сайтын стиль) */
--bg-base: #0b1120;
--bg-surface: #0f172a;
--bg-elevated: #1e293b;
--text-primary: #f1f5f9;
--text-muted: #94a3b8;
--text-dim: #475569;
--border: #1e293b;
--accent: #a78bfa;
}
/* Хэрэв гэрэл горим хэрэгтэй болвол */
[data-theme="light"] {
--bg-base: #f8fafc;
--bg-surface: #ffffff;
--bg-elevated: #f1f5f9;
--text-primary: #0f172a;
--text-muted: #475569;
--text-dim: #94a3b8;
--border: #e2e8f0;
--accent: #7c3aed;
}
body {
background: var(--bg-base);
color: var(--text-primary);
}
.карт {
background: var(--bg-surface);
border: 1px solid var(--border);
border-radius: 12px;
}
Дараагийн хичээлд:
BEM methodology — CSS классуудыг системтэй нэрлэх арга барилыг судална.