Kiedy warto używać zmiennych CSS zamiast preprocesorów

Kiedy warto używać zmiennych CSS zamiast preprocesorów

W nowoczesnym front-endzie nie chodzi o to, by wybrać „CSS variables zamiast SCSS”, ale o to, by umieć rozpoznać właściwe zastosowanie dla każdego narzędzia. W tej lekcji skupimy się na sytuacjach, w których custom properties wygrywają – i tam, gdzie naprawdę warto ich używać zamiast zmiennych preprocesora.

1. Motywy (np. tryb ciemny / jasny)

To klasyczny przypadek użycia zmiennych CSS – możemy zdefiniować zestaw kolorów w :root i nadpisywać je klasą .dark, bez potrzeby pisania dodatkowych stylów.

:root {
  --color-bg: #ffffff;
}

body.dark {
  --color-bg: #121212;
}

Komponenty po prostu używają var(--color-bg), niezależnie od trybu – nie musisz ich modyfikować.

2. Komponenty zależne od kontekstu

Zmienne CSS działają na zasadzie dziedziczenia – komponent może dostosowywać się do otoczenia bez zmiany klas lub struktury HTML.

.section-accent {
  --button-bg: #ffcc00;
}

.button {
  background-color: var(--button-bg);
}

Ten sam komponent .button wygląda inaczej w zależności od kontekstu nadrzędnego.

3. Dynamiczne style modyfikowane JavaScriptem

Zmienne CSS można zmieniać z poziomu JavaScriptu bez rekompilacji – co nie jest możliwe w przypadku SCSS.

document.documentElement.style.setProperty('--color-primary', '#e6007e');

To pozwala na dynamiczne motywy, personalizację wyglądu przez użytkownika itp.

4. Przełączanie tematów w locie (bez przeładowania strony)

Nie musisz ładować osobnych plików CSS – wystarczy zmiana klasy w <body> lub modyfikacja zmiennych przez JavaScript.

5. Praca z komponentami webowymi / frameworkami

Gdy tworzysz komponenty np. w Web Components, React, Vue – zmienne CSS są „przenikalne” między warstwami i pozwalają łatwo konfigurować styl bez ingerencji w kod.

<my-card style="--card-bg: #fffbe6;"></my-card>

Niezależnie od technologii – komponent może działać z zewnętrznymi zmiennymi, co ułatwia jego ponowne wykorzystanie.

Kiedy NIE warto polegać wyłącznie na zmiennych CSS?

Są sytuacje, w których zmienne preprocesora (SCSS) są lepsze:

  • gdy potrzebujesz złożonych operacji matematycznych (np. kolor = ciemniejszy o 20%)
  • gdy chcesz wygenerować setki klas (np. skala odstępów: .m-1, .m-2)
  • gdy stylujesz strukturę szablonu raz – statycznie i nie zamierzasz jej modyfikować w runtime
Dobre praktyki
  • Używaj custom properties tam, gdzie użytkownik lub środowisko może wpływać na wygląd
  • Stosuj zmienne globalne w :root, a komponentowe – lokalnie
  • Unikaj mieszania zmiennych CSS i SCSS w tym samym pliku – oddziel je warstwowo
Wniosek

Custom properties nie zastępują preprocesorów – ale są niezastąpione w kontekście komponentów, motywów i dynamicznego UI. Jeśli coś może zmieniać się w czasie rzeczywistym – lepiej użyć zmiennych CSS. Jeśli coś nigdy się nie zmieni – SCSS będzie prostszy i szybszy.