Кога ги учиме принципите на основниот CSS, се учи да пишува модуларни, повеќекратно употребливи и описни стилови за да се обезбеди одржливост. Но, кога програмерите ќе се вклучат во апликации од реалниот свет, често се чувствува невозможно да се додадат функции на интерфејс без стилови да протекуваат во несакани области. Ова прашање честопати се претвора во самоисполнувачка јамка; стиловите кои теоретски се опфатени на еден елемент или класа почнуваат да се појавуваат таму каде што не припаѓаат. Ова го принудува развивачот да создаде уште поспецифични селектори за да ги отфрлат протечените стилови, кои потоа случајно ги отфрлаат глобалните стилови итн. Цврстите конвенции за име на класа, како што е BEM, се едно теоретско решение за ова прашање. Методологијата BEM (Block, Element, Modifier) ​​е систематски начин на именување CSS класи за да се обезбеди повторна употреба и структура во CSS-датотеките. Конвенциите за именување како оваа може да го намалат когнитивното оптоварување со користење на јазикот на доменот за опишување на елементите и нивната состојба, и ако се имплементираат правилно, може да го олесни одржувањето на стиловите за големи апликации. Во реалниот свет, сепак, не секогаш функционира така. Приоритетите можат да се променат, а со промената имплементацијата станува неконзистентна. Мали промени во структурата на HTML може да бараат многу ревизии на името на класата CSS. Со високо интерактивни апликации од предниот дел, имињата на класите кои го следат BEM шаблонот може да станат долги и незгодни (на пр., app-user-overview__status--is-authenticating), а нецелосното почитување на правилата за именување ја нарушува структурата на системот, а со тоа ги негира неговите придобивки. Со оглед на овие предизвици, не е ни чудо што програмерите се свртеа кон рамки, а Tailwind е најпопуларната CSS рамка. Наместо да се обидувате да се борите со она што изгледа како непобедлива војна за специфичност меѓу стиловите, полесно е да се откажете од CSS каскадата и да користите алатки кои гарантираат целосна изолација. Програмерите се потпираат повеќе на комуналните услуги Како знаеме дека некои програмери сакаат да избегнуваат каскадни стилови? Тоа е подемот на „модерната“ предна алатка - како што се рамки CSS-in-JS - дизајнирани специјално за таа цел. Работата со изолирани стилови кои се цврсто опфатени со одредени компоненти може да изгледа како здив на свеж воздух. Ја отстранува потребата да се именуваат работите - сè уште една од најомразените и најодземачките задачи од предниот дел - и им овозможува на програмерите да бидат продуктивни без целосно разбирање или искористување на придобивките од наследувањето на CSS. Но, отфрлањето на CSS каскадата доаѓа со свои проблеми. На пример, компонирањето стилови во JavaScript бара тешки конфигурации за градење и често доведува до незгодно мешање на стилови со означување на компонентите или HTML. Наместо внимателно разгледани конвенции за именување, дозволуваме build алатки за автоматско генерирање на избирачи и идентификатори за нас (на пр., .jsx-3130221066), барајќи од програмерите да бидат во тек со уште еден псевдо-јазик сам по себе. (Како когнитивното оптоварување на разбирањето на она што го прават сите ваши ефекти на употребата на компонентите да не е веќе доволно!) Понатамошното апстрактирање на работата за именување класи во алатки значи дека основното дебагирање често е ограничено на специфични верзии на апликации составени за развој, наместо да се користат карактеристиките на мајчин прелистувач што поддржуваат дебагирање во живо, како што се Алатките за програмери. Речиси како да треба да развиеме алатки за да ги дебагираме алатките што ги користиме за да го апстрахираме она што мрежата веќе го обезбедува - сè за да бегаме од „болката“ на пишувањето стандарден CSS. За среќа, модерните карактеристики на CSS не само што го прават пишувањето стандарден CSS пофлексибилен, туку им даваат на програмерите како нас многу поголема моќ да управуваат со каскадата и да ја направат да работи за нас. CSS Cascade Layers се одличен пример, но има уште една карактеристика што добива изненадувачки недостаток на внимание - иако тоа се менува сега кога неодамна стана компатибилно со основната линија. CSS @scope At-Rule Сметам дека CSS @scope at-rule е потенцијален лек за видот на вознемиреност предизвикана од истекување на стилот што ја опфативме, што не нè принудува да ги компромитираме предностите на мајчин веб за апстракции и дополнителни алатки за градење. „@scope CSS at-rule ви овозможува да изберете елементи во специфични поддрва на DOM, таргетирајќи ги елементите прецизно без да пишувате премногу специфични селектори кои тешко се отфрлаат и без премногу цврсто поврзување на вашите избирачи со структурата DOM.“ - MDN

Со други зборови, можеме да работиме со изолирани стилови во одредени случаи без да го жртвуваме наследството, каскадирањето или дури и основното раздвојување на грижитетоа е долготраен водечки принцип за развој на предниот дел. Плус, има одлична покриеност на прелистувачот. Всушност, Firefox 146 додаде поддршка за @scope во декември, што го прави компатибилен со Baseline за прв пат. Еве едноставна споредба помеѓу копче користејќи ја шемата BEM наспроти правилото @scope:

<стил> .button .button__text { /* копче стилови на текст */ } .button .button__icon { /* копче стилови на икона */ } .button--primary {primary buttons styles */ }

<стил> @scope (.primary-button) { span:first-child { /* копче стилови на текст */ } span:last-child { /* копче стилови на икона */ } }

Правилото @scope овозможува прецизност со помала сложеност. Програмерот повеќе не треба да создава граници користејќи имиња на класи, што, пак, им овозможува да пишуваат селектори врз основа на природни HTML елементи, со што се елиминира потребата за прописни модели на имиња на класи CSS. Со едноставно отстранување на потребата за управување со името на класата, @scope може да го ублажи стравот поврзан со CSS во големите проекти. Основна употреба За да започнете, додајте го правилото @scope во вашиот CSS и вметнете root избирач на кој стилови ќе бидат опфатени: @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