Dynamiczne zmienne i override’y lokalne
Dynamiczne zmienne i override’y lokalne
Zmiennych CSS można używać nie tylko globalnie (np. w :root), ale również lokalnie – w obrębie dowolnego selektora. To daje ogromną elastyczność: możemy dostosować wygląd komponentów w zależności od ich otoczenia, bez pisania nowych klas ani nadpisywania stylów.
Zmienne lokalne – jak działają?
Zmienna zadeklarowana w :root działa wszędzie – dopóki nie zostanie nadpisana lokalnie, np. w konkretnym komponencie lub elemencie nadrzędnym.
:root {
--color-primary: #0057ff;
}
.card {
background-color: var(--color-primary); /* #0057ff */
}
.section-accent {
--color-primary: #ff5500; /* nadpisanie lokalne */
}
Wewnątrz `.section-accent`, komponent `.card` pobierze nową wartość `–color-primary`. Poza tą sekcją – nadal używana będzie wartość globalna.
Praktyczny przykład
<section class="section-accent">
<div class="card">
<h2>Wyróżniona karta</h2>
</div>
</section>
<div class="card">
<h2>Zwykła karta</h2>
</div>
:root {
--color-card-bg: #ffffff;
}
.section-accent {
--color-card-bg: #ffeecc;
}
.card {
background-color: var(--color-card-bg);
padding: 1rem;
border-radius: 8px;
}
Efekt? Karta wewnątrz `.section-accent` będzie miała inny kolor tła – bez zmieniania jej stylów ani dodawania dodatkowych klas.
Override zmiennej „w locie”
Zmienną CSS można nadpisać również inline – np. za pomocą JavaScriptu:
<div class="card" style="--color-card-bg: #ffdddd;"> Karta z dynamicznym tłem </div>
To przydatne np. przy generowaniu interfejsów na podstawie danych z API.
Zagnieżdżanie komponentów z lokalnymi zmiennymi
Dzięki dziedziczeniu zmiennych, komponent może automatycznie dopasować się do kontekstu nadrzędnego – bez potrzeby pisania wielu klas. Przykład:
.card__title {
color: var(--card-title-color, #333);
}
Tu użyto wartości domyślnej: jeśli `–card-title-color` nie istnieje, zostanie użyty kolor `#333`.
Dobre praktyki
- Stosuj zmienne lokalne tam, gdzie komponent ma działać w różnych kontekstach
- Nie nadpisuj zmiennych wewnątrz komponentu – zostaw to nadrzędnym warstwom (np. sekcjom)
- Używaj wartości domyślnych w
var()– np.var(--button-bg, #444) - Unikaj pisania dodatkowych klas, jeśli wystarczy zmienna lokalna
Ćwiczenie
Stwórz komponent .alert zawierający tło i kolor tekstu zależny od zmiennych:
- globalnie tło to np.
--alert-bg: #f8f8f8 - w klasie
.section-warningnadpisz zmienną--alert-bgna#fff3cd - dodaj też zmienną
--alert-colordla tekstu
Następnie umieść jeden komponent .alert wewnątrz sekcji z nadpisaniem i jeden poza nią – zobacz efekt.
Wniosek
Zmienne CSS to nie tylko „zamienniki kolorów” – to fundament dynamicznych i kontekstowych interfejsów. Dzięki lokalnym override’om możesz tworzyć komponenty, które dostosowują się do otoczenia – bez duplikacji klas, bez JavaScriptu, bez komplikacji. To esencja nowoczesnego CSS.
