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

Jak opracować nowy motyw CSS do Bootstrap 5.3 z obsługą trybów 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


Informacja o cookies

Moja strona internetowa wykorzystuje wyłącznie niezbędne pliki cookies, które są wymagane do jej prawidłowego działania. Nie używam ciasteczek w celach marketingowych ani analitycznych. Korzystając z mojej strony, wyrażasz zgodę na stosowanie tych plików. Możesz dowiedzieć się więcej w mojej polityce prywatności.