Thaum kawm cov hauv paus ntsiab lus ntawm CSS, ib qho yog qhia kom sau cov qauv, rov siv tau, thiab piav qhia kom paub meej. Tab sis thaum cov neeg tsim khoom koom nrog cov ntawv thov hauv ntiaj teb tiag tiag, nws feem ntau xav tias tsis tuaj yeem ntxiv UI nta yam tsis muaj cov qauv nkag mus rau hauv qhov chaw tsis xav tau. Qhov teeb meem no feem ntau snowballs rau hauv ib lub voj uas nws tus kheej ua tiav; cov qauv uas yog theoretically scoped rau ib lub caij los yog chav kawm pib qhia txog qhov uas lawv tsis koom. Qhov no yuam tus tsim tawm los tsim cov kev xaiv tshwj xeeb tshaj plaws los cuam tshuam cov qauv xau, uas tom qab ntawd yuam kev hla cov qauv thoob ntiaj teb, thiab lwm yam. Rigid class name conventions, xws li BEM, yog ib txoj kev daws teeb meem rau qhov teeb meem no. Cov txheej txheem BEM (Block, Element, Modifier) yog ib txoj hauv kev zoo ntawm kev sau npe CSS cov chav kawm kom paub tseeb tias rov siv tau thiab cov qauv hauv CSS cov ntaub ntawv. Kev sau npe cov rooj sib tham zoo li no tuaj yeem txo qis kev txawj ntse los ntawm kev siv cov lus sau los piav txog cov ntsiab lus thiab lawv lub xeev, thiab yog tias siv tau zoo, tuaj yeem ua rau cov qauv rau cov ntawv thov loj kom tswj tau yooj yim dua. Hauv lub ntiaj teb tiag tiag, txawm li cas los xij, nws tsis ua haujlwm zoo li ntawd. Qhov tseem ceeb tuaj yeem hloov pauv, thiab nrog kev hloov pauv, kev siv yuav ua tsis tiav. Cov kev hloov me me rau cov qauv HTML tuaj yeem xav tau ntau yam kev hloov kho CSS lub npe. Nrog rau cov ntawv thov sib tham ua ntej-kawg, cov npe hauv chav kawm raws li tus qauv BEM tuaj yeem ua qhov ntev thiab tsis muaj zog (piv txwv li, app-user-overview__status--is-autheticating), thiab tsis ua raws li txoj cai naming ua txhaum lub system cov qauv, yog li negating nws cov txiaj ntsig. Muab cov kev cov nyom no, nws tsis yog qhov xav tsis thoob tias cov neeg tsim khoom tau tig mus rau lub moj khaum, Tailwind yog qhov nrov tshaj plaws CSS lub moj khaum. Ntau dua li sim tawm tsam qhov zoo li qhov tsis muaj kev sib ntaus sib tua tshwj xeeb ntawm cov qauv, nws yooj yim dua los tso rau ntawm CSS Cascade thiab siv cov cuab yeej uas lav kev sib cais tiav. Developers Lean Ntau Ntawm Cov Khoom Siv Peb yuav ua li cas thiaj paub tias qee tus neeg tsim khoom tau mob siab rau zam cov qauv cascaded? Nws yog qhov nce ntawm "hnub no" cov cuab yeej pem hauv ntej - zoo li CSS-hauv-JS lub luag haujlwm - tsim tshwj xeeb rau lub hom phiaj ntawd. Ua hauj lwm nrog cov qauv sib cais uas nruj nruj rau cov khoom tshwj xeeb tuaj yeem zoo li ua pa ntawm huab cua ntshiab. Nws tshem tawm qhov xav tau rau lub npe - tseem yog ib qho ntawm cov nyiam tshaj plaws thiab siv sijhawm ua haujlwm ua ntej - thiab tso cai rau cov neeg tsim khoom tsim khoom yam tsis muaj kev nkag siab lossis siv cov txiaj ntsig ntawm CSS qub txeeg qub teg. Tab sis ditching CSS Cascade los nrog nws tus kheej cov teeb meem. Piv txwv li, kev sau cov qauv hauv JavaScript yuav tsum muaj kev tsim kho hnyav thiab feem ntau ua rau cov qauv tsis txaus ntseeg cuam tshuam nrog cov cim cim lossis HTML. Es tsis txhob ua tib zoo txiav txim siab naming conventions, peb tso cai tsim cov cuab yeej los autogenerate selectors thiab identifiers rau peb (piv txwv li, .jsx-3130221066), xav kom developers mus nrog rau lwm pseudo-lus lus nyob rau hauv thiab ntawm nws tus kheej. (Raws li yog qhov kev paub txog kev nkag siab txog dab tsi tag nrho koj cov khoom siv cov txiaj ntsig ua tsis tau txaus!) Ntxiv abstracting txoj hauj lwm ntawm naming chav kawm rau tooling txhais tau hais tias qhov yooj yim debugging yog feem ntau txwv rau tej daim ntawv thov versions compiled rau txoj kev loj hlob, tsis yog leveraging haiv neeg browser nta uas txhawb nyob debugging, xws li Developer Tools. Nws yuav luag zoo li peb yuav tsum tau tsim cov cuab yeej los daws cov cuab yeej peb siv los paub qhov tseeb ntawm lub vev xaib twb tau muab - tag nrho rau kev khiav tawm ntawm "mob" ntawm kev sau ntawv CSS. Hmoov zoo, niaj hnub CSS nta tsis tsuas yog ua rau kev sau ntawv CSS hloov tau yooj yim dua, tab sis kuj muab cov neeg tsim khoom zoo li peb muaj lub zog ntau dua los tswj cov cascade thiab ua rau nws ua haujlwm rau peb. CSS Cascade Layers yog ib qho piv txwv zoo, tab sis muaj lwm qhov tshwj xeeb uas tau txais kev xav tsis thoob - txawm hais tias qhov hloov pauv tam sim no uas nws nyuam qhuav dhau los ua Baseline sib xws. The CSS @scope At-Rule Kuv xav txog CSS @scope ntawm-txoj cai los ua ib qho kev kho mob rau hom style-leak-induced ntxhov siab vim peb tau npog, ib qho uas tsis yuam peb kom cuam tshuam cov haiv neeg lub vev xaib zoo rau kev paub daws teeb meem thiab tsim cov cuab yeej ntxiv. "Lub @scope CSS ntawm txoj cai tso cai rau koj xaiv cov ntsiab lus hauv DOM subtrees tshwj xeeb, tsom cov ntsiab lus meej yam tsis tau sau cov neeg xaiv tshwj xeeb uas nyuaj rau override, thiab tsis sib txuas koj cov neeg xaiv dhau nruj rau DOM qauv." - MDN
Hauv lwm lo lus, peb tuaj yeem ua haujlwm nrog cov qauv sib cais hauv qee qhov tshwj xeeb yam tsis muaj kev txi qub txeeg qub teg, cascading, lossis txawm tias qhov sib cais ntawm kev txhawj xeeb.uas yog ib tug ntev-khiav txoj cai ntawm kev loj hlob pem hauv ntej kawg. Ntxiv rau, nws muaj qhov zoo tshaj plaws browser kev pab cuam. Qhov tseeb, Firefox 146 ntxiv kev txhawb nqa rau @scope thaum Lub Kaum Ob Hlis, ua rau nws Baseline tau tshaj thawj zaug. Nov yog qhov sib piv yooj yim ntawm lub pob siv tus qauv BEM piv rau @scope txoj cai:
Txoj cai @scope tso cai rau precision nrog tsawg complexity. Tus tsim tawm tsis tas yuav tsim cov ciam teb siv cov npe hauv chav kawm, uas, dhau los, tso cai rau lawv sau cov neeg xaiv raws li cov ntsiab lus HTML haiv neeg, yog li tshem tawm qhov xav tau ntawm cov ntawv sau npe CSS cov npe qauv. Los ntawm kev tshem tawm qhov xav tau rau kev tswj hwm lub npe hauv chav kawm, @scope tuaj yeem txo qhov kev ntshai cuam tshuam nrog CSS hauv cov haujlwm loj.
Kev siv yooj yim
Txhawm rau pib, ntxiv txoj cai @scope rau koj CSS thiab ntxig tus xaiv lub hauv paus rau cov qauv twg yuav raug:
@scope (
Yog li, piv txwv li, yog tias peb yuav tsum tau hloov cov qauv mus rau
@scope (nav) { a {/* Link styles in nav scope */ }
a: nquag { /* Active link styles */ }
a:active::ua ntej {/* Active link with pseudo-element for extra styling */ }
@media (max-dav: 768px) { a {/* Responsive adjustments */ } } }
Qhov no, ntawm nws tus kheej, tsis yog ib qho kev nthuav dav. Txawm li cas los xij, qhov kev sib cav thib ob tuaj yeem raug ntxiv rau qhov tsim nyog los tsim kom muaj ib thaj tsam qis dua, txhais tau zoo ntawm qhov pib thiab xaus cov ntsiab lus.
/* Ib qho khoom hauv ul yuav tsis muaj cov qauv siv */ @scope (nav) to (ul) { ib { font-loj: 14px; } }
Qhov kev coj ua no yog hu ua donut scope, thiab muaj ntau txoj hauv kev uas ib tus tuaj yeem siv, suav nrog ntau yam zoo sib xws, cov kev xaiv tshwj xeeb ua ke nruj heev rau DOM qauv, ib qho: tsis yog pseudo-selector, lossis muab cov npe tshwj xeeb rau cov ntsiab lus hauv
Xaus Utility-thawj CSS lub moj khaum, xws li Tailwind, ua haujlwm zoo rau kev tsim qauv thiab cov haujlwm me me. Lawv cov txiaj ntsig poob sai sai, txawm li cas los xij, thaum siv hauv cov haujlwm loj uas muaj ntau tshaj li ob peb tus neeg tsim tawm. Kev txhim kho pem hauv ntej tau dhau los ua qhov nyuaj hauv ob peb xyoos dhau los, thiab CSS tsis muaj qhov tshwj xeeb. Thaum txoj cai @scope tsis yog kho-tag nrho, nws tuaj yeem txo qhov xav tau rau kev siv cuab yeej nyuaj. Thaum siv rau hauv qhov chaw, lossis nrog rau cov npe hauv chav kawm, @scope tuaj yeem ua kom yooj yim thiab lom zem dua los sau CSS khaws cia. Nyeem ntxiv
CSS @scope (MDN) "CSS @scope", Juan Diego Rodríguez (CSS-Tricks) Firefox 146 Tso Lus Ceeb Toom (Firefox) Kev them nyiaj yug Browser (CanIUse) Nrov CSS Frameworks (State of CSS 2024) "C" hauv CSS: Cascade", Thomas Yip (CSS-Tricks) BEM Introduction (Tau BEM)