Kontrast Tryb Logo Kontrast Tryb Skontaktuj Się
Skontaktuj Się

Detekcja Preferencji Użytkownika — prefers-color-scheme

Jak czytać systemowe preferencje użytkownika za pomocą media query. Respektowanie wyboru użytkownika bez zmuszania go do decyzji.

7 min Początkujący Luty 2026
Smartfon wyświetlający preferencje systemowe dla trybu ciemnego w ustawieniach

Czemu to ważne

Większość użytkowników ma ustawioną preferencję trybu ciemnego lub jasnego w swoim systemie operacyjnym. To nie jest wybór, który robi się raz w roku — to codziennie. Kiedy wchodzisz na stronę, która ignoruje ten wybór, czujesz się ignorowany.

Dobrą wiadomością jest, że to wcale nie jest trudne do wdrożenia. Media query `prefers-color-scheme` pozwala Ci przeczytać tę preferencję za pomocą kilku linijek CSS. Nie musisz budować skomplikowanego systemu przełączania motywów — czasami wystarczy po prostu zaakceptować to, co użytkownik już wybrał.

Grafika pokazująca interfejs systemu operacyjnego z wyraźnie zaznaczonym ustawieniem preferowanego motywu kolorów

Jak działa prefers-color-scheme

Zamiast sprawdzać czy użytkownik kliknął guzik czy zmienił ustawienia w jakimś panelu kontrolnym Twojej strony, możesz bezpośrednio zapytać system operacyjny. To jest właśnie to, co robi `prefers-color-scheme`.

Media query przyjmuje dwie wartości: `light` i `dark`. Kiedy użytkownik ma włączony tryb ciemny w systemie — czy to Windows, macOS, Android czy iOS — będzie pasować do `dark`. Jeśli ma jasny tryb, pasuje do `light`.

@media (prefers-color-scheme: dark) {
    body {
        background-color: #1a1a1a;
        color: #ffffff;
    }
}

@media (prefers-color-scheme: light) {
    body {
        background-color: #ffffff;
        color: #000000;
    }
}
Kod CSS pokazujący media queries dla prefers-color-scheme z wyraźnym formatowaniem i kolorystyka składni

Implementacja krok po kroku

To nie jest skomplikowane, ale musisz wiedzieć dokładnie, co robisz.

01

Zdefiniuj kolory podstawowe

Zamiast hardkodować kolory bezpośrednio w CSS, użyj zmiennych. To pozwoli Ci zmienić wszystko w jednym miejscu. Zdefiniuj zmienne w `:root` lub w media query dla każdego motywu.

02

Przypisz zmienne do elementów

Zamiast pisać `color: #ffffff`, pisz `color: var(–text-primary)`. Dzięki temu zmienne mogą się zmieniać w zależności od motywu bez zmiany samego CSS.

03

Przetestuj w systemowych ustawieniach

Nie przełączaj się przez guzik na swojej stronie. Przełącz się w ustawieniach systemu operacyjnego i odśwież stronę. Jeśli wszystko działa, to znaczy że prawidłowo czytasz preferencję.

Ilustracja pokazująca zmienne CSS custom properties i ich deklaracje w różnych kontekstach

Zmienne CSS — klucz do elastyczności

Kiedy definiujesz kolory w zmiennych, możesz zmienić wartości dla całego motywu w media query. Zamiast edytować każdy element osobno, zmieniasz wartość zmiennej raz, a wszyscy elementy, które jej używają, się automatycznie zmieniają.

Poza tym zmienne są wartościowe nie tylko dla `prefers-color-scheme`. Jeśli kiedyś zdecydujesz się dodać przycisk przełączania motywu dla użytkowników, którzy chcą go zmienić ręcznie, będziesz już gotowy. Cała infrastruktura będzie już na miejscu.

“Szanowanie preferencji użytkownika to nie dodatek — to podstawa dostępności. Jeśli użytkownik wybrał tryb ciemny, a Ty go zignorował, po prostu pokazałeś, że mu się nie liczysz.”

Praktyczne wskazówki na początek

Zanim zaczniesz wdrażać, pamiętaj o kilku rzeczach. To nie jest trudne, ale są pewne gotchas, na które wszyscy wpadają na początku.

  • Kontrast jest kluczowy. Nie wystarczy zmienić kolory — muszą być wystarczająco różne. Tekst musi być czytelny. 4.5:1 to minimum dla zwykłego tekstu.
  • Testuj na prawdziwych urządzeniach. Emulator przeglądarki czasami nie wyświetla motywu systemowego prawidłowo. Przełącz się na rzeczywistym telefonie lub komputerze.
  • Nie używaj tylko czerni i bieli. Czysty biały na czarnym boli oczy. Użyj odcieni — np. #f5f5f5 na #1a1a1a.
  • Obrazy mogą potrzebować dostosowania. Jeśli masz zdjęcie z białym tłem, może wyglądać dziwnie w ciemnym motywie. Rozważ filtry CSS lub inne obrazy.
Porównanie koloru tekstu na jasnym i ciemnym tle z wyraźnym wskaźnikiem kontrastów

Podsumowanie

`prefers-color-scheme` to nie zaawansowana technologia — to proste medium query, które czyta to, co użytkownik już wybrał. Nie musisz budować skomplikowanego systemu. Wystarczy kilka linijek CSS i zmienne.

Zaczni od podstaw: zmienne CSS, media query dla ciemnego i jasnego motywu, i testowanie w systemowych ustawieniach. Kiedy to będzie działać, możesz rozbudowywać. Ale nawet ten minimalny system będzie lepszy niż ignorowanie preferencji użytkownika.

To jest jedno z tych rozwiązań, które jest proste do wdrożenia, ale ogromnie wpływa na doświadczenie użytkownika. Osoby z wrażliwością na światło będą Ci wdzięczne.

Informacja edukacyjna: Ten artykuł ma na celu wyjaśnić koncepcje i najlepsze praktyki związane z implementacją prefers-color-scheme. Różne przeglądarki i urządzenia mogą zachowywać się nieco inaczej. Zawsze testuj swoją implementację w rzeczywistych warunkach i na różnych urządzeniach. Rekomendujemy konsultację z dokumentacją MDN i specyfikacją WCAG dla pełnego zrozumienia dostępności.