@scope dla stylów o ograniczonym zakresie
Ograniczaj zasięg reguł CSS do określonych poddrzew za pomocą reguły at @scope.
@scope dla stylów o ograniczonym zakresie to bezpłatna lekcja CSS Academy na CoddyKit. To lekcja 3 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 CSS Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs CSS Academy zawiera 4 lekcji w sumie.
Czym jest @scope?
Reguła at @scope (Chrome 118+, Safari 17.4+) ogranicza działanie reguł CSS do określonego poddrzewa DOM. Reguły wewnątrz @scope dotyczą wyłącznie elementów znajdujących się w zadeklarowanym zakresie, zapobiegając wyciekaniu stylów między komponentami.
Podstawowa składnia
Zakres należy zadeklarować za pomocą selektora elementu głównego zakresu. Wszystkie reguły wewnątrz dotyczą wyłącznie elementów potomnych pasujących do elementu głównego zakresu, a nie całego dokumentu.
<div class="card">
<div class="title">Scoped Title</div>
<div class="body">Scoped body text — styles only apply inside .card.</div>
</div>
Element główny zakresu
Element główny zakresu (@scope (.card)) określa punkt wejścia. Elementy znajdujące się w zakresie, które pasują do .title, są stylowane. Elementy znajdujące się poza .card, ale mające klasę .title, pozostają bez zmian — jest to prawdziwa enkapsulacja stylów bez użycia Shadow DOM.
Granica zakresu
Opcjonalnie można zdefiniować granicę zakresu za pomocą to: @scope (.card) to (.nested-card). Reguły obowiązują wewnątrz .card, ale zatrzymują się na elementach potomnych .nested-card — ograniczając style do jednego poziomu zagnieżdżenia komponentu i wykluczając głębiej zagnieżdżone wystąpienia.
Pseudoklasa :scope wewnątrz @scope
Wewnątrz bloku @scope :scope odnosi się do samego elementu głównego zakresu. @scope (.card) { :scope { border-radius: 8px; } } styluje bezpośrednio element .card, a nie jego elementy potomne.
Specyficzność zależna od bliskości
@scope wprowadza specyficzność zależną od bliskości: gdy do elementu pasuje wiele zakresów, wygrywa najbliższy element główny zakresu — niezależnie od specyficzności selektora. Zapobiega to nadpisywaniu głęboko zagnieżdżonych stylów komponentu przez style z odległych zakresów nadrzędnych.
@scope a CSS Modules
Moduły CSS generują unikatowe, haszowane nazwy klas, aby zapewnić zakresowanie podczas budowania — jest to kwestia bundlera JavaScript. @scope zapewnia zakresowanie natywnie w przeglądarce, bez narzędzi do budowania, haszowanych nazw ani składni specyficznej dla frameworka — to czysty CSS.
@scope a Shadow DOM
Shadow DOM tworzy pełną izolację stylów — zewnętrzne style nie mogą przeniknąć do środka. @scope tworzy częściową izolację — style z zewnątrz nadal mogą dotrzeć do elementów objętych zakresem, jeśli ich specyficzność jest wystarczająco duża. @scope to lżejsza alternatywa dla zakresowania komponentów, niewymagająca pełnej izolacji.
Warstwowanie z użyciem @scope
Połączenie @scope z @layer umożliwia precyzyjną kontrolę nad kaskadą: style ograniczone do komponentu można definiować w warstwie komponentu. W ten sposób można kompozycyjnie zarządzać zarówno kolejnością kaskady (za pomocą warstw), jak i zakresem stylów (za pomocą @scope), bez żonglowania nazwami klas.
Praktyczne przypadki użycia
Komponenty systemu projektowego: ogranicz wszystkie style przycisków do @scope (.button-group), aby style wewnętrznych przycisków nigdy nie wydostały się poza ten zakres. Izolowanie widżetu: ogranicz style widżetu zewnętrznego dostawcy do jego kontenera, zapobiegając konfliktom z globalnymi stylami strony.
Obsługa przeglądarek i mechanizm awaryjny
@scope jest obsługiwane w Chrome 118+, Safari 17.4+ i Firefox 128+. W przeglądarkach, które go nie obsługują, style wewnątrz @scope są ignorowane — kaskada przechodzi do globalnych stylów. Używaj @scope jako progresywnego ulepszenia, gdy zakresowanie komponentów jest korzystne, ale nie krytyczne.
Sprawdzenie wiedzy
Jaki problem rozwiązuje @scope, który trudno rozwiązać za pomocą samych tradycyjnych selektorów CSS?
Podsumowanie
@scope ogranicza stosowanie reguł CSS do zadeklarowanego poddrzewa DOM, umożliwiając natywne hermetyzowanie stylów bez Shadow DOM ani haszowania nazw klas przez narzędzia do budowania. Ograniczenia zakresu, specyficzność wynikająca z bliskości oraz integracja z @layer sprawiają, że jest to potężny fundament systemów projektowych z komponentami ograniczonymi do zakresu, tworzonych w czystym CSS.
Często zadawane pytania
Czy lekcja „@scope dla stylów o ograniczonym zakresie” jest bezpłatna?
Tak — pełny tekst „@scope dla stylów o ograniczonym zakresie” 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 CSS Academy, przejdź na CoddyKit PRO. Kurs CSS Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „@scope dla stylów o ograniczonym zakresie”?
Ograniczaj zasięg reguł CSS do określonych poddrzew za pomocą reguły at @scope. Ćwiczysz CSS 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ąć CSS Academy?
Nie wymagamy żadnego doświadczenia. CSS 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 3 z 4.
Ile czasu zajmuje lekcja „@scope dla stylów o ograniczonym zakresie”?
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 CSS Academy?
Tak. Każda lekcja CSS 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
- Natywne zagnieżdżanie CSS
- Pseudoklasa relacyjna :has()
- @scope dla stylów o ograniczonym zakresie
- View Transitions API