Zmienne CSS do przełączania motywów
Definiować pełną paletę kolorów za pomocą własności niestandardowych CSS i przełączać motywy przez zmianę atrybutu data
Zmienne CSS do przełączania motywów to bezpłatna lekcja React Academy na CoddyKit. To lekcja 2 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 React Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs React Academy zawiera 4 lekcji w sumie.
Definiowanie tokenów kolorów w :root
Własne właściwości CSS (zmienne) zdefiniowane w :root są dostępne globalnie w całym arkuszu stylów. Pełną paletę kolorów — tła, kolory tekstu, powierzchnie i obramowania — definiuje się raz, a następnie odwołuje do niej w całym arkuszu. Takie jedno źródło prawdy sprawia, że przełączanie motywów jest proste.
Nadpisywanie ciemnego motywu za pomocą data-theme
Po ustawieniu atrybutu data-theme="dark" na elemencie document.documentElement selektor CSS taki jak [data-theme='dark'] nadpisuje zmienne główne wartościami dla ciemnego motywu. Komponenty odwołują się do var(--color-bg) i automatycznie pobierają nowe wartości bez żadnych zmian w kodzie.
Najważniejsze zmienne do zdefiniowania
Co najmniej należy zdefiniować: --color-bg (tło strony), --color-text (główny tekst), --color-primary (kolor marki), --color-surface (tło karty lub panelu) oraz --color-border (separatory). Spójny zestaw tokenów zapobiega pojawianiu się przypadkowych wartości kolorów w komponentach.
Stosowanie zmiennych w stylach komponentów
W arkuszu CSS komponentu należy odwoływać się do zmiennych, na przykład za pomocą background: var(--color-bg) i color: var(--color-text). Można również podać wartość zapasową: var(--color-bg, #ffffff). Przeglądarka rozwiązuje zmienną podczas malowania, dlatego jedna klasa działa zarówno dla jasnego, jak i ciemnego motywu.
Płynne przejście podczas przełączania
Do selektora :root należy dodać transition: background-color 200ms, color 200ms. Po zmianie atrybutu data-theme wszystkie elementy korzystające ze zmiennych CSS płynnie przejdą do nowych wartości jednocześnie. Zapewnia to dopracowany efekt bez kodu animacji w JavaScript.
Zmienne CSS a style inline sterowane przez JavaScript
Zarządzanie motywem za pomocą zmiennych CSS jest lepsze niż ustawianie stylów inline z poziomu JavaScriptu. Przeglądarka natywnie obsługuje wszystkie przeliczenia stylów, nie występują dodatkowe ponowne renderowania Reacta wywoływane dla każdego komponentu potomnego z motywem, a kaskada CSS automatycznie obsługuje dziedziczenie. JavaScript musi jedynie przełączać jeden atrybut na elemencie głównym.
Awaryjne ustawienie systemowe z prefers-color-scheme
Zmienne CSS można połączyć z zapytaniem @media (prefers-color-scheme: dark) jako awaryjnym rozwiązaniem działającym wyłącznie w CSS. Nadpisania dla ciemnego motywu należy zdefiniować w zapytaniu medialnym dodatkowo do selektora data-theme lub zamiast niego. Dzięki temu tryb ciemny działa nawet wtedy, gdy JavaScript nie został jeszcze uruchomiony.
Łączenie data-theme z awaryjnym zapytaniem medialnym
Najbardziej niezawodne podejście łączy oba mechanizmy: zapytanie @media zapewnia domyślne ustawienie systemu, atrybut data-theme umożliwia nadpisanie przez użytkownika za pomocą JavaScriptu. Gdy atrybut jest obecny, ma pierwszeństwo dzięki większej specyficzności; gdy go nie ma, działa zapytanie medialne.
Obrazy w trybie ciemnym
W przypadku obrazów, które źle wyglądają na ciemnym tle, należy użyć elementu HTML picture z elementem potomnym source media="(prefers-color-scheme: dark)". Przeglądarka automatycznie wybierze ciemny wariant. W przypadku ikon SVG w CSS można użyć filter: invert(1) jako szybkiego przybliżenia.
Zakresowe zmienne motywu
Zmienne CSS można również ograniczyć do pojedynczych komponentów, definiując je na głównym elemencie komponentu zamiast w :root. Umożliwia to stosowanie osobnych motywów komponentów, na przykład paska bocznego z własnym tokenem tła różniącym się od tła strony, przy jednoczesnym poprawnym przełączaniu wraz z globalnym przełącznikiem motywu.
Debugowanie zmiennych CSS w DevTools
Chrome DevTools wyświetla rozwiązane wartości zmiennych CSS w panelu Styles. Należy kliknąć odwołanie do zmiennej, aby przejść do jej definicji. Ułatwia to sprawdzenie, czy do danego elementu została zastosowana właściwa wartość tokenu dla ciemnego lub jasnego motywu. W panelu można również zmieniać wartości zmiennych na żywo.
Własne właściwości CSS dla motywów
Jaki selektor CSS służy do definiowania globalnych własnych właściwości CSS stosowanych w całym dokumencie?
Podsumowanie lekcji: zmienne CSS do przełączania motywów
Własne właściwości CSS w :root zapewniają scentralizowany system tokenów dla motywów. Aby natychmiast przełączać motywy, należy przełączać atrybut data-theme na elemencie html. Należy dodać przejścia CSS dla płynnej animacji, używać zapytania medialnego prefers-color-scheme jako awaryjnego rozwiązania działającego wyłącznie w CSS oraz unikać nadpisań stylów JavaScriptu dla poszczególnych komponentów.
Często zadawane pytania
Czy lekcja „Zmienne CSS do przełączania motywów” jest bezpłatna?
Tak — pełny tekst „Zmienne CSS do przełączania 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 React Academy, przejdź na CoddyKit PRO. Kurs React Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Zmienne CSS do przełączania motywów”?
Definiować pełną paletę kolorów za pomocą własności niestandardowych CSS i przełączać motywy przez zmianę atrybutu data Ćwiczysz React 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ąć React Academy?
Nie wymagamy żadnego doświadczenia. React 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 2 z 4.
Ile czasu zajmuje lekcja „Zmienne CSS do przełączania 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 React Academy?
Tak. Każda lekcja React 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
- Wykrywanie schematu kolorów systemu
- Zmienne CSS do przełączania motywów
- React Context do przechowywania stanu motywu
- Zapisywanie motywu i zapobieganie migotaniu