Przełączanie tryb ciemny / jasny w JS i CSS

Coraz więcej witryn internetowych oferuje użytkownikom opcję przełączania między trybem jasnym a ciemnym, co pozwala na dostosowanie wyglądu strony do preferencji użytkownika. W tym artykule dowiesz się, jak stworzyć przełącznik trybu jasnego i ciemnego przy użyciu JavaScript i CSS. Skrypt przy wczytywaniu będzie sprawdzał preferencje użytkownika z przeglądarki i wg tego ustawiał domyślny tryb. Ostatnio wybrany tryb będzie zapisywany w localstorage.

Krok 1: Struktura HTML

Zacznijmy od utworzenia prostego kodu HTML, który zawiera elementy, które chcemy dostosować podczas przełączania między trybami.

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" href="style.css" />
    <title>Dark mode switcher</title>
  </head>
  <body>
    <div class="container">
      <h1>Welcome to my website!</h1>
      <p>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed commodo
        urna vel ligula fringilla, sit amet cursus justo luctus.
      </p>
      <label>
        <input type="checkbox" id="darkModeToggle" />
        Tryb Ciemny / Jasny
      </label>
    </div>
    <script src="app.js"></script>
  </body>
</html>

Krok 2: Stylizacja CSS

Teraz stwórzmy plik CSS (style.css), który zawiera style dla obu trybów. Dla trybu ciemnego będziemy ustawiać data-theme="dark" dla tagu <html> dlatego możemy skorzystać z takiego zapisu dla wszystkich kolorów które chcemy zmienić w trybie ciemnym: [data-theme="dark"] [selector CSS]

body {
  font-family: 'Arial', sans-serif;
  transition: background-color 0.3s ease;
}

[data-theme="dark"] body{
  background-color: #333;
  color: #fff;
}

.container {
  max-width: 600px;
  margin: 50px auto;
  padding: 20px;
  border-radius: 8px;
  box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
  transition: background-color 0.3s ease, color 0.3s ease;
}

Krok 3: JavaScript

W pliku app.js dodajemy kod JavaScript, który obsługuje przełącznik i zmienia atrybut data-theme dokumentu w zależności od statusu przełącznika. Na początku w funkcji checkDarkModePreference sprawdzamy czy mamy już zapisaną preferencje użytkownika w localstorage. Jeśli nie to pobieramy domyślną z przeglądarki. Po kliknięciu na checkbox zapisujemy bieżące ustawienie do locastorage, dzięki czemu przy ponownym odświeżeniu strony zostanie ono wczytane.

document.addEventListener('DOMContentLoaded', function () {
  const darkModeToggle = document.getElementById('darkModeToggle');

  function setDarkModePreference(value) {
    localStorage.setItem("darkMode", value.toString());
    document.documentElement.dataset.theme = value ? "dark" : "light";
    darkModeToggle.checked = !!value;
  }

  function checkDarkModePreference() {
    const storedDarkMode = localStorage.getItem("darkMode");
    if (storedDarkMode !== null) {
      setDarkModePreference(storedDarkMode === "true");
    } else {
      const prefersDarkMode = window.matchMedia(
        "(prefers-color-scheme: dark)"
      ).matches;
      setDarkModePreference(prefersDarkMode);
    }
  }

  checkDarkModePreference();

  darkModeToggle.addEventListener('change', function () {
    setDarkModePreference(darkModeToggle.checked)
  });
});

Teraz, gdy użytkownik zmieni tryb jasny/ciemny, preferencje będą zapisywane w localStorage i automatycznie wczytywane przy ponownym odwiedzeniu strony. Jeśli preferencje nie zostały zapisane wcześniej, używane są domyślne ustawienia przeglądarki.

Podsumowanie

Teraz masz działający przełącznik trybu jasnego/ciemnego! Dzięki połączeniu HTML, CSS i JavaScript możemy dostosowywać wygląd strony internetowej do preferencji użytkownika. Baw się kodem i dostosuj go do swoich potrzeb!

Kod przykładu znajduje się na GitHub: https://github.com/kamilwyremski/dark-mode-switcher

Ta strona używa ciasteczek (cookies), dzięki którym nasz serwis może działać lepiej. Więcej informacji

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close