Пры вывучэнні прынцыпаў базавага CSS вучаць пісаць модульныя, шматразовыя і апісальныя стылі для забеспячэння зручнасці абслугоўвання. Але калі распрацоўшчыкі пачынаюць працаваць з рэальнымі праграмамі, часта здаецца немагчымым дадаць функцыі карыстацкага інтэрфейсу без уцечкі стыляў у непрадбачаныя вобласці. Гэтая праблема часта перарастае ў самарэалізаваны цыкл; стылі, якія тэарэтычна адносяцца да аднаго элемента або класа, пачынаюць з'яўляцца там, дзе ім не месца. Гэта прымушае распрацоўшчыка ствараць яшчэ больш спецыфічныя селектары для перавызначэння прасачыліся стыляў, якія потым выпадкова перавызначаюць глабальныя стылі і г.д. Жорсткія пагадненні аб назвах класаў, такія як БЭМ, з'яўляюцца адным з тэарэтычных рашэнняў гэтай праблемы. Метадалогія BEM (Block, Element, Modifier) ​​- гэта сістэматычны спосаб наймення класаў CSS для забеспячэння шматразовага выкарыстання і структуры файлаў CSS. Пагадненні аб найменнях, падобныя гэтаму, могуць паменшыць кагнітыўную нагрузку за кошт выкарыстання даменнай мовы для апісання элементаў і іх стану, а пры правільнай рэалізацыі могуць зрабіць стылі для вялікіх прыкладанняў больш простымі ў абслугоўванні. Аднак у рэальным свеце так атрымліваецца не заўсёды. Прыярытэты могуць мяняцца, і са зменамі рэалізацыя становіцца непаслядоўнай. Невялікія змены ў структуры HTML могуць запатрабаваць шмат пераглядаў назваў класаў CSS. З высокаінтэрактыўнымі інтэрфейснымі праграмамі імёны класаў, якія прытрымліваюцца шаблону BEM, могуць стаць доўгімі і грувасткімі (напрыклад, app-user-overview__status--is-authenticating), а няпоўнае прытрымліванне правілам наймення парушае структуру сістэмы, зводзячы на ​​нішто яе перавагі. Улічваючы гэтыя праблемы, нядзіўна, што распрацоўшчыкі звярнуліся да фрэймворкаў, прычым Tailwind з'яўляецца самым папулярным фрэймворкам CSS. Замест таго, каб спрабаваць змагацца з тым, што здаецца непераможнай вайной спецыфікі паміж стылямі, прасцей адмовіцца ад CSS Cascade і выкарыстоўваць інструменты, якія гарантуюць поўную ізаляцыю. Распрацоўшчыкі больш спадзяюцца на ўтыліты Адкуль мы ведаем, што некаторыя распрацоўшчыкі імкнуцца пазбягаць каскадных стыляў? Гэта рост «сучасных» інтэрфейсных інструментаў — напрыклад, фрэймворкаў CSS-in-JS — распрацаваных спецыяльна для гэтай мэты. Праца з ізаляванымі стылямі, якія цесна звязаны з пэўнымі кампанентамі, можа здацца глытком свежага паветра. Гэта пазбаўляе ад неабходнасці называць рэчы — гэта ўсё яшчэ адна з самых ненавісных і працаёмкіх інтэрфейсных задач — і дазваляе распрацоўшчыкам быць прадуктыўнымі без поўнага разумення або выкарыстання пераваг наследавання CSS. Але адмова ад CSS Cascade мае свае праблемы. Напрыклад, складанне стыляў у JavaScript патрабуе цяжкіх канфігурацый зборкі і часта прыводзіць да таго, што стылі нязграбна змешваюцца з разметкай кампанентаў або HTML. Замест старанна прадуманых пагадненняў аб найменнях мы дазваляем ствараць інструменты для аўтаматычнай генерацыі селектараў і ідэнтыфікатараў для нас (напрыклад, .jsx-3130221066), што патрабуе ад распрацоўшчыкаў ісці ў нагу з яшчэ адной псеўда-мовай самой па сабе. (Быццам бы кагнітыўнай нагрузкі на разуменне таго, што робяць useEffects вашага кампанента, ужо недастаткова!) Далейшае абстрагаванне працы па найменні класаў у інструменты азначае, што базавая адладка часта абмяжоўваецца пэўнымі версіямі прыкладанняў, скампіляванымі для распрацоўкі, а не з выкарыстаннем уласных функцый браўзера, якія падтрымліваюць адладку ў рэжыме рэальнага часу, такіх як Інструменты распрацоўшчыка. Гэта падобна на тое, што нам трэба распрацаваць інструменты для адладкі інструментаў, якія мы выкарыстоўваем, каб абстрагавацца ад таго, што Інтэрнэт ужо прапануе - усё дзеля таго, каб пазбегнуць "болю" напісання стандартнага CSS. На шчасце, сучасныя функцыі CSS не толькі робяць напісанне стандартнага CSS больш гнуткім, але і даюць такім распрацоўнікам, як мы, значна больш магчымасцей кіраваць каскадам і прымушаць яго працаваць на нас. CSS Cascade Layers з'яўляюцца выдатным прыкладам, але ёсць яшчэ адна асаблівасць, якой дзіўна не хапае ўвагі - хоць гэта мяняецца цяпер, калі яна нядаўна стала сумяшчальнай з Baseline. Правіла CSS @scope At-Rule Я лічу, што правіла CSS @scope at-rule з'яўляецца патэнцыйным лекам ад трывогі, выкліканай уцечкай стылю, якую мы разглядалі, якая не прымушае нас ісці на кампраміс з уласнымі вэб-перавагамі для абстракцый і дадатковых інструментаў зборкі. «Правіла @scope CSS at дазваляе вам выбіраць элементы ў пэўных паддрэвах DOM, дакладна нацэльваючы элементы без напісання празмерна спецыфічных селектараў, якія цяжка перавызначыць, і без занадта цеснай сувязі вашых селектараў са структурай DOM».— MDN

Іншымі словамі, мы можам працаваць з ізаляванымі стылямі ў пэўных выпадках, не ахвяруючы наследаваннем, каскадам або нават базавым падзелам задачгэта было даўнім кіруючым прынцыпам распрацоўкі інтэрфейсу. Акрамя таго, ён мае выдатны ахоп браўзера. Фактычна, Firefox 146 дадаў падтрымку @scope ў снежні, упершыню зрабіўшы яго сумяшчальным з Baseline. Вось простае параўнанне паміж кнопкай, якая выкарыстоўвае шаблон BEM, і правілам @scope:

<стыль> .button .button__text { /* стылі тэксту кнопкі */ } .button .button__icon { /* стылі значкоў кнопак */ } .button--primary { асноўныя стылі кнопак */ }

<стыль> @scope (.primary-button) { span:first-child { /* стылі тэксту кнопкі */ } span:last-child { /* стылі значкоў кнопак */ } }

Правіла @scope дазваляе выконваць дакладнасць з меншай складанасцю. Распрацоўшчыку больш не трэба ствараць межы з дапамогай імёнаў класаў, што, у сваю чаргу, дазваляе ім пісаць селектары на аснове ўласных элементаў HTML, пазбаўляючы тым самым патрэбы ў прадпісваючых шаблонах імёнаў класаў CSS. Проста пазбаўляючы ад неабходнасці кіравання імёнамі класаў, @scope можа палегчыць страх, звязаны з CSS у вялікіх праектах. Базавае выкарыстанне Каб пачаць, дадайце правіла @scope да вашага CSS і ўстаўце каранёвы селектар, да якога будуць прымяняцца стылі: @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