Stylizowanie lokalne i unikanie konfliktów – @scope
Stylizowanie lokalne i unikanie konfliktów – @scope
@scope to nowa, eksperymentalna funkcja w CSS, która pozwala ograniczyć działanie reguł tylko do konkretnego fragmentu dokumentu HTML. Dzięki niej możesz stylować komponenty lokalnie – tak jak w Shadow DOM lub bibliotekach komponentowych – ale używając czystego CSS, bez frameworków.
To przełom, jeśli chodzi o izolację stylów. Styl napisany dla jednego komponentu nie wpływa na inne części strony, nawet jeśli mają te same selektory (np. h2, button, itd.).
1. Jak działa @scope?
Reguła @scope definiuje zakres, w którym styl ma obowiązywać. Zakres ten określasz przez tzw. „root selector” (element, od którego zaczynamy) i opcjonalnie – „scoped” (czyli właściwy kontekst wewnętrzny).
@scope (.component) {
h2 {
font-size: 2rem;
color: #0d6efd;
}
button {
padding: 1rem 2rem;
border-radius: 8px;
}
}
W tym przypadku style obowiązują tylko wewnątrz elementu z klasą .component. Jeśli gdziekolwiek indziej wystąpi h2 lub button – nie będą objęte tymi regułami.
2. Przykład HTML + scoped CSS
<section class="component"> <h2>Tytuł lokalny</h2> <button>Kliknij mnie</button> </section> <h2>Tytuł globalny</h2>
Efekt: pierwszy h2 i button są stylowane lokalnie, drugi h2 nie jest objęty @scope.
3. Zakres z root i scoped
@scope (.section) to (.section .content) {
p {
line-height: 1.6;
}
}
Ten zapis mówi: „styluj tylko <p> wewnątrz .content, która jest wewnątrz .section”.
4. Zalety @scope
- Styl lokalny – selektory typu
h1,pnie „przypadkowo” stylują całą stronę - Brak potrzeby dodawania skomplikowanych nazw klas (np. BEM)
- Lepsza modularność i odporność na konflikty stylów
- Gotowość do współpracy z komponentowymi bibliotekami i Web Components
5. Wsparcie przeglądarek
Na moment tworzenia kursu (2025), @scope działa w najnowszych wersjach przeglądarek Chromium (np. Chrome 121+) i Firefoksie, ale jeszcze nie jest obsługiwany przez Safari. Dlatego warto traktować go jako narzędzie do nowych projektów lub tam, gdzie masz kontrolę nad środowiskiem (np. dashboard, SPA, aplikacje webowe).
Dobre praktyki
- Używaj
@scopedo stylowania komponentów – np. kart, modali, sekcji ofert - Nie nadużywaj globalnych klas – tam gdzie można, zamknij wszystko w
@scope - Łącz
@scopez@layer– to duet przyszłości
Ćwiczenie
Stwórz komponent .testimonial, który zawiera nagłówek i paragraf:
- Styluj je lokalnie za pomocą
@scope - Zadbaj, aby styl nie wpłynął na inne
h2ipna stronie - Dodaj kolor nagłówka i większe odstępy między akapitami
Wniosek
@scope to przyszłość CSS – pozwala na lokalne, kontrolowane stylowanie komponentów. Dzięki niemu możesz pisać prostszy kod, bez obawy o globalne kolizje. To sposób na to, by CSS wreszcie był naprawdę „modularny” – tak jak JavaScript czy HTML Web Components.
