Królewskie Strony

to co nam się podoba w internecie

Jak wdrożyć wersję ciemną (dark mode) na stronie

Implementacja wersji ciemnej na stronie internetowej staje się coraz bardziej kluczowa dla poprawy użyteczności, oszczędzania energii urządzeń OLED oraz poprawy komfortu użytkownika podczas nocnych sesji. Poniżej omówimy korzyści, metody wprowadzenia, przykładowy kod oraz dobre praktyki związane z trybem ciemnym.

Zalety trybu ciemnego

Komfort wizualny

Tryb ciemny zmniejsza natężenie światła emitowanego przez ekran, co przekłada się na mniejsze zmęczenie oczu przy słabym oświetleniu. Użytkownicy często odczuwają ulgę podczas czytania nocą, a ciemniejsze tło pozwala skupić wzrok na treści.

Oszczędność energii

Na wyświetlaczach OLED i AMOLED ciemne piksele są nieaktywne, co zmniejsza zużycie energii. Dzięki temu wydajność baterii wzrasta, a czas pracy urządzenia na jednym ładowaniu może być nawet o kilkadziesiąt procent dłuższy.

Estetyka i nowoczesność

Coraz więcej aplikacji i serwisów wykorzystuje tryb ciemny jako element identyfikacji wizualnej. Ciemne motywy kojarzą się z elegancją i nowoczesnym wyglądem, przyciągając uwagę użytkowników ceniących minimalistyczną estetykę.

Wybór metody implementacji

Media query prefers-color-scheme

Najłatwiejszym sposobem jest wykorzystanie wbudowanej w CSS funkcji prefers-color-scheme. Przeglądarka automatycznie wykrywa preferencje systemowe użytkownika i stosuje odpowiedni styl:

  • @media (prefers-color-scheme: dark) { … }
  • @media (prefers-color-scheme: light) { … }

Ta metoda wymaga minimalnej konfiguracji i nie wymusza ręcznej ingerencji użytkownika.

Przełącznik ręczny

Własny przełącznik w UI pozwala użytkownikowi samodzielnie decydować o motywie. Wymaga to:

  • HTML: <button id="theme-toggle">Dark Mode</button>
  • CSS: klasy np. .dark-mode i .light-mode
  • JavaScript: kod zmieniający klasę na body

Połączenie obu podejść

Warto nasłuchiwać prefers-color-scheme, a jednocześnie udostępnić przycisk do ręcznej zmiany. Dzięki temu automatycznie nadamy motyw zgodny z systemem, ale również umożliwimy personalizację.

Implementacja CSS i JavaScript

Definiowanie zmiennych CSS

Stosowanie CSS variables ułatwia zarządzanie kolorystyką. Przykładowy kod:

  • :root { –bg-color: #ffffff; –text-color: #000000; }
  • .dark-mode { –bg-color: #121212; –text-color: #e0e0e0; }

Później w stylach odwołujemy się do zmiennych:

  • body { background-color: var(–bg-color); color: var(–text-color); }
  • a { color: var(–link-color, blue); }

Automatyczne wykrywanie

W CSS dodajemy media query:

  • @media (prefers-color-scheme: dark) {
      body { background-color: #121212; color: #e0e0e0; }
    }

Lub łączymy z klasą .dark-mode w JS, gdy użytkownik włączy tryb ręcznie.

Prosty skrypt JavaScript

Przykład kodu do przełączania motywu i zapisywania preferencji w Local Storage:

const btn = document.getElementById('theme-toggle');
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
const storedTheme = localStorage.getItem('theme');

function applyTheme(theme) {
  document.documentElement.classList.toggle('dark-mode', theme === 'dark');
}

if (storedTheme) {
  applyTheme(storedTheme);
} else if (prefersDark) {
  applyTheme('dark');
}

btn.addEventListener('click', () => {
  const current = document.documentElement.classList.contains('dark-mode') ? 'dark' : 'light';
  const next = current === 'dark' ? 'light' : 'dark';
  applyTheme(next);
  localStorage.setItem('theme', next);
});

Skrypt przy pierwszym załadowaniu stosuje zapisane ustawienia, a w przypadku ich braku respektuje ustawienie systemowe.

Dobre praktyki i dostępność

Kontrast i czytelność

Kluczowe jest zapewnienie odpowiedniego kontrastu między tekstem a tłem. Minimalne wartości kontrastu można weryfikować przy pomocy narzędzi takich jak WebAIM Contrast Checker.

Animacje i płynne przejścia

Warto dodać CSS transition, by zmiana motywu była przyjemniejsza:

  • html { transition: background-color 0.3s, color 0.3s; }

Obsługa obrazków i ikon

Dla wielu grafik w trybie ciemnym konieczne będzie dostarczenie alternatywnych wersji o odwróconej kolorystyce lub półprzezroczystych SVG. Można to realizować za pomocą atrybutu srcset lub manipulując klasami w JS.

Dostępność (accessibility)

Upewnij się, że wszystkie elementy interaktywne mają odpowiedni stan focus i hover w obu motywach. Testuj z czytnikami ekranu oraz przy pomocy narzędzi do automatycznej walidacji accessibility.

Testowanie i iteracja

Po wdrożeniu testuj widok na różnych urządzeniach, rozdzielczościach, przeglądarkach oraz w trybie light/dark. Zbieraj feedback od użytkowników i obserwuj wskaźniki zaangażowania, by poprawić ewentualne niedoskonałości.

Podsumowanie implementacji

Kluczowe kroki

  • Zdefiniuj zmienne CSS dla kolorów bazowych.
  • Dodaj media query prefers-color-scheme.
  • Stwórz przełącznik motywu i skrypt JS przechowujący preferencje.
  • Zadbaj o wysoki kontrast i dostępność elementów.

Efekt końcowy

Poprzez wdrożenie powyższych rozwiązań stworzysz stronę przyjazną dla oczu użytkownika, energooszczędną i zgodną z nowoczesnymi trendami projektowania interfejsów.