Ihe ngosi a na-abụkarị otu, nke bụ tebụl data n'ime akpa mpịakọta. Ahịrị ọ bụla nwere menu ihe omume, obere mkpọda nwere ụfọdụ nhọrọ, dị ka Dezie, oyiri, na Hichapụ. Ị na-ewu ya, ọ dị ka ọ na-arụ ọrụ nke ọma na iche, mgbe ahụ mmadụ tinye ya n'ime akwụkwọ mpịakọta ahụ ma ihe daa. Ahụla m ahụhụ a kpọmkwem na codebases atọ dị iche iche: akpa, nchịkọta, na usoro, niile dị iche iche. Otú ọ dị, ahụhụ ahụ bụ nnọọ otu. A na-egbutu mkpọda ahụ n'ọnụ ọnụ akpa ahụ. Ma ọ bụ ọ na-egosi n'azụ ọdịnaya kwesịrị ezi uche dị n'okpuru ya. Ma ọ bụ ọ na-arụ ọrụ nke ọma ruo mgbe onye ọrụ pịgharịa, wee kpafuo. Ị ruru maka z-index: 9999. Mgbe ụfọdụ ọ na-enyere aka, ma oge ndị ọzọ ọ na-eme nnọọ ihe ọ bụla. Nkwekọrịta ahụ bụ ihe mbụ na-egosi na ihe dị omimi na-eme. Ihe kpatara na ọ na-alọghachi azụ bụ na usoro ihe nchọgharị atọ dị iche iche metụtara, na ọtụtụ ndị mmepe na-aghọta nke ọ bụla n'onwe ya mana echela ihe na-eme mgbe ha atọ na-agbakọ: oke njupụta, nchịkọta ihe, na ihe nwere ngọngọ.

Ozugbo ị ghọtara ka atọ ahụ si emekọrịta, ụdị ọdịda ọdịda na-akwụsị inwe mmetụta enweghị usoro. N'ezie, ha na-aghọ amụma. Ihe Atọ Na-ebute Nke a n'ezie Ka anyị leba anya na nke ọ bụla n'ime ihe ndị ahụ n'ụzọ zuru ezu. Nsogbu Ijubiga ókè Mgbe ị na-edozi oke mmiri: zoro ezo, jubigara ókè: mpịakọta, ma ọ bụ njupụta: akpaaka na mmewere, ihe nchọgharị ahụ ga-ewepụ ihe ọ bụla gafere oke ya, gụnyere ụmụ ụmụ edobere kpamkpam. . mpịakọta-akpa { njupụta: akpaaka; elu: 300px; /* Nke a ga-ebelata dropdown, nkwụsị zuru ezu */ }

.mkpọda { ọnọdụ: zuru oke; /* Ọ baghị uru -- ka e ji .Scroll-container bibiri */ }

Nke ahụ tụrụ m n’anya nke mbụ m gbabara na ya. Aga m ewere ọnọdụ: zuru oke ga-ekwe ka mmewere gbanarị mbelata akpa. Ọ naghị. Na omume, nke ahụ pụtara na nna nna ọ bụla nwere uru njupụta nke na-adịghị ahụ anya nwere ike ibipụ menu nke edobere kpamkpam, ọbụlagodi ma ọ bụrụ na nna ochie ahụ abụghị ngọngọ nwere menu. Ichichi na n'ọkwa bụ usoro dị iche iche. Ha na-eme na-agbakọ n'ụzọ ndị na-ele anya kpamkpam ruo mgbe ị ghọtara ha abụọ.

Nke a bụ ihe atụ React site na iji createPortal:

mbubata {creaPortal} site na 'react-dom'; mbubata {useState, useEffect, useRef} site na 'meghachi omume';

ọrụ Dropdown ({anchorRef, isOpen, ụmụaka }) { const [ọnọdụ, setPosition] = useState ({elu: 0, aka ekpe: 0});

useEffect(() => { ma ọ bụrụ (isOpen && anchorRef.current) { const rect = anchorRef.current.getBoundingClientRect(); setPosition({ elu: rect.bottom + window. ScrollY, aka ekpe: rect.left + window.scrollX, } } }, [isOpen, anchorRef]);

ọ bụrụ na (!isOpen) laghachi null;

laghachi CreatePortal(

, akwụkwọ.anụ ); }

Na, n'ezie, anyị enweghị ike ileghara ịnweta ya anya. Ihe edoziziri nke na-egosi n'ime ọdịnaya ga-abụrịrị nke a ga-enweta na ahụigodo. Ọ bụrụ na usoro elekwasị anya abanyeghị na ndapụta a kapịrị ọnụ, ị ga-achọ iji koodu jikwaa ya. Ọ dịkwa mma ịlele na ọ naghị anọdụ n'elu ọdịnaya mmekọrịta ndị ọzọ na-enweghị ụzọ isi wepụ ya. Nke ahụ na-ata gị ahụhụ na nyocha ahụigodo. Ndokwa CSS Anchor: Ebe m chere na nke a na-aga Ndokwa CSS Anchor bụ ntụzịaka kacha masị m ugbu a. Ejighị m n'aka ole n'ime ụdịdị ahụ enwere ike iji ya mgbe mbụ m lere ya anya. Ọ na-ahapụ gị ka ị kwupụta mmekọrịta dị n'etiti ndọpụta na mkpalite ya na CSS, ihe nchọgharị ahụ na-ejikwa nhazi. .kpalite { arịlịka-aha: --m-akpalite; }

. dropdown-menu { ọnọdụ: zuru oke; ọnọdu-arịlịka: --m-akpalite; elu: arịlịka (ala); aka ekpe: arịlịka (aka ekpe); ọnọdụ-agbalị-adaghachi azụ: tụgharịa-block, tụgharịa-inline; }

Ngwongwo-na-agbalị-adaghachi azụ bụ ihe na-eme ka nke a baa uru iji karịa ngụkọ ntuziaka. Ihe nchọgharị ahụ na-anwa idowe ọzọ tupu ọ daa mbà, ya mere mwụda dị n'okpuru ebe nlele na-atụgharị elu na-akpaghị aka kama ebipụ ya. Nkwado ihe nchọgharị siri ike na ihe nchọgharị dabere na Chromium ma na-eto na Safari. Firefox chọrọ polyfill. Ihe ngwugwu @oddbird/css-anchor-positioning na-ekpuchi isi nkọwapụta. Ejila m ya akụda okirikiri okirikiri nke chọrọ ọdịda m na-atụghị anya ya, yabụ were ya dị ka nkwalite na-aga n'ihu ma ọ bụ jikọta ya naJavaScript ọdịda maka Firefox. Na nkenke, na-ekwe nkwa ma ọ bụghị eluigwe na ala ma. Nwalee na ihe nchọgharị gị lekwasịrị anya. Na n'ihe gbasara nnweta, ikwuwapụta mmekọrịta anya na CSS anaghị agwa osisi nnweta ihe ọ bụla. aria-controls, aria-expanded, aria-haspopup - akụkụ ahụ ka dị gị. Mgbe ụfọdụ, Ndozi ahụ na-ebugharị naanị ihe Tupu m eruo maka portal ma ọ bụ na-eme mgbakọ nhazi, m na-ebu ụzọ na-ajụ otu ajụjụ: dropdown a ọ dị mkpa ibi n'ime akpa akwụkwọ mpịakọta? Ọ bụrụ na ọ bụghị, ịkwaga akara ahụ na ihe mkpuchi dị elu na-ewepụ nsogbu ahụ kpamkpam, na-enweghị Javascript na enweghị nhazi nhazi. Nke a anaghị ekwe omume mgbe niile. Ọ bụrụ na etinyere bọtịnụ na dropdown n'otu akụrụngwa, ịkwaga otu na-enweghị nke ọzọ pụtara ịtụgharị uche na API dum. Ma mgbe ị nwere ike ime ya, ọ nweghị ihe ga-ehichapụ. Nsogbu adịghị adị. Ihe CSS ọgbara ọhụrụ anaghị edozi ya CSS abịala ebe a ogologo oge, mana enwere ebe ọ na-eme ka ị daa. Ọnọdụ: edozi na mgbanwe okwu ka dị. Ọ bụ na ụma kpachaara anya, nke pụtara na enweghị ọrụ CSS adịghị. Ọ bụrụ na ị na-eji ọba akwụkwọ ihe nkiri na-ekechi okirikiri gị n'ime ihe gbanwere, ịlaghachila ịchọ ọnụ ụzọ ma ọ bụ idobe arịlịka. Ndokwa CSS Anchor na-ekwe nkwa, mana ọhụrụ. Dị ka e kwuru na mbụ, Firefox ka chọrọ polyfill n'oge m na-ede ihe a. Ejila m ya akụda okirikiri okirikiri nke chọrọ ọdịda m na-atụghị anya ya. Ọ bụrụ na ịchọrọ omume na-agbanwe agbanwe n'ofe ihe nchọgharị niile taa, ị ka na-enweta Javascript maka akụkụ ndị dị aghụghọ. Mgbakwunye m gbanwere usoro ọrụ m bụ HTML Popover API, dị ugbu a na ihe nchọgharị ọgbara ọhụrụ niile. Ihe ndị nwere àgwà popover na-eme ka ọ dị n'elu oyi akwa ihe nchọgharị ahụ, karịa ihe niile, na-enweghị ọnọdụ Javascript achọrọ.

Ijikwa mgbapụ, ịchụpụ-na-pịa-n'èzí, yana usoro mmụta nnweta siri ike na-abịa n'efu maka ihe ndị dị ka ndụmọdụ ngwaọrụ, wijetị mkpughe, na nfefe dị mfe. Ọ bụ ngwa ọrụ mbụ m ruru ugbu a. Nke ahụ kwuru, ọ naghị edozi ọnọdụ. Ọ na-edozi layering. Ị ka chọrọ nhazi arịlịka ma ọ bụ Javascript iji kwado popover na mkpalite ya. Popover API na-ejikwa nhazi ahụ. Ndokwa arịlịka na-ejikwa ntinye ahụ. Ejikọta ha ọnụ, ha na-ekpuchi ọtụtụ ihe ị ga-enweta na mbụ maka ụlọ akwụkwọ ọbá akwụkwọ ime. Ntuziaka mkpebi maka ọnọdụ gị Mgbe m gafechara ihe a niile n'ụzọ siri ike, nke a bụ ka m chere n'ezie maka nhọrọ ugbu a.

Jiri portal. M ga-eji nke a mgbe ihe mkpalite na-ebi n'ime akpa akwụkwọ mpịakọta akwụkwụ. Eji m ụkpụrụ a maka menus ihe omume tebụl wee jikọta ya na mweghachi elekwasị anya na nlele nnweta. Ọ bụ nhọrọ a pụrụ ịdabere na ya, mana oge mmefu ego maka eriri mgbakwunye. Jiri ọnọdụ edobere. Nke a bụ maka mgbe ịnọ na vanilla Javascript ma ọ bụ usoro dị fechaa ma nwee ike ịchọpụta na ọ nweghị nna ochie na-etinye mgbanwe ma ọ bụ nzacha. Ọ dị mfe ịtọlite ​​​​ma dị mfe ịmegharị, ọ bụrụhaala na otu mmachi ahụ na-ejide. Jiri CSS Anchor Positioning. Nweta nke a mgbe nkwado ihe nchọgharị gị nyere ya ohere. Ọ bụrụ na achọrọ nkwado Firefox, jikọta ya na @oddbird polyfill. Nke a bụ ebe ikpo okwu na-aga n'ikpeazụ, ọ ga-emesịa bụrụ ebe ị ga-aga. Megharia DOM. Jiri nke a mgbe ihe owuwu na-enye ya ohere, ma ịchọrọ mgbagwoju anya oge ịgba ọsọ efu. Ekwenyere m na ọ ga-abụ nhọrọ kacha emetụtaghị ya. Gwakọta ụkpụrụ.Mee nke a mgbe ịchọrọ idobe arịlịka dị ka ụzọ mbụ gị, jikọtara ya na ndaghachi azụ Javascript maka ihe nchọgharị anaghị akwado. Ma ọ bụ ọnụ ụzọ maka ntinye DOM jikọtara ya na getBoundingClientRect() maka nhazi nhazi.

Mmechi M na-emeso ahụhụ a dị ka ihe na-apụ apụ - ihe m ga-akwachi ma si na ya pụọ. Mana ozugbo mụ na ya nọkọọ ogologo oge iji ghọta usoro atọ niile metụtara - mbelata oke mmiri, ihe njupụta, na ihe nwere ngọngọ - ọ kwụsịrị inwe mmetụta enweghị usoro. Enwere m ike ilele mkpọda gbajiri agbaji wee chọpụta ozugbo nke nna ochie kpatara ya. Mgbanwe ahụ na otu m si agụ DOM bụ ezigbo ihe ewepụrụ. Enweghị otu azịza ziri ezi. Ihe m ruru dabere na ihe m nwere ike ijikwa na codebase: portals mgbe osisi nna ochie enweghị atụ; edobere n'ọnọdụ mgbe ọ dị ọcha ma dị mfe; na-emegharị mmewere mgbe ọ dịghị ihe na-egbochi m; na ọnọdụ arịlịka ugbu a,ebe m nwere ike. Ihe ọ bụla ị mechara họrọ, ewerela ịnweta ohere dị ka nzọụkwụ ikpeazụ. Na ahụmịhe m, nke ahụ bụ kpọmkwem mgbe ọ na-amafe ya. Mmekọrịta ARIA, njikwa elekwasị anya, omume ahụigodo - ndị ahụ adịghị mma. Ha bụ akụkụ nke ihe na-eme ka ihe na-arụ ọrụ n'ezie. Lelee koodu isi mmalite na GitHub repo m. Ọgụgụ ọzọ Ndị a bụ nkọwa ndị m na-alaghachi mgbe m na-arụ ọrụ na nke a:

Okwu Stacking (MDN) "Ntuziaka Ntuzi Arịlịka CSS", Juan Diego Rodriguez "Ịmalite na Popover API", Godstime Aburu UI na-ese n'elu mmiri (floating-ui.com) Ntụbiga nke CSS (MDN)

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