Zarządzanie motywami i trybem dark/light
Zarządzanie motywami i trybem dark/light
Jednym z najczęstszych zastosowań zmiennych CSS na dużą skalę jest tworzenie tzw. motywów kolorystycznych – czyli np. jasnego i ciemnego trybu interfejsu. Dzięki custom properties możemy zdefiniować wszystkie kolory w jednym miejscu i dynamicznie zmieniać je np. przez dodanie klasy do <body>.
Definiowanie zmiennych globalnych
Zmienną CSS deklarujemy w bloku :root, czyli na najwyższym poziomie drzewa DOM:
:root {
--color-bg: #ffffff;
--color-text: #111111;
--color-primary: #0057ff;
}
Możemy teraz używać tych zmiennych w dowolnym miejscu stylów:
body {
background-color: var(--color-bg);
color: var(--color-text);
}
.button {
background-color: var(--color-primary);
color: #fff;
}
Dodanie trybu ciemnego (dark mode)
Aby zmienić motyw, wystarczy nadpisać wartości zmiennych – np. przez klasę .dark dodaną do <body>:
body.dark {
--color-bg: #121212;
--color-text: #eeeeee;
--color-primary: #3399ff;
}
Co ważne – nie musimy zmieniać stylów komponentów. One korzystają z tych samych zmiennych, a ich wartości są po prostu nadpisywane w innym kontekście.
Pełen przykład działania
<body class="dark">
<article class="card">
<h2>Tytuł karty</h2>
<p>To przykładowa treść karty.</p>
<button class="button">Zobacz więcej</button>
</article>
</body>
:root {
--color-bg: #ffffff;
--color-text: #111111;
--color-primary: #0057ff;
}
body {
background-color: var(--color-bg);
color: var(--color-text);
font-family: sans-serif;
}
body.dark {
--color-bg: #121212;
--color-text: #eeeeee;
--color-primary: #3399ff;
}
.card {
background-color: var(--color-bg);
border: 1px solid var(--color-primary);
padding: 1rem;
border-radius: 8px;
}
.button {
background-color: var(--color-primary);
color: #fff;
border: none;
padding: 0.5rem 1rem;
}
Możesz zobaczyć i przetestować działanie tego motywu, usuwając lub dodając klasę dark na <body>.
Dobre praktyki
- Zawsze definiuj kolory globalnie – w
:rootlub w klasie motywu - Nie używaj wartości HEX bezpośrednio w komponentach – tylko
var() - Trzymaj wszystkie zmienne motywów w jednym miejscu – np. osobnym pliku lub warstwie ITCSS
- Stosuj przełącznik (JavaScript, preferencje systemowe) tylko do zmiany klasy – nie manipuluj stylem inline
Ćwiczenie
Stwórz własny komponent „baneru” (.banner) zawierający:
- nagłówek i tekst,
- kolory w pełni oparte na zmiennych,
- dwa motywy: jasny (domyślny) i ciemny (po dodaniu klasy
dark), - zmienne zdefiniowane tylko raz – nadpisywane w motywie, nie w komponentach.
Dla chętnych: dodaj dodatkowy motyw np. blue, który zmienia tylko --color-primary.
Wniosek
Zarządzanie motywami za pomocą zmiennych CSS to najprostszy sposób na tworzenie skalowalnych i elastycznych interfejsów. Dzięki podejściu „zmienne + klasy”, cały styl komponentów pozostaje niezmienny – zmienia się tylko kontekst, w którym działają. To oszczędza czas, redukuje błędy i pozwala tworzyć nowoczesne systemy designu.
