Ucząc się zasad podstawowego CSS, uczy się pisać style modułowe, wielokrotnego użytku i opisowe, aby zapewnić łatwość konserwacji. Kiedy jednak programiści zajmują się aplikacjami w świecie rzeczywistym, często wydaje się niemożliwe dodawanie funkcji interfejsu użytkownika bez przedostawania się stylów do niezamierzonych obszarów. Problem ten często zamienia się w samospełniającą się pętlę; style teoretycznie ograniczone do jednego elementu lub klasy zaczynają pojawiać się tam, gdzie nie powinny. Zmusza to programistę do utworzenia jeszcze bardziej szczegółowych selektorów w celu zastąpienia stylów, które wyciekły, a które następnie przypadkowo zastępują style globalne i tak dalej. Jednym z teoretycznych rozwiązań tego problemu są sztywne konwencje nazw klas, takie jak BEM. Metodologia BEM (Block, Element, Modifier) ​​to systematyczny sposób nazewnictwa klas CSS w celu zapewnienia możliwości ponownego użycia i struktury plików CSS. Takie konwencje nazewnictwa mogą zmniejszyć obciążenie poznawcze poprzez wykorzystanie języka domeny do opisu elementów i ich stanu, a jeśli zostaną poprawnie zaimplementowane, mogą ułatwić utrzymanie stylów dla dużych aplikacji. Jednak w prawdziwym świecie nie zawsze tak to wygląda. Priorytety mogą się zmieniać, a wraz ze zmianami wdrażanie staje się niespójne. Małe zmiany w strukturze HTML mogą wymagać wielu zmian nazw klas CSS. W przypadku wysoce interaktywnych aplikacji front-end nazwy klas zgodne ze wzorcem BEM mogą stać się długie i nieporęczne (np. app-user-overview__status--is-authenticating), a niepełne przestrzeganie zasad nazewnictwa łamie strukturę systemu, negując w ten sposób jego zalety. Biorąc pod uwagę te wyzwania, nic dziwnego, że programiści zwrócili się ku frameworkom, a Tailwind jest najpopularniejszym frameworkiem CSS. Zamiast walczyć z czymś, co wydaje się niemożliwą do wygrania wojną specyficzności pomiędzy stylami, łatwiej jest zrezygnować z CSS Cascade i skorzystać z narzędzi gwarantujących całkowitą izolację. Deweloperzy bardziej skupiają się na narzędziach Skąd wiemy, że niektórzy programiści chętnie unikają stylów kaskadowych? To rozwój „nowoczesnych” narzędzi front-endowych – takich jak frameworki CSS-in-JS – zaprojektowanych specjalnie do tego celu. Praca z izolowanymi stylami, które są ściśle powiązane z konkretnymi komponentami, może wydawać się powiewem świeżego powietrza. Eliminuje potrzebę nazywania rzeczy – wciąż jedno z najbardziej znienawidzonych i czasochłonnych zadań front-endu – i pozwala programistom na produktywność bez pełnego zrozumienia lub wykorzystania zalet dziedziczenia CSS. Ale porzucenie CSS Cascade wiąże się z własnymi problemami. Na przykład komponowanie stylów w JavaScript wymaga skomplikowanych konfiguracji kompilacji i często prowadzi do niezręcznego mieszania się stylów ze znacznikami komponentów lub HTML. Zamiast dokładnie przemyślanych konwencji nazewnictwa, umożliwiamy budowanie narzędzi do automatycznego generowania dla nas selektorów i identyfikatorów (np. .jsx-3130221066), co wymaga od programistów nadążania za kolejnym pseudojęzykiem samym w sobie. (Jakby obciążenie poznawcze związane ze zrozumieniem, co robią wszystkie efekty useEffects twojego komponentu, nie było już wystarczające!) Dalsze abstrahowanie zadania nazewnictwa klas do narzędzi oznacza, że podstawowe debugowanie jest często ograniczone do określonych wersji aplikacji skompilowanych na potrzeby programowania, zamiast wykorzystywać natywne funkcje przeglądarki, które obsługują debugowanie na żywo, takie jak narzędzia programistyczne. To prawie tak, jakbyśmy musieli opracować narzędzia do debugowania narzędzi, których używamy do abstrakcji tego, co już oferuje sieć — a wszystko po to, aby uciec od „bólu” pisania standardowego CSS. Na szczęście nowoczesne funkcje CSS nie tylko czynią pisanie standardowego CSS bardziej elastycznym, ale także dają programistom takim jak my znacznie więcej możliwości zarządzania kaskadą i sprawiania, by działała ona dla nas. Warstwy kaskadowe CSS są doskonałym przykładem, ale jest jeszcze jedna funkcja, na którą zaskakująco brakuje uwagi — choć teraz się to zmienia, ponieważ niedawno stała się kompatybilna z wersją Baseline. Reguła CSS @scope At Uważam, że reguła CSS @scope at jest potencjalnym lekarstwem na omawiany przez nas rodzaj niepokoju wywołanego wyciekiem stylu, który nie zmusza nas do rezygnowania z zalet natywnej sieci na rzecz abstrakcji i dodatkowych narzędzi do kompilacji. „Reguła @scope CSS at umożliwia wybieranie elementów w określonych poddrzewach DOM, precyzyjne kierowanie na elementy bez pisania zbyt szczegółowych selektorów, które trudno zastąpić, i bez zbyt ścisłego łączenia selektorów ze strukturą DOM.” — MDN

Innymi słowy, w określonych przypadkach możemy pracować z izolowanymi stylami, nie rezygnując z dziedziczenia, kaskadowania czy nawet podstawowego rozdzielania zagadnień.to była od dawna naczelna zasada rozwoju front-endu. Ponadto ma doskonały zasięg przeglądarki. W rzeczywistości Firefox 146 dodał obsługę @scope w grudniu, dzięki czemu po raz pierwszy jest kompatybilny z wersją Baseline. Oto proste porównanie przycisku korzystającego ze wzorca BEM z regułą @scope:

You May Also Like

Enjoyed This Article?

Get weekly tips on growing your audience and monetizing your content — straight to your inbox.

No spam. Join 138,000+ creators. Unsubscribe anytime.

Create Your Free Bio Page

Join 138,000+ creators on Seemless.

Get Started Free