Ɛkame ayɛ sɛ bere nyinaa na tebea no yɛ pɛ, a ɛyɛ data pon a ɛwɔ ade a wotumi twetwe mu mu. Row biara wɔ adeyɛ menu, dropdown ketewa bi a ɛwɔ akwan bi, te sɛ Edit, Duplicate, ne Delete. Wosi no, ɛte sɛ nea ɛyɛ adwuma pɛpɛɛpɛ wɔ baabi a atew ne ho, na afei obi de to saa scrollable div no mu na nneɛma hwe ase. M’ahu saa bɔne yi pɛpɛɛpɛ wɔ codebases ahorow abiɛsa mu: container, stack, ne framework, ne nyinaa yɛ soronko. Nanso, mmoawa no yɛ pɛ koraa. Dropdown no nya clipped wɔ container’s ano. Anaasɛ ɛda adi wɔ nsɛm a ɛsɛ sɛ ntease wom sɛ ɛwɔ n’ase akyi. Anaasɛ ɛyɛ adwuma yiye kosi sɛ nea ɔde di dwuma no bɛtwetwe, na afei akɔ akyirikyiri. Wo nsa ka z-index: 9999. Ɛtɔ da bi a ɛboa, nanso mmere foforo nso ɛnyɛ hwee koraa. Saa abirabɔ no ne ade a edi kan a ɛkyerɛ sɛ biribi a emu dɔ rekɔ so. Nea enti a ɛkɔ so san ba ne sɛ browser nhyehyɛe abiɛsa a ɛsono emu biara na ɛka ho, na developers dodow no ara te emu biara ase wɔ n’ankasa mu nanso wonsusuw nea ɛba bere a abiɛsa no nyinaa bɔ ho da: overflow, stacking contexts, ne containing blocks.

Sɛ wote sɛnea abiɛsa no nyinaa di nkitaho ase wie a, huammɔdi akwan no gyae te nka sɛ ɛyɛ random. Nokwarem no, wɔbɛyɛ nea wotumi hyɛ ho nkɔm. Nneɛma Abiɛsa a Ɛde Eyi Ba Ankasa Momma yɛnhwɛ saa nneɛma no mu biara nkɔ akyiri. Ɔhaw a Ɛfa Overflow Ho no Sɛ wode overflow: hidden, overflow: scroll, anaa overflow: auto si element bi so a, browser no bɛtwitwa biribiara a ɛtrɛw kɔ akyiri sen n’ahye, a asefo a wɔwɔ gyinabea koraa ka ho. .scroll-akorae { . nsuo a ɛboro so: auto; ne sorokɔ: 300px; /* Wei bɛtwitwa dropdown no, full stop */ . } .

.dropdown { . gyinabea: nea edi mũ; /* Ɛnfa ho -- ɛda so ara atwitwa denam .scroll-container so */ } .

Ɛno maa me ho dwiriw me bere a edi kan a mituu mmirika kɔɔ mu no. I’d assumed position: absolute bɛma element bi aguan afi container’s clipping mu. Ɛnyɛ saa. Wɔ nneyɛe mu no, ɛno kyerɛ sɛ menu a ɛwɔ gyinabea koraa no betumi atwa denam nana biara a ɔwɔ overflow value a ɛnyɛ nea wotumi hu so, sɛ mpo saa nana no nyɛ menu’s containing block a. Clipping ne positioning yɛ nhyehyɛe ahorow a ɛsono emu biara. Ɛba kɛkɛ sɛ wɔbɔ wɔn ho wɔn ho wɔ akwan horow so a ɛte sɛ nea wɔanhyɛ da koraa kosi sɛ wobɛte abien no nyinaa ase.

React nhwɛsoɔ a wɔde createPortal di dwuma ni:

fa { createPortal } fi 'react-dom' mu; import { useState, fa di dwumaEffect, fa di dwumaRef } fi 'yɛ ade';

adwuma Dropdown ({ anchorRef, isOpen, mmofra }) { const [gyinabea, setPosition] = useState ({ soro: 0, benkum: 0 });

fa Nsunsuanso di dwuma (() => { . sɛ (yɛOpen && anchorRef.mprempren) { . const rect = anchorRef.mprempren.gyeBoundingAdetɔfoRect (); setGyinabea ({ soro: rect.ase + mfɛnsere.scrollY, . benkum: rect.benkum + mfɛnsere.scrollX, . }); } . }, [ɛyɛOpen, anchorRef]);

sɛ (!isOpen) san de null ba;

san kɔ createPortal( ) so.

{mmofra} .
, . krataa.nipadua ); } .

Na, nokwarem no, yɛrentumi mmu yɛn ani ngu akwan a wɔfa so kɔ hɔ no so. Ɛsɛ sɛ nneɛma a wɔasiesie a epue wɔ nsɛm so no da so ara yɛ nea wotumi de keyboard di dwuma. Sɛ focus order no ntumi nkɔ fixed dropdown no mu fi awosu mu a, ɛho behia sɛ wode code di dwuma. Ɛfata nso sɛ wobɛhwɛ sɛ ɛntra nkitahodi nneɛma afoforo so a ɔkwan biara nni hɔ a wobɛfa so apow. Saa baako no ka wo wɔ keyboard sɔhwɛ mu. CSS Anchor Positioning: Baabi a Misusuw sɛ Eyi Rekɔ CSS Anchor Positioning yɛ akwankyerɛ a m’ani gye ho kɛse mprempren. Na minnim sɛnea spec no dodow no ara yɛ nea wotumi de di dwuma ankasa bere a midii kan hwɛɛ no ​​no. Ɛma wopae mu ka abusuabɔ a ɛda dropdown ne ne trigger ntam tẽẽ wɔ CSS mu, na browser no di coordinates no ho dwuma. .trigger { . anchor-din: --me-ahyɛnsodeɛ; } .

.dropdown-menu { . gyinabea: nea edi mũ; gyinabea-anchor: --me-ahyɛnsode; soro: anchor(ase); benkum: anchor(benkum); gyinabea-bɔ mmɔden-fallbacks: flip-block, flip-inline; } .

Position-try-fallbacks agyapade no ne nea ɛma eyi fata sɛ wɔde di dwuma wɔ nsaano akontaabu so. Browser no sɔ mmeae foforo hwɛ ansa na wagyae, enti dropdown bi a ɛwɔ viewport no ase no dannan kɔ soro ankasa sen sɛ ɛbɛtwa. Browser mmoa yɛ den wɔ Chromium-based browsers mu na ɛrenya nkɔso wɔ Safari mu. Firefox hia polyfill. @oddbird/css-anchor-positioning package no kata core spec no so. I’ve hit layout edge cases with it that required fallbacks a na menhwɛ kwan, enti fa no sɛ nkɔsoɔ a ɛkɔ so anaa fa fa aJavaScript fallback ma Firefox. Ne tiaatwa mu no, ɛhyɛ bɔ nanso ɛnyɛ amansan nyinaa de besi nnɛ. Sɔ hwɛ wɔ wo browser ahorow a wode w’ani asi so no mu. Na sɛnea ɛfa accessibility ho no, sɛ wobɛpae mu aka abusuabɔ a ɛda aniwa so wɔ CSS mu a, ɛnkyerɛ accessibility dua no hwee. aria-controls, aria-expanded, aria-haspopup — saa fã no da so ara wɔ wo so. Ɛtɔ da bi a, Fix no Yɛ Moving The Element Kɛkɛ Ansa na mɛduru portal bi so anaasɛ mɛyɛ coordinate akontabuo no, berɛ biara medi kan bisa asɛm baako: So ɛhia ankasa sɛ saa dropdown yi tena scroll container no mu? Sɛ ɛnte saa a, sɛ wode markup no kɔ wrapper a ɛkorɔn so a, eyi ɔhaw no fi hɔ koraa, a JavaScript nni hɔ na coordinate akontaabu biara nni hɔ. Ɛnyɛ bere nyinaa na eyi betumi aba. Sɛ wɔde button ne dropdown no ahyɛ ade koro no ara mu a, sɛ wode biako kɔ baabi foforo a ɔfoforo nka ho a, ɛkyerɛ sɛ wobɛsan asusuw API no nyinaa ho. Nanso sɛ wotumi yɛ a, biribiara nni hɔ a wobɛsiesie. Ɔhaw no nni hɔ kɛkɛ. Nea Nnɛyi CSS Da so ara Ntumi Nsiesie CSS akɔ akyirikyiri wɔ ha, nanso mmeae bi da so ara wɔ hɔ a ɛma w’abam bu. Gyinabea no: fixed ne transform nsɛm da so ara wɔ hɔ. Ɛyɛ spec no mu ahyɛ da, a ɛkyerɛ sɛ CSS adwumayɛ biara nni hɔ. Sɛ wode animation nhomakorabea a ɛkyekyere wo nhyehyɛe no wɔ element a wɔasakra mu redi dwuma a, woasan akɔ baabi a wuhia portals anaa anchor positioning. CSS Anchor Positioning yɛ bɔhyɛ, nanso ɛyɛ foforo. Sɛnea yɛadi kan aka no, Firefox da so ara hia polyfill wɔ bere a merekyerɛw eyi no. I’ve hit layout edge cases ne no a ɛhwehwɛ fallbacks a na menhwɛ kwan. Sɛ wo hia suban a ɛkɔ so daa wɔ browser nyinaa mu nnɛ a, woda so ara rekɔ JavaScript so ama afã horow a ɛyɛ anifere no. Adeɛ a wɔde aka ho a masesa m’adwumayɛ kwan ankasa ne HTML Popover API, a seesei ɛwɔ nnɛyi browser nyinaa mu. Elements a popover attribute no kyerɛ wɔ browser’s top layer no mu, wɔ biribiara so, a JavaScript gyinabea biara ho nhia.

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