Quan s'aprèn els principis de CSS bàsic, s'ensenya a escriure estils modulars, reutilitzables i descriptius per garantir el manteniment. Però quan els desenvolupadors s'impliquen amb aplicacions del món real, sovint se sent impossible afegir funcions d'interfície d'usuari sense que els estils es filtrin a àrees no desitjades. Aquest problema sovint es transforma en un bucle autocomplert; els estils que teòricament tenen l'abast d'un element o classe comencen a aparèixer on no pertanyen. Això obliga el desenvolupador a crear selectors encara més específics per anul·lar els estils filtrats, que després anul·len accidentalment els estils globals, etc. Les convencions de noms de classe rígides, com ara BEM, són una solució teòrica a aquest problema. La metodologia BEM (Block, Element, Modifier) ​​és una forma sistemàtica d'anomenar classes CSS per garantir la reutilització i l'estructura dels fitxers CSS. Convencions de denominació com aquesta poden reduir la càrrega cognitiva aprofitant el llenguatge del domini per descriure els elements i el seu estat, i si s'implementa correctament, pot facilitar el manteniment dels estils per a aplicacions grans. Al món real, però, no sempre funciona així. Les prioritats poden canviar, i amb el canvi, la implementació es torna inconsistent. Els petits canvis a l'estructura HTML poden requerir moltes revisions de noms de classe CSS. Amb les aplicacions frontals altament interactives, els noms de classe que segueixen el patró BEM poden arribar a ser llargs i difícils de manejar (p. ex., app-user-overview__status--is-authenticating), i no complir completament les regles de nomenclatura trenca l'estructura del sistema i neguen els seus beneficis. Tenint en compte aquests reptes, no és d'estranyar que els desenvolupadors hagin recorregut als frameworks, sent Tailwind el marc CSS més popular. En lloc d'intentar lluitar contra el que sembla una guerra d'especificitat invencible entre estils, és més fàcil renunciar a la cascada CSS i utilitzar eines que garanteixen un aïllament complet. Els desenvolupadors es basen més en les utilitats Com sabem que alguns desenvolupadors volen evitar els estils en cascada? És l'auge de les eines frontals "modernes", com els marcs CSS-in-JS, dissenyades específicament per a aquest propòsit. Treballar amb estils aïllats que estan estretament adaptats a components específics pot semblar una alenada d'aire fresc. Elimina la necessitat de posar nom a les coses, encara una de les tasques frontals més odiades i que consumeixen més temps, i permet als desenvolupadors ser productius sense entendre ni aprofitar completament els avantatges de l'herència CSS. Però abandonar la cascada CSS comporta els seus propis problemes. Per exemple, compondre estils en JavaScript requereix configuracions de construcció pesades i sovint condueix a estils que s'entremesclen de manera incòmode amb el marcatge de components o HTML. En lloc de considerar acuradament les convencions de nomenclatura, permetem que les eines de creació ens generin automàticament selectors i identificadors (p. ex., .jsx-3130221066), que requereixen que els desenvolupadors es mantinguin al dia amb un altre pseudollenguatge en si mateix. (Com si la càrrega cognitiva d'entendre què fan tots els efectes d'ús del vostre component ja no fos suficient!) L'abstracció addicional del treball d'anomenar classes a eines significa que la depuració bàsica sovint es limita a versions d'aplicacions específiques compilades per al desenvolupament, en lloc d'aprofitar les funcions natives del navegador que admeten la depuració en directe, com ara les eines per a desenvolupadors. És gairebé com si haguéssim de desenvolupar eines per depurar les eines que estem utilitzant per abstraure el que ja ofereix la web, tot per fugir del "dolor" d'escriure CSS estàndard. Afortunadament, les funcions CSS modernes no només fan que l'escriptura de CSS estàndard sigui més flexible, sinó que també donen als desenvolupadors com nosaltres molta més potència per gestionar la cascada i fer-la funcionar per a nosaltres. Les capes en cascada CSS són un gran exemple, però hi ha una altra característica que rep una sorprenent manca d'atenció, tot i que això està canviant ara que recentment s'ha convertit en compatible amb Baseline. El CSS @scope At-Rule Considero que la CSS @scope at-rule és una cura potencial per al tipus d'ansietat induïda per filtracions d'estil que hem cobert, que no ens obliga a comprometre els avantatges web natius per a les abstraccions i les eines de compilació addicionals. "La regla at-cs @scope us permet seleccionar elements en subarbres DOM específics, orientant-vos als elements amb precisió sense escriure selectors massa específics que són difícils d'anul·lar i sense acoblar els vostres selectors massa fortament a l'estructura DOM." - MDN

En altres paraules, podem treballar amb estils aïllats en casos concrets sense sacrificar l'herència, la cascada o fins i tot la separació bàsica de preocupacions.que ha estat un principi rector de llarga durada del desenvolupament frontal. A més, té una excel·lent cobertura del navegador. De fet, el Firefox 146 va afegir suport per a @scope al desembre, fent-lo compatible amb Baseline per primera vegada. Aquí teniu una comparació senzilla entre un botó que utilitza el patró BEM i la regla @scope:

.button .button__text { /* estils de text del botó */ } .button .button__icon { /* estils d'icones de botó */ } .button--primary { estils de botons primaris */ }

@scope (.primary-button) { span:first-child { /* estils de text del botó */ } span:last-child { /* estils d'icones de botó */ } }

La regla @scope permet una precisió amb menys complexitat. El desenvolupador ja no necessita crear límits amb noms de classe, que, al seu torn, els permet escriure selectors basats en elements HTML natius, eliminant així la necessitat de patrons de noms de classe CSS prescriptius. Simplement eliminant la necessitat de gestionar el nom de classe, @scope pot alleujar la por associada amb CSS en projectes grans. Ús bàsic Per començar, afegiu la regla @scope al vostre CSS i inseriu un selector d'arrel al qual s'abastaran els estils: @àmbit () { /* Estils abastats al */ }

Així, per exemple, si haguéssim d'abastar els estils a un element

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