Przejdź do głównej treści
Grafika przedstawia ukryty obrazek

Jak opracować nowy motyw CSS do Bootstrap 5.3 z obsługą trybów light i dark

Zdjecie zwiazane z Jak opracowa nowy motyw CSS do Bootstrap 53 z obsug trybw light i dark

Tworzenie niestandardowego motywu do Bootstrap 5.3 to świetny sposób na wyróżnienie swojej aplikacji, jednocześnie zachowując spójność i dostępność. W tym artykule pokażemy krok po kroku, jak opracować motyw z obsługą wyłącznie dwóch trybów kolorystycznych: jasnego (light) i ciemnego (dark). Szczególną uwagę poświęcimy doborowi kolorów i zgodności z WCAG (Web Content Accessibility Guidelines).

1. Wstęp – Co nowego w Bootstrap 5.3?

Bootstrap 5.3 rozszerzył wsparcie dla trybu ciemnego i wprowadził nowy system kolorów oparty na CSS Variables (zmiennych). Dzięki temu możliwe jest łatwe przełączanie motywów bez konieczności przepisywania stylów.

2. Podstawowe założenia motywu

  • Tylko dwa tryby: light i dark
  • Bez automatycznego przełączania (np. przez media query prefers-color-scheme) – kontrola trybu odbywa się ręcznie (np. przyciskiem).
  • Zgodność z WCAG 2.1 AA – kontrasty tekstów i tła muszą spełniać minimalne wymagania:

    • Tekst normalny: kontrast min. 4.5:1
    • Tekst pogrubiony lub powiększony: 3:1

3. Struktura kolorów w Bootstrap 5.3

Bootstrap 5.3 pozwala na nadpisywanie kolorów poprzez zmienne CSS w dwóch kontekstach:

[data-bs-theme="light"] {
  --bs-body-bg: #ffffff;
  --bs-body-color: #212529;
  /* inne zmienne */
}

[data-bs-theme="dark"] {
  --bs-body-bg: #121212;
  --bs-body-color: #f8f9fa;
  /* inne zmienne */
}

Możesz nadać atrybut data-bs-theme na elemencie <html> lub <body> i dynamicznie przełączać motyw.

4. Dobór kolorów – praktyczne wskazówki

Jasny motyw (data-bs-theme="light")

Element Kolor Uwaga
Tło (--bs-body-bg) #ffffff Klasyczne białe tło
Tekst (--bs-body-color) #212529 Głęboka szarość dla czytelności
Linki (--bs-link-color) #0d6efd Bootstrapowy niebieski
Akcent (--bs-primary) np. #0d6efd Powinien mieć kontrast ≥ 4.5:1 względem --bs-body-bg

Ciemny motyw (data-bs-theme="dark")

Element Kolor Uwaga
Tło #121212 Bardzo ciemne tło (popularne w Material Design)
Tekst #f8f9fa Jasny tekst dla kontrastu (kontrast z tłem ~15:1)
Linki #66b2ff Delikatniejszy niebieski – wyraźny, ale nie razi
Akcent np. #0dcaf0 Jasny, żywy kolor – zwróć uwagę na kontrast z ciemnym tłem

Narzędzia do sprawdzania kontrastu

5. Przykładowy plik CSS motywu

/* Light Theme */
[data-bs-theme="light"] {
  --bs-body-bg: #ffffff;
  --bs-body-color: #212529;
  --bs-primary: #0d6efd;
  --bs-link-color: #0d6efd;
}

/* Dark Theme */
[data-bs-theme="dark"] {
  --bs-body-bg: #121212;
  --bs-body-color: #f8f9fa;
  --bs-primary: #0dcaf0;
  --bs-link-color: #66b2ff;
}

6. Przełącznik trybu (JavaScript)

<button id="theme-toggle">Zmień motyw</button>

<script>
  const toggleButton = document.getElementById('theme-toggle');
  toggleButton.addEventListener('click', () => {
    const html = document.documentElement;
    const current = html.getAttribute('data-bs-theme');
    html.setAttribute('data-bs-theme', current === 'light' ? 'dark' : 'light');
  });
</script>

7. Testowanie i dostępność

  • Testuj z czytnikami ekranu (NVDA, VoiceOver)
  • Sprawdzaj kontrasty każdego elementu interfejsu
  • Upewnij się, że kolory nie niosą samodzielnie informacji (np. nie polegaj wyłącznie na kolorze, by oznaczyć błąd)

8. Nowe motywy na mojej stronie

Przedstawiam dwa nowe motywy: golden oraz twilight obrazujące tzw. złotą i niebieską godzinę. Moja strona ma możliwość automatycznego przełączania między czterema motywami: light, golden, twilight oraz dark w zależności od pory dnia i nocy. Więcej informacji znajdziesz w tym artykule.

[data-bs-theme=golden] {
  color-scheme: light;
  --bs-dark: #4a2f1b;
  --bs-dark-rgb: 74, 47, 27;
  --bs-body-color: #4a2f1b;
  --bs-body-color-rgb: 74, 47, 27;
  --bs-body-bg: #fff3e0;
  --bs-body-bg-rgb: 255, 243, 224;
  --bs-emphasis-color: #3b220f;
  --bs-emphasis-color-rgb: 59, 34, 15;
  --bs-secondary-color: rgba(74, 47, 27, 0.75);
  --bs-secondary-color-rgb: 74, 47, 27;
  --bs-secondary-bg: #ffe0b2;
  --bs-secondary-bg-rgb: 255, 224, 178;
  --bs-tertiary-color: rgba(74, 47, 27, 0.5);
  --bs-tertiary-color-rgb: 74, 47, 27;
  --bs-tertiary-bg: #ffcc80;
  --bs-tertiary-bg-rgb: 255, 204, 128;
  --bs-warning-border-subtle: #e5ce8e;
  --bs-heading-color: inherit;  
  --bs-dark-text-emphasis: #4a2f1b;
  --bs-light-text-emphasis: #3b220f;
  --bs-dark-bg-subtle: #d7cfc5;
  --bs-secondary-border-subtle: #c8b8a8;  
  --bs-link-color: #0c68f0;
  --bs-link-color-rgb: 12, 104, 240;
  --bs-link-hover-color: #0a58ca;
  --bs-link-hover-color-rgb: 10, 88, 202;
  --bs-code-color: #bf360c;
  --bs-highlight-color: #4a2f1b;
  --bs-highlight-bg: #fff3e0;
  --bs-border-color: #d6bfa7;
  --bs-border-color-translucent: rgba(0, 0, 0, 0.15);
  --bs-form-valid-color: #8bc34a;
  --bs-form-valid-border-color: #8bc34a;
  --bs-form-invalid-color: #e64a19;
  --bs-form-invalid-border-color: #e64a19;
}

[data-bs-theme=twilight] {
  color-scheme: dark;
  --bs-light: #d0d9ff;
  --bs-light-rgb: 208, 217, 255;
  --bs-body-color: #d0d9ff;
  --bs-body-color-rgb: 208, 217, 255;
  --bs-body-bg: #0d1b2a;
  --bs-body-bg-rgb: 13, 27, 42;
  --bs-emphasis-color: #f0f4ff;
  --bs-emphasis-color-rgb: 240, 244, 255;
  --bs-secondary-color: rgba(208, 217, 255, 0.75);
  --bs-secondary-color-rgb: 208, 217, 255;
  --bs-secondary-bg: #1b263b;
  --bs-secondary-bg-rgb: 27, 38, 59;
  --bs-tertiary-color: rgba(208, 217, 255, 0.5);
  --bs-tertiary-color-rgb: 208, 217, 255;
  --bs-tertiary-bg: #2a3c5a;
  --bs-tertiary-bg-rgb: 42, 60, 90;
  --bs-primary-text-emphasis: #6ea8fe;
  --bs-secondary-text-emphasis: #a7acb1;
  --bs-success-text-emphasis: #75b798;
  --bs-info-text-emphasis: #6edff6;
  --bs-warning-text-emphasis: #f5e273;
  --bs-danger-text-emphasis: #ea868f;
  --bs-light-text-emphasis: #f8f9fa;
  --bs-dark-text-emphasis: #dee2e6;  
  --bs-primary-bg-subtle: #031633;
  --bs-secondary-bg-subtle: #161719;
  --bs-success-bg-subtle: #051b11;
  --bs-info-bg-subtle: #032830;
  --bs-warning-bg-subtle: #3a3602;
  --bs-danger-bg-subtle: #2c0b0e;
  --bs-light-bg-subtle: #343a40;
  --bs-dark-bg-subtle: #1a1d20;  
  --bs-primary-border-subtle: #084298;
  --bs-secondary-border-subtle: #41464b;
  --bs-success-border-subtle: #0f5132;
  --bs-info-border-subtle: #087990;
  --bs-warning-border-subtle: #997404;
  --bs-danger-border-subtle: #842029;
  --bs-light-border-subtle: #495057;
  --bs-dark-border-subtle: #343a40;  
  --bs-heading-color: inherit;
  --bs-link-color: #90caf9;
  --bs-link-hover-color: #bbdefb;
  --bs-link-color-rgb: 144, 202, 249;
  --bs-link-hover-color-rgb: 187, 222, 251;
  --bs-code-color: #82b1ff;
  --bs-highlight-color: #d0d9ff;
  --bs-highlight-bg: #283e57;
  --bs-border-color: #3a506b;
  --bs-border-color-translucent: rgba(255, 255, 255, 0.1);
  --bs-form-valid-color: #81c784;
  --bs-form-valid-border-color: #81c784;
  --bs-form-invalid-color: #ef5350;
  --bs-form-invalid-border-color: #ef5350;
}

9. Podsumowanie

Tworzenie własnego motywu CSS w Bootstrap 5.3 z obsługą tylko jasnego i ciemnego trybu to świetny sposób na kontrolowanie stylu aplikacji bez nadmiernej komplikacji. Kluczem do sukcesu jest:

  • spójny i dostępny dobór kolorów,
  • respektowanie zasad WCAG,
  • i użycie CSS Variables oraz data-bs-theme do płynnego przełączania stylów.

Dobrze zaprojektowany motyw nie tylko wygląda nowocześnie, ale też zwiększa użyteczność Twojej aplikacji dla wszystkich użytkowników.

29 maja 2025 14

Kategorie

programowanie

Dziękujemy!
()

Powiązane wpisy

Obraz ilustrujacy Automatyczny motyw Bootstrap 53 na bazie pory dnia
4 stycznia 2025 6 min 71

Automatyczny motyw Bootstrap 5.3 na bazie pory dnia

Czytaj więcej
Wizualizacja tematu Dlaczego warto zainwestowa w stron internetow na frameworku MVC
3 lutego 2025 2 min 22

Dlaczego warto zainwestować w stronę internetową na frameworku MVC?

Czytaj więcej
Obraz ilustrujacy Ukad Masonry w Bootstrap 53 z wykorzystaniem komponentw Card
17 lutego 2025 6 min 33

Układ Masonry w Bootstrap 5.3 z wykorzystaniem komponentów Card

Czytaj więcej
Wymiana doświadczeń

Masz podobne doświadczenia?

Chętnie poznam Twoją perspektywę i porozmawiam o tym temacie szerzej.

Napisz do mnie

Każda perspektywa może wnieść coś wartościowego do dyskusji.

Twoja prywatność i pliki cookies

  1. Ta strona internetowa wykorzystuje wyłącznie niezbędne pliki cookies, które są wymagane do jej prawidłowego działania – m.in. do poprawnego wyświetlania treści, zapamiętania podstawowych ustawień przeglądarki oraz zapewnienia stabilności serwisu.
  2. Nie stosuję plików cookies w celach marketingowych, reklamowych ani analitycznych.
  3. Strona ma charakter wyłącznie informacyjny i nie zawiera formularzy kontaktowych, rejestracyjnych ani zakupowych, przez które dane mogłyby być przesyłane na serwer.
  4. Nie zbieram danych osobowych podczas zwykłego korzystania z witryny.
  5. Serwis nie korzysta z certyfikatu SSL, jednak ze względu na informacyjny charakter strony nie jest wymagane przesyłanie poufnych danych. Zalecam jednak, aby nigdy nie wpisywać haseł ani danych osobowych na stronach bez szyfrowanego połączenia.
  6. Korzystając z tej strony, wyrażasz zgodę na używanie wyłącznie niezbędnych plików cookies.

Więcej informacji znajdziesz w mojej polityce prywatności.