Bij het leren van de principes van basis-CSS wordt geleerd modulaire, herbruikbare en beschrijvende stijlen te schrijven om onderhoudbaarheid te garanderen. Maar wanneer ontwikkelaars betrokken raken bij toepassingen in de echte wereld, voelt het vaak onmogelijk om UI-functies toe te voegen zonder dat stijlen naar onbedoelde gebieden lekken. Deze kwestie zorgt vaak voor een zichzelf vervullende lus; stijlen die theoretisch beperkt zijn tot één element of klasse, verschijnen waar ze niet thuishoren. Dit dwingt de ontwikkelaar om nog specifiekere selectors te maken om de gelekte stijlen te overschrijven, die vervolgens per ongeluk de globale stijlen overschrijven, enzovoort. Stijve conventies voor klassennamen, zoals BEM, zijn een theoretische oplossing voor dit probleem. De BEM-methodologie (Block, Element, Modifier) ​​is een systematische manier om CSS-klassen een naam te geven om herbruikbaarheid en structuur binnen CSS-bestanden te garanderen. Dit soort naamgevingsconventies kunnen de cognitieve belasting verminderen door gebruik te maken van domeintaal om elementen en hun status te beschrijven, en kunnen, indien correct geïmplementeerd, stijlen voor grote applicaties gemakkelijker te onderhouden maken. In de echte wereld werkt het echter niet altijd zo. Prioriteiten kunnen veranderen, en met verandering wordt de implementatie inconsistent. Kleine wijzigingen in de HTML-structuur kunnen veel herzieningen van de CSS-klassenaam vereisen. Met zeer interactieve front-end-applicaties kunnen klassenamen die het BEM-patroon volgen lang en log worden (bijvoorbeeld app-gebruikersoverzicht__status--is-authenticeren), en het niet volledig naleven van de naamgevingsregels verbreekt de structuur van het systeem, waardoor de voordelen ervan teniet worden gedaan. Gezien deze uitdagingen is het geen wonder dat ontwikkelaars zich tot frameworks hebben gewend, waarbij Tailwind het populairste CSS-framework is. In plaats van te proberen een schijnbaar onwinbare specificiteitsoorlog tussen stijlen te voeren, is het gemakkelijker om de CSS Cascade op te geven en tools te gebruiken die volledige isolatie garanderen. Ontwikkelaars leunen meer op hulpprogramma's Hoe weten we dat sommige ontwikkelaars trapsgewijze stijlen graag willen vermijden? Het is de opkomst van ‘moderne’ front-end-tooling – zoals CSS-in-JS-frameworks – die speciaal voor dat doel zijn ontworpen. Het werken met geïsoleerde stijlen die strak zijn afgestemd op specifieke componenten kan een verademing lijken. Het elimineert de noodzaak om dingen een naam te geven (nog steeds een van de meest gehate en tijdrovende front-end-taken) en stelt ontwikkelaars in staat productief te zijn zonder de voordelen van CSS-overerving volledig te begrijpen of te benutten. Maar het dumpen van de CSS Cascade brengt zijn eigen problemen met zich mee. Het samenstellen van stijlen in JavaScript vereist bijvoorbeeld zware bouwconfiguraties en leidt er vaak toe dat stijlen onhandig vermengen met componentmarkeringen of HTML. In plaats van zorgvuldig overwogen naamgevingsconventies staan ​​we bouwtools toe om automatisch selectors en identifiers voor ons te genereren (bijvoorbeeld .jsx-3130221066), waardoor ontwikkelaars op de hoogte moeten blijven van nog een andere pseudo-taal op zichzelf. (Alsof de cognitieve belasting van het begrijpen van wat alle gebruikseffecten van uw component doen, nog niet genoeg was!) Het verder abstraheren van de taak van het benoemen van klassen naar tooling betekent dat basisfoutopsporing vaak beperkt is tot specifieke applicatieversies die zijn gecompileerd voor ontwikkeling, in plaats van gebruik te maken van native browserfuncties die live foutopsporing ondersteunen, zoals Developer Tools. Het is bijna alsof we tools moeten ontwikkelen om de tools die we gebruiken te debuggen om te abstraheren wat het web al biedt – allemaal om te ontsnappen aan de ‘pijn’ van het schrijven van standaard CSS. Gelukkig maken moderne CSS-functies het schrijven van standaard CSS niet alleen flexibeler, maar geven ontwikkelaars zoals wij ook veel meer macht om de cascade te beheren en voor ons te laten werken. CSS-cascadelagen zijn een goed voorbeeld, maar er is nog een functie die verrassend weinig aandacht krijgt, hoewel dat aan het veranderen is nu het onlangs Baseline-compatibel is geworden. De CSS @scope At-regel Ik beschouw de CSS @scope-at-rule als een potentiële remedie voor het soort door stijllekken veroorzaakte angst dat we hebben besproken, een die ons niet dwingt om native webvoordelen in te leveren voor abstracties en extra build-tools. “Met de @scope CSS at-rule kun je elementen in specifieke DOM-substructuren selecteren, waarbij je elementen nauwkeurig kunt targeten zonder al te specifieke selectors te schrijven die moeilijk te overschrijven zijn, en zonder je selectors te strak aan de DOM-structuur te koppelen.”– MDN

Met andere woorden: we kunnen in specifieke gevallen met geïsoleerde stijlen werken zonder dat dit ten koste gaat van overerving, cascadering of zelfs de fundamentele scheiding van belangen.dat is al lang een leidend principe van front-end-ontwikkeling. Bovendien heeft het een uitstekende browserdekking. Firefox 146 heeft in december zelfs ondersteuning voor @scope toegevoegd, waardoor het voor het eerst Baseline-compatibel werd. Hier is een eenvoudige vergelijking tussen een knop die het BEM-patroon gebruikt en de @scope-regel:

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