Zmienne CSS na potrzeby motywów
Proszę deklarować właściwości niestandardowe za pomocą --, używać var(), nadpisywać je w zagnieżdżonych zakresach oraz wdrożyć przełącznik jasnego i ciemnego motywu.
Zmienne CSS na potrzeby motywów to bezpłatna lekcja Frontend Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Frontend Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Frontend Academy zawiera 4 lekcji w sumie.
Czym są niestandardowe właściwości CSS?
Niestandardowe właściwości CSS (zmienne CSS) przechowują wartości, których można ponownie używać w całym arkuszu stylów. Definiuje się je za pomocą --name: value, a odwołuje do nich za pomocą var(--name). W przeciwieństwie do zmiennych preprocesora (Sass) są dynamiczne — można je aktualizować za pomocą JavaScriptu.
Definiowanie niestandardowych właściwości
Zdefiniuj właściwości na :root, aby były dostępne globalnie. Możesz również zdefiniować je na dowolnym elemencie, ograniczając ich zakres do poddrzewa tego elementu.
:root {
--color-primary: #3182ce;
--color-bg: #f7fafc;
--color-text: #1a202c;
--spacing-md: 16px;
--border-radius: 8px;
--font-sans: 'Inter', system-ui, sans-serif;
}Używanie niestandardowych właściwości
Odwołuj się do zmiennej za pomocą var(--name). Dodaj wartość zastępczą jako drugi argument: var(--color-primary, #3182ce). Wartość zastępcza zostanie użyta, jeśli zmienna nie jest zdefiniowana.
.card {
background: var(--color-bg);
color: var(--color-text);
padding: var(--spacing-md);
border-radius: var(--border-radius);
}
.btn {
background: var(--color-primary, blue); /* fallback */
}Kaskada: zmienne o ograniczonym zakresie
Niestandardowe właściwości podlegają kaskadowaniu i dziedziczeniu. Jeśli przedefiniujesz zmienną na elemencie potomnym, zastąpi ona wartość elementu nadrzędnego dla tego elementu i wszystkich jego elementów potomnych.
:root { --accent: blue; }
.card { color: var(--accent); } /* blue */
.special-section {
--accent: green; /* override for this subtree */
}
.special-section .card { color: var(--accent); } /* green */Tryb ciemny za pomocą zmiennych CSS
Najczystszy wzorzec trybu ciemnego polega na zdefiniowaniu jasnej i ciemnej palety kolorów jako zmiennych CSS. Przełączaj klasę albo użyj zapytania media prefers-color-scheme, aby zmieniać paletę. Nie ma potrzeby nadpisywania poszczególnych właściwości kolorów.
:root {
--bg: #ffffff;
--text: #1a202c;
--card-bg: #f7fafc;
}
[data-theme='dark'], @media (prefers-color-scheme: dark) {
:root {
--bg: #1a202c;
--text: #f7fafc;
--card-bg: #2d3748;
}
}
body { background: var(--bg); color: var(--text); }Przełączanie trybu ciemnego za pomocą JavaScriptu
Dodaj przycisk przełącznika, który zmienia atrybut data albo klasę na elemencie głównym. Zmienne CSS zajmą się resztą — jedna linia JavaScriptu, bez nadpisywania poszczególnych stylów.
const btn = document.querySelector('#theme-toggle');
btn.addEventListener('click', () => {
const current = document.documentElement.getAttribute('data-theme');
document.documentElement.setAttribute(
'data-theme',
current === 'dark' ? 'light' : 'dark'
);
});Aktualizowanie zmiennych za pomocą JavaScriptu
element.style.setProperty('--name', value) aktualizuje niestandardową właściwość w stylu inline. Usunięcie jej za pomocą removeProperty przywraca wartość wynikającą z kaskady. Umożliwia to tworzenie dynamicznych motywów i animowanych wartości.
// Dynamically set a CSS variable from JS:
document.documentElement.style.setProperty('--primary-hue', '220');
// Based on input:
const hue = document.querySelector('#hue-slider');
hue.addEventListener('input', () => {
document.documentElement.style.setProperty('--primary-hue', hue.value);
});Tokeny projektowe jako zmienne CSS
Zdefiniuj wszystkie decyzje projektowe — paletę kolorów, skalę odstępów i skalę typografii — jako zmienne CSS. Dzięki temu powstaje jedno źródło prawdy, z którego korzystają komponenty. Zmiana tokenu jest natychmiast propagowana wszędzie.
:root {
/* Colour scale */
--blue-50: #ebf8ff;
--blue-100: #bee3f8;
--blue-500: #3182ce;
--blue-900: #1a365d;
/* Spacing scale */
--space-1: 4px;
--space-2: 8px;
--space-4: 16px;
--space-8: 32px;
}Używanie zmiennych w calc()
Zmienne CSS działają wewnątrz calc(), umożliwiając wykonywanie responsywnych obliczeń na podstawie wartości tokenów.
:root { --header-height: 64px; }
.content {
/* Leave room for fixed header */
padding-top: calc(var(--header-height) + 24px);
min-height: calc(100vh - var(--header-height));
}Obsługa przeglądarek
Niestandardowe właściwości CSS są obsługiwane we wszystkich nowoczesnych przeglądarkach (w głównych przeglądarkach od 2016 roku). W przypadku tej funkcji nie trzeba używać preprocesora. W bardzo starych przeglądarkach należy zapewnić rozwiązanie awaryjne: podać wartość statyczną przed var().
.btn {
background: blue; /* IE fallback */
background: var(--color-primary); /* modern browsers */
}Niestandardowe właściwości CSS a zmienne Sass
Zmienne Sass są kompilowane do wartości statycznych. Niestandardowe właściwości CSS istnieją w czasie działania, są dynamiczne, można je zmieniać za pomocą JavaScriptu i podlegają kaskadowaniu w DOM. Zmiennych CSS należy używać do obsługi motywów, a zmiennych Sass — jako stałych ustalanych podczas budowania.
Szybkie sprawdzenie
Jak odczytać i zaktualizować niestandardową właściwość CSS z poziomu JavaScriptu?
Podsumowanie: niestandardowe właściwości CSS
Deklaruj je za pomocą -- na :root, aby objąć zakresem globalnym. Używaj ich za pomocą var(). Zmienne o ograniczonym zakresie są kaskadowane do elementów potomnych. Tryb ciemny: przedefiniuj tokeny kolorów w zapytaniu media lub za pomocą atrybutu danych. Aktualizuj je z poziomu JavaScriptu za pomocą style.setProperty(). Tokeny projektowe jako zmienne = jedno źródło prawdy.
Często zadawane pytania
Czy lekcja „Zmienne CSS na potrzeby motywów” jest bezpłatna?
Tak — pełny tekst „Zmienne CSS na potrzeby motywów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Frontend Academy, przejdź na CoddyKit PRO. Kurs Frontend Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Zmienne CSS na potrzeby motywów”?
Proszę deklarować właściwości niestandardowe za pomocą --, używać var(), nadpisywać je w zagnieżdżonych zakresach oraz wdrożyć przełącznik jasnego i ciemnego motywu. Ćwiczysz Frontend Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Frontend Academy?
Nie wymagamy żadnego doświadczenia. Frontend Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Zmienne CSS na potrzeby motywów”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Frontend Academy?
Tak. Każda lekcja Frontend Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Flexbox — dogłębne omówienie: wyrównywanie, zawijanie i kolejność
- CSS Grid: template-areas, auto-fit, minmax
- Łączenie Flexbox i Grid
- Zmienne CSS na potrzeby motywów