0Pricing
Frontend Academy · Lekcja

Zmienne CSS na potrzeby motywów

Proszę deklarować właściwości niestandardowe za pomocą --, używać var(), nadpisywać je w zagnieżdżonych zakresach oraz wdrożyć przełącznik jasnego i ciemnego motywu.

Zmienne CSS na potrzeby motywów to bezpłatna lekcja Frontend Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Frontend Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Frontend Academy zawiera 4 lekcji w sumie.

Czym są niestandardowe właściwości CSS?

Niestandardowe właściwości CSS (zmienne CSS) przechowują wartości, których można ponownie używać w całym arkuszu stylów. Definiuje się je za pomocą --name: value, a odwołuje do nich za pomocą var(--name). W przeciwieństwie do zmiennych preprocesora (Sass) są dynamiczne — można je aktualizować za pomocą JavaScriptu.

Definiowanie niestandardowych właściwości

Zdefiniuj właściwości na :root, aby były dostępne globalnie. Możesz również zdefiniować je na dowolnym elemencie, ograniczając ich zakres do poddrzewa tego elementu.

:root {
  --color-primary: #3182ce;
  --color-bg: #f7fafc;
  --color-text: #1a202c;
  --spacing-md: 16px;
  --border-radius: 8px;
  --font-sans: 'Inter', system-ui, sans-serif;
}

Używanie niestandardowych właściwości

Odwołuj się do zmiennej za pomocą var(--name). Dodaj wartość zastępczą jako drugi argument: var(--color-primary, #3182ce). Wartość zastępcza zostanie użyta, jeśli zmienna nie jest zdefiniowana.

.card {
  background: var(--color-bg);
  color: var(--color-text);
  padding: var(--spacing-md);
  border-radius: var(--border-radius);
}

.btn {
  background: var(--color-primary, blue); /* fallback */
}

Kaskada: zmienne o ograniczonym zakresie

Niestandardowe właściwości podlegają kaskadowaniu i dziedziczeniu. Jeśli przedefiniujesz zmienną na elemencie potomnym, zastąpi ona wartość elementu nadrzędnego dla tego elementu i wszystkich jego elementów potomnych.

:root { --accent: blue; }

.card { color: var(--accent); } /* blue */

.special-section {
  --accent: green; /* override for this subtree */
}
.special-section .card { color: var(--accent); } /* green */

Tryb ciemny za pomocą zmiennych CSS

Najczystszy wzorzec trybu ciemnego polega na zdefiniowaniu jasnej i ciemnej palety kolorów jako zmiennych CSS. Przełączaj klasę albo użyj zapytania media prefers-color-scheme, aby zmieniać paletę. Nie ma potrzeby nadpisywania poszczególnych właściwości kolorów.

:root {
  --bg: #ffffff;
  --text: #1a202c;
  --card-bg: #f7fafc;
}

[data-theme='dark'], @media (prefers-color-scheme: dark) {
  :root {
    --bg: #1a202c;
    --text: #f7fafc;
    --card-bg: #2d3748;
  }
}

body { background: var(--bg); color: var(--text); }

Przełączanie trybu ciemnego za pomocą JavaScriptu

Dodaj przycisk przełącznika, który zmienia atrybut data albo klasę na elemencie głównym. Zmienne CSS zajmą się resztą — jedna linia JavaScriptu, bez nadpisywania poszczególnych stylów.

const btn = document.querySelector('#theme-toggle');
btn.addEventListener('click', () => {
  const current = document.documentElement.getAttribute('data-theme');
  document.documentElement.setAttribute(
    'data-theme',
    current === 'dark' ? 'light' : 'dark'
  );
});

Aktualizowanie zmiennych za pomocą JavaScriptu

element.style.setProperty('--name', value) aktualizuje niestandardową właściwość w stylu inline. Usunięcie jej za pomocą removeProperty przywraca wartość wynikającą z kaskady. Umożliwia to tworzenie dynamicznych motywów i animowanych wartości.

// Dynamically set a CSS variable from JS:
document.documentElement.style.setProperty('--primary-hue', '220');

// Based on input:
const hue = document.querySelector('#hue-slider');
hue.addEventListener('input', () => {
  document.documentElement.style.setProperty('--primary-hue', hue.value);
});

Tokeny projektowe jako zmienne CSS

Zdefiniuj wszystkie decyzje projektowe — paletę kolorów, skalę odstępów i skalę typografii — jako zmienne CSS. Dzięki temu powstaje jedno źródło prawdy, z którego korzystają komponenty. Zmiana tokenu jest natychmiast propagowana wszędzie.

:root {
  /* Colour scale */
  --blue-50: #ebf8ff;
  --blue-100: #bee3f8;
  --blue-500: #3182ce;
  --blue-900: #1a365d;

  /* Spacing scale */
  --space-1: 4px;
  --space-2: 8px;
  --space-4: 16px;
  --space-8: 32px;
}

Używanie zmiennych w calc()

Zmienne CSS działają wewnątrz calc(), umożliwiając wykonywanie responsywnych obliczeń na podstawie wartości tokenów.

:root { --header-height: 64px; }

.content {
  /* Leave room for fixed header */
  padding-top: calc(var(--header-height) + 24px);
  min-height: calc(100vh - var(--header-height));
}

Obsługa przeglądarek

Niestandardowe właściwości CSS są obsługiwane we wszystkich nowoczesnych przeglądarkach (w głównych przeglądarkach od 2016 roku). W przypadku tej funkcji nie trzeba używać preprocesora. W bardzo starych przeglądarkach należy zapewnić rozwiązanie awaryjne: podać wartość statyczną przed var().

.btn {
  background: blue;                    /* IE fallback */
  background: var(--color-primary);    /* modern browsers */
}

Niestandardowe właściwości CSS a zmienne Sass

Zmienne Sass są kompilowane do wartości statycznych. Niestandardowe właściwości CSS istnieją w czasie działania, są dynamiczne, można je zmieniać za pomocą JavaScriptu i podlegają kaskadowaniu w DOM. Zmiennych CSS należy używać do obsługi motywów, a zmiennych Sass — jako stałych ustalanych podczas budowania.

Szybkie sprawdzenie

Jak odczytać i zaktualizować niestandardową właściwość CSS z poziomu JavaScriptu?

Podsumowanie: niestandardowe właściwości CSS

Deklaruj je za pomocą -- na :root, aby objąć zakresem globalnym. Używaj ich za pomocą var(). Zmienne o ograniczonym zakresie są kaskadowane do elementów potomnych. Tryb ciemny: przedefiniuj tokeny kolorów w zapytaniu media lub za pomocą atrybutu danych. Aktualizuj je z poziomu JavaScriptu za pomocą style.setProperty(). Tokeny projektowe jako zmienne = jedno źródło prawdy.

Często zadawane pytania

Czy lekcja „Zmienne CSS na potrzeby motywów” jest bezpłatna?

Tak — pełny tekst „Zmienne CSS na potrzeby motywów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Frontend Academy, przejdź na CoddyKit PRO. Kurs Frontend Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Zmienne CSS na potrzeby motywów”?

Proszę deklarować właściwości niestandardowe za pomocą --, używać var(), nadpisywać je w zagnieżdżonych zakresach oraz wdrożyć przełącznik jasnego i ciemnego motywu. Ćwiczysz Frontend Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Frontend Academy?

Nie wymagamy żadnego doświadczenia. Frontend Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Zmienne CSS na potrzeby motywów”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Frontend Academy?

Tak. Każda lekcja Frontend Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Flexbox — dogłębne omówienie: wyrównywanie, zawijanie i kolejność
  2. CSS Grid: template-areas, auto-fit, minmax
  3. Łączenie Flexbox i Grid
  4. Zmienne CSS na potrzeby motywów
← Powrót do Frontend Academy