Wersja 1.0.6

Fiszka: light / dark mode w CSS

Fiszka: light / dark mode

Automatyczne odwracanie kolorów strony

Ta fiszka pokazuje najlepszy sposób na zrobienie jasnego i ciemnego motywu na stronie. Masz tu teorię, gotowy kod i działający przełącznik słoneczko / księżyc.
:root .dark CSS variables prefers-color-scheme toggle

1. Najlepsza metoda

CSS variables + klasa .dark

Najczyściej robi się to tak, że definiujesz kolory w :root, a dla trybu ciemnego nadpisujesz je w body.dark. Wtedy cała strona zmienia się jednym kliknięciem.

:root {
  --bg: #ffffff;
  --text: #000000;
}

body.dark {
  --bg: #000000;
  --text: #ffffff;
}

body {
  background: var(--bg);
  color: var(--text);
}
To jest najlepsza metoda do Creo55 i podobnych projektów, bo nie zmieniasz 200 miejsc w CSS, tylko sterujesz wszystkim przez zmienne.

2. Jak to działa praktycznie

:root → kolory domyślne body.dark → kolory ciemne background: var(--bg) color: var(--text) klik przycisku → document.body.classList.toggle('dark')

Jasny tryb

Ustawiasz białe tło, czarny tekst, jasne karty i delikatne obramowania.

Ciemny tryb

Podmieniasz tylko wartości zmiennych. Cała reszta styli zostaje taka sama.

Największa zaleta

Jedna struktura HTML, jeden CSS, a dwa wyglądy strony bez przepisywania wszystkiego.

3. Kod dla Twojego projektu

Wersja bazowa

:root {
  --bg: #ffffff;
  --text: #000000;
  --card: #ffffff;
  --line: #dddddd;
}

body.dark {
  --bg: #0f1115;
  --text: #eef2f7;
  --card: #171a21;
  --line: #2d3442;
}

body {
  background: var(--bg);
  color: var(--text);
}

.card {
  background: var(--card);
  border: 1px solid var(--line);
}

4. Przycisk słoneczko / księżyc

JavaScript

const btn = document.getElementById('themeToggle');

btn.addEventListener('click', () => {
  document.body.classList.toggle('dark');
});

Tyle wystarczy, żeby przełączać motyw. U mnie na górze tej strony to właśnie działa.

5. Automatyczne dopasowanie do systemu

prefers-color-scheme

Możesz też sprawdzać, czy użytkownik ma w systemie ustawiony ciemny motyw i automatycznie go włączyć.

@media (prefers-color-scheme: dark) {
  body {
    
    
  }
}
To jest wygodne, ale do własnego panelu lub strony firmowej lepiej mieć też ręczny przełącznik.

6. Metoda brutalna: negatyw strony

filter: invert(1)

html {
  filter: invert(1);
}

Technicznie działa, ale odwraca też zdjęcia, logo i inne grafiki. Dlatego zwykle się tego nie używa.

7. Mała demonstracja

☀️ Jasny tryb

Białe tło, czarny tekst, spokojny wygląd, dobry do czytania i dokumentacji.

🌙 Ciemny tryb

Ciemne tło, jasny tekst, często wygodny w panelach, edytorach i narzędziach roboczych.

8. Najprostsza ściąga

1. Zrób zmienne w :root 2. Zrób drugi zestaw w body.dark 3. W stylach używaj var(--bg), var(--text), var(--card) 4. Dodaj przycisk 5. Klikiem przełączaj klasę .dark
Dla Creo55 najlepsza droga to nie negatyw i nie ręczne przerabianie wszystkiego, tylko zmienne CSS + przełącznik motywu.