Ko se učimo načel osnovnega CSS, se naučimo pisati modularne, ponovno uporabne in opisne sloge, da zagotovimo vzdržljivost. Ko pa se razvijalci začnejo ukvarjati z aplikacijami iz resničnega sveta, se pogosto zdi nemogoče dodati funkcije uporabniškega vmesnika, ne da bi slogi uhajali na nenamerna področja. Ta težava pogosto preide v samoizpolnjujočo se zanko; slogi, ki so teoretično omejeni na en element ali razred, se začnejo pojavljati tam, kjer ne sodijo. To prisili razvijalca, da ustvari še bolj specifične izbirnike za preglasitev razkritih slogov, ki nato pomotoma preglasijo globalne sloge itd. Toge konvencije o imenih razredov, kot je BEM, so ena od teoretičnih rešitev tega vprašanja. Metodologija BEM (Block, Element, Modifier) ​​je sistematičen način poimenovanja razredov CSS za zagotovitev ponovne uporabe in strukture znotraj datotek CSS. Takšne konvencije o poimenovanju lahko zmanjšajo kognitivno obremenitev z uporabo domenskega jezika za opis elementov in njihovega stanja, in če so pravilno implementirane, lahko olajšajo vzdrževanje slogov za velike aplikacije. V resničnem svetu pa ne gre vedno tako. Prioritete se lahko spremenijo in s spremembo postane izvajanje nedosledno. Majhne spremembe strukture HTML lahko zahtevajo številne revizije imen razreda CSS. Z zelo interaktivnimi sprednjimi aplikacijami lahko imena razredov, ki sledijo vzorcu BEM, postanejo dolga in okorna (npr. app-user-overview__status--is-authenticating), neupoštevanje pravil poimenovanja v celoti pa poruši strukturo sistema in s tem izniči njegove prednosti. Glede na te izzive ni čudno, da so se razvijalci obrnili na ogrodja, pri čemer je Tailwind najbolj priljubljeno ogrodje CSS. Namesto da bi se poskušali boriti proti nečemu, kar se zdi nezmagljiva vojna specifičnosti med slogi, je lažje opustiti CSS Cascade in uporabiti orodja, ki zagotavljajo popolno izolacijo. Razvijalci se bolj zanašajo na pripomočke Kako vemo, da se nekateri razvijalci radi izogibajo kaskadnim slogom? To je vzpon "modernih" sprednjih orodij - kot so okviri CSS-in-JS - zasnovanih posebej za ta namen. Delo z izoliranimi slogi, ki so tesno povezani z določenimi komponentami, se lahko zdi kot dah svežega zraka. Odpravlja potrebo po poimenovanju stvari – še vedno eno izmed najbolj osovraženih in zamudnih opravil na sprednjem delu – in omogoča razvijalcem, da so produktivni, ne da bi v celoti razumeli ali izkoristili prednosti dedovanja CSS. Toda opustitev CSS Cascade ima svoje težave. Na primer, sestavljanje slogov v JavaScript zahteva obsežne konfiguracije gradnje in pogosto vodi do nerodnega mešanja slogov z oznakami komponent ali HTML. Namesto skrbno pretehtanih konvencij o poimenovanju dovolimo, da orodja za izdelavo samodejno ustvarijo izbirnike in identifikatorje za nas (npr. .jsx-3130221066), kar od razvijalcev zahteva, da sledijo še enemu psevdo-jeziku samemu po sebi. (Kot da kognitivna obremenitev razumevanja, kaj vse počnejo useEffects vaše komponente, še ne bi bila dovolj!) Nadaljnje abstrahiranje opravila poimenovanja razredov v orodja pomeni, da je osnovno odpravljanje napak pogosto omejeno na specifične različice aplikacije, prevedene za razvoj, namesto da bi izkoristile funkcije izvornega brskalnika, ki podpirajo odpravljanje napak v živo, kot so orodja za razvijalce. Skoraj tako, kot da bi morali razviti orodja za odpravljanje napak v orodjih, ki jih uporabljamo za abstrahiranje tega, kar splet že ponuja – vse zaradi pobega pred »bolečino« pisanja standardnega CSS. Na srečo sodobne funkcije CSS ne samo, da naredijo pisanje standardnega CSS bolj prilagodljivo, ampak tudi dajejo razvijalcem, kot smo mi, veliko več moči za upravljanje kaskade in omogočanje, da deluje za nas. CSS Cascade Layers so odličen primer, vendar obstaja še ena funkcija, ki ji presenetljivo primanjkuje pozornosti – čeprav se to zdaj spreminja, ko je pred kratkim postala združljiva z osnovno linijo. Pravilo CSS @scope At-Rule Menim, da je pravilo @scope at-rule CSS možno zdravilo za vrsto tesnobe zaradi uhajanja sloga, ki smo jo obravnavali, in ki nas ne prisili, da ogrozimo izvorne spletne prednosti za abstrakcije in dodatna orodja za gradnjo. »Pravilo @scope CSS at-rule vam omogoča, da izberete elemente v določenih poddrevesih DOM, natančno ciljate na elemente, ne da bi pisali preveč specifične izbirnike, ki jih je težko preglasiti, in ne da bi vaše izbirnike pretesno povezali s strukturo DOM.« — MDN

Z drugimi besedami, delamo lahko z izoliranimi slogi v določenih primerih, ne da bi pri tem žrtvovali dedovanje, kaskadiranje ali celo osnovno ločevanje pomislekovto je bilo dolgoletno vodilno načelo front-end razvoja. Poleg tega ima odlično pokritost brskalnika. Pravzaprav je Firefox 146 decembra dodal podporo za @scope, s čimer je prvič postal združljiv z Baseline. Tu je preprosta primerjava med gumbom, ki uporablja vzorec BEM, in pravilom @scope:

.button .button__text { /* slogi besedila gumbov */ } .button .button__icon { /* slogi ikon gumba */ } .button--primary { primarni slogi gumbov */ }

@scope (.primary-button) { span:first-child { /* slogi besedila gumba */ } span:last-child { /* slogi ikon gumba */ } }

Pravilo @scope omogoča natančnost z manj zapletenosti. Razvijalcu ni več treba ustvarjati meja z uporabo imen razredov, kar jim posledično omogoča pisanje izbirnikov na podlagi izvornih elementov HTML, s čimer se odpravi potreba po predpisanih vzorcih imen razredov CSS. S preprosto odstranitvijo potrebe po upravljanju imen razredov lahko @scope zmanjša strah, povezan s CSS v velikih projektih. Osnovna uporaba Če želite začeti, dodajte pravilo @scope svojemu CSS in vstavite korenski izbirnik, ki bo obsegal sloge: @scope () { /* Slogi v obsegu */ }

Torej, na primer, če bi stile razširili na 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