A bɛ se ka fɔ ko o kɛcogo bɛ kɛ kelen ye tuma bɛɛ, o min ye kunnafonidilan ye min bɛ minɛn kɔnɔ min bɛ se ka sɛgɛsɛgɛ. Layini bɛɛ bɛ ni walekɛminɛn ye, fɛn fitinin dɔ bɛ yen min bɛ ni sugandi dɔw ye, i n’a fɔ Edit, Duplicate ani Delete. I b’a jɔ, a bɛ iko a bɛ baara kɛ cogo dafalen na a dan na, o kɔfɛ mɔgɔ dɔ b’a don o div scrollable kɔnɔ ani fɛnw bɛ bin. N y’o bug tigitigi in ye kodebase saba danfaralenw na: minɛn, stack, ani framework, olu bɛɛ tɛ kelen ye. Nka, o buguri bɛ ɲɔgɔn ta pewu. O jiginɛ bɛ tigɛtigɛ minɛn da la. Walima a bɛ jira kɔnɔkow kɔfɛ minnu ka kan ka kɛ a jukɔrɔ hakili la. Walima a bɛ baara kɛ ka ɲɛ fo baarakɛla ka sɛgɛsɛgɛli kɛ, o kɔfɛ a bɛ wuli. I bɛ i bolo se z-index ma: 9999. Tuma dɔw la, a bɛ dɛmɛ, nka tuma wɛrɛw la, a tɛ foyi kɛ abada. O bɛnbaliya in de ye taamaʃyɛn fɔlɔ ye min b’a Jira ko fɛn dɔ bɛ ka Kɛ min ka dun kosɛbɛ. A bɛ to ka segin kun min na, o ye ko navigatɔrɔn-sistɛm saba danfaralenw bɛ o la, wa a dilannikɛla fanba bɛ u kelen-kelen bɛɛ faamuya u yɛrɛ ma nka u tɛ miiri abada min bɛ kɛ ni u saba bɛɛ bɛ ɲɔgɔn sɔrɔ: overflow, stacking contexts, ani containing blocks.
Ni i y’a faamu u saba bɛɛ bɛ ɲɔgɔn sɔrɔ cogo min na, dɛsɛ cogoyaw bɛ dabila ka kɛ i n’a fɔ k’a sɔrɔ u ma kɛ cogo si la. Tiɲɛ na, u bɛ kɛ fɛn ye min bɛ se ka fɔ ka ɲɛ. Fɛn saba minnu bɛ nin sababu kɛ tiɲɛ na An k’o fɛn kelen-kelen bɛɛ lajɛ ka ɲɛ. Gɛlɛya min bɛ wele ko Overflow N’i ye overflow: hidden, overflow: scroll, walima overflow: auto sigi element dɔ kan, navigatɔrɔ bɛna fɛn o fɛn kɛ ka tɛmɛ a dan kan, o bɛɛ lajɛlen bɛna clip kɛ, hali ni bɔnsɔnw jɔlen don tigitigi. .scroll-minɛn { . fɛnw falen-falen: auto; a janya: 300px; /* Nin bɛna clip down down, full stop */ } .
.dɔgɔtɔrɔso { . jɔyɔrɔ: dafalen; /* A tɛ foyi ɲɛ -- hali bi a tigɛra .scroll-container fɛ */ } .
O ye ne kabakoya siɲɛ fɔlɔ min na ne bolila ka don o la. N tun ye jɔyɔrɔ ta: absolute tun bɛna a to element dɔ ka boli minɛn dɔ tigɛcogo la. A t’o kɛ. Tiɲɛ na, o kɔrɔ ye ko menu (dɔnkilidalan) min jɔlen bɛ tigitigi, o bɛ Se ka Tigɛ ni bɛnba o bɛnbakɛ ye min ka 'kɔnɔnafili nafa tɛ Ye, hali n’o bɛnbakɛ in tɛ menu (dɔnkilida-minɛn) kɔnɔ bloki ye. Clip ni positioning ye sigida danfaralenw ye. U bɛ Kɛ dɔrɔn ka ɲɔgɔn Dòn cogoyaw la minnu bɛ i n’a fɔ k’u Kɛ k’a sɔrɔ u ma Kɛ k’a sɔrɔ i ma Kɛ k’a sɔrɔ i ma Kɛ k’a sɔrɔ i ma u fla bɛɛ Faamu.
Nin ye React misali ye min bɛ baara kɛ ni createPortal ye:
import { createPortal } ka bɔ 'react-dom' la; import { baaraEta, baaraEffect, baaraRef } ka bɔ 'react' la;
function Dropdown({ anchorRef, isOpen, denmisɛnw }) { const [yɔrɔ, setPosition] = useState ({ sanfɛ: 0, numan fɛ: 0 });
baara kɛ ni nɔ ye (() => { ni (a da wulilen don && anchorRef.current) { const rect = anchorRef.current. sɔrɔ danyɔrɔko kiliyanRect (); setPosition({ sanfɛ: rect.bottom + finɛtiri.scrollY, . numan fɛ: rect.numan fɛ + finɛtiri.scrollX, . }); } . }, [a da wulilen don, anchorRef]);
ni (!isOpen) bɛ segin null kan;
segin ka dabɔPortal(
Wa, tiɲɛ na, an tɛ se k’an ɲɛmajɔ sɔrɔli la. Fɛn jɔlenw minnu bɛ bɔ kɔnɔkow kan, olu ka kan ka se ka sɔrɔ hali bi klaviyeti fɛ. If the focus order doesn’t naturally move into the fixed dropdown, you’ll need to manage it using code. A ka ɲi fana k’a Lajɛ n’a tɛ Sìgi ‘jyɛnnatigɛ-sɛbɛn wɛrɛw kan k’a sɔrɔ cogo t’a la k’a Bɔ kɛnɛ kan. O kelen in b’i kin klaviyeti sɛgɛsɛgɛli la. CSS Anchor Positioning: N hakili la nin bɛ taa yɔrɔ min na CSS Anchor Positioning ye sira ye min ka di n ye kosɛbɛ sisan. N tun t’a dɔn ko spec hakɛ min bɛ se ka baara kɛ tiɲɛ na n y’a lajɛ fɔlɔ. A b’a To i bɛ jɛɲɔgɔnya min bɛ 'yɔrɔ la min bɛ 'yɔrɔ la min bɛ 'yɔrɔ la ani a ka 'sènbɔlan cɛ CSS kɔnɔ k'a ɲɛsin i ma, wa navigatɔrɔ bɛ 'koordinatɛriw ɲɛnabɔ. .trigger { . anchor-tɔgɔ: --ne ka-tɔgɔ; } .
.yɔrɔ-yɔrɔ-menu { . jɔyɔrɔ: dafalen; jɔyɔrɔ-ankɔri: --ne-ka-bɔn; sanfɛ: ankɔri(jukɔrɔ); numan fɛ: ankɔri(numan fɛ); jɔyɔrɔ-kɔrɔ-fallbacks: flip-block, flip-inline; } .
Position-try-fallbacks property de b’a to nin nafa ka bon ka baara kɛ ni bolola jatebɔ kan. Navigatɛri bɛ yɔrɔ wɛrɛw bilali kɛ k’a ɲini ka sɔrɔ k’a dabila, o la, fɛn dɔ min bɛ filɛlikɛlan jukɔrɔ, o bɛ wuli a yɛrɛma ka taa san fɛ sanni a ka tigɛ. Navigatɛri dɛmɛni sabatilen don Chromium-based browsers kɔnɔ ani a bɛ ka bonya Safari kɔnɔ. Firefox mago bɛ polyfill la. @oddbird/css-anchor-positioning pake bɛ spec core (dakunw) ɲɛfɔ. N’ye layout edge cases gosi n’a ye minnu tun bɛ fallbacks wajibiya n tun ma miiri minnu na, o la k’a minɛ i n’a fɔ progressive enhancement walima k’a fara ɲɔgɔn kan ni aJavaScript fallback ka ɲɛsin Firefox ma. Kuma surun na, layidu talen don nka a ma kɛ diɲɛ bɛɛ ta ye fɔlɔ. Kɔrɔbɔli kɛ i ka navigatɔrɔw laɲinitaw kɔnɔ. Wa, seko ni dɔnko siratigɛ la, ka jɛɲɔgɔnya yelen dɔ Laseli CSS kɔnɔ, o tɛ foyi Fɔ seko ni dɔnko jiri ye. aria-controls, aria-expanded, aria-haspup — o yɔrɔ bɛ i kan hali bi. Tuma dɔw la, Fix (Fix) Ye Element (Element) Lamaga Dɔrɔn ye Sani n ka se dakun dɔ ma walima ka jatebɔ kɛ coordinate (koordinatɛri) kan, n bɛ ɲininkali kelen kɛ fɔlɔ tuma bɛɛ: Yala nin jiginɛ in mago bɛ tiɲɛ na ka balo sɛbɛnfura kɔnɔ wa? N’a ma Kɛ, ka taamaʃyɛn Lasegin wrapper (dakun) sanfɛla la, o bɛ gɛlɛya in Bɔ pewu, JavaScript tɛ yen ani jatebla coordinate (koordinatɛri) tɛ yen. O tɛ se ka kɛ tuma bɛɛ. Ni butɔni ni jiginɛ bɛ Dòn yɔrɔ kelen na, ka kelen Lamaga ni tɔ kelen tɛ, o kɔrɔ ye ka miiri kokura API bɛɛ la. Nka n’i bɛ Se k’o Kɛ, foyi t’a la k’a Labɛn. Gɛlɛya tɛ yen dɔrɔn. Bi CSS bɛ min ɲɛnabɔ hali bi CSS ye sira jan Sɔrɔ yan, nka yɔrɔ dɔw bɛ yen halibi a b’i Jigin. Jyɔrɔ : fixed ani transform koɲɛw bɛ yen hali bi. A bɛ spec kɔnɔ ni laɲini ye, o kɔrɔ ye ko CSS baarakɛcogo si tɛ yen. N’i bɛ baara kɛ ni animation library ye min b’i ka layidu siri fɛn caman tigɛli la, i bɛ segin ka mago don portals walima anchor positioning la. CSS Anchor Positioning ye layidu ta, nka a ye kura ye. I n’a fɔ a fɔra cogo min na ka tɛmɛ, Firefox mago bɛ polyfill la hali bi n bɛ nin sɛbɛn in sɛbɛn waati min na. N ye layout edge cases gosi n’a ye minnu tun bɛ fallbacks wajibiya n tun ma miiri minnu na. N’i mago bɛ kɛwale basigilenw na navigatɛriw bɛɛ la bi, i b’i bolo Se JavaScript ma hali bi a yɔrɔw kama minnu bɛ namara. N ye n ka baarakɛcogo Changé tiɲɛ na fara min kan, o ye HTML Popover API ye, min bɛ sɔrɔ sisan bi navigatɔrɔw bɛɛ la. Fɛn minnu bɛ ni popover attribut ye, olu bɛ jira navigatɔrɔn sanfɛla la, fɛn bɛɛ sanfɛ, ni JavaScript jɔyɔrɔfalen tɛ mago ɲɛ.
Boli-boli, bɔli-ni-klik-kɛnɛma, ani sɔrɔli kɔrɔɲɔgɔnmaya sabatilenw bɛ na fu fɛnw kama i n’a fɔ baarakɛminɛnw laadilikanw, kunnafonidi-minɛnw, ani dakun nɔgɔmanw. O ye baarakɛminɛn fɔlɔ ye n bɛ se min ma sisan. O fɔlen, a t’a ka jɔyɔrɔfalen ɲɛnabɔ. A bɛ layɛrɛw ɲɛnabɔ. I mago bɛ anchor positioning walima JavaScript la hali bi walasa ka popover dɔ labɛn ka kɛɲɛ n’a ka trigger ye. Popover API bɛ layɛrɛw ɲɛnabɔ. Ankɔri jɔyɔrɔfalen bɛ a bilali ɲɛnabɔ. Ni u bɛ baara kɛ ɲɔgɔn fɛ, i tun bɛ se ka fɛn minnu kɛ fɔlɔ gafemarayɔrɔ dɔ fɛ, u bɛ olu fanba ɲɛfɔ. Desizɔnw tacogo gafe dɔ ka ɲɛsin i ka ko ma Nin bɛɛ tɛmɛnen kɔ sira gɛlɛn fɛ, n bɛ miiri sugandili in na tiɲɛ na cogo min na sisan, o filɛ nin ye.
Baara kɛ ni dakun ye.N tun bɛna baara kɛ ni nin ye ni trigger bɛ balo kosɛbɛ nested scroll containers kɔnɔ. N ye nin misali in Kɛ tabali walew menu (menu) ye k’a Fàra ɲɔgɔn kan ni focus (fɔcogo seginni) ni accessibility (sɛgɛsɛgɛli) ye. O ye sugandi ye min bɛ se ka da a kan kosɛbɛ, nka budget waati ka ɲɛsin wiring wɛrɛw ma. Baara kɛ ni jɔyɔrɔ jɔlen ye.O ye waati ye n’i bɛ vanilla JavaScript walima framework nɔgɔman na ani i bɛ se k’a sɛgɛsɛgɛ ko bɛnba si tɛ fɛn caman tigɛli walima filɛriw kɛ. A sigili ka nɔgɔn wa a labɛnni ka nɔgɔn, n’o dantigɛli kelen in bɛ To. Baara kɛ ni CSS Anchor Positioning ye.I bolo se o ma ni i ka navigatɛri dɛmɛni y’a to. Ni Firefox dɛmɛni wajibiyalen don, i k’a fara ɲɔgɔn kan ni @oddbird polyfill ye. O yɔrɔ de la, plateforme laban bɛ taa yɔrɔ min na, wa a laban na, a bɛna kɛ i ka taa-ka-segin fɛɛrɛ ye. DOM labɛn kokura.Baara kɛ ni nin ye ni architecture b’a to, wa i b’a fɛ zero runtime complexity. Ne dalen b’a la ko a ka c’a la, o de ye sugandi ye min tɛ jate kosɛbɛ. Combine patterns.O kɛ n’i b’a fɛ anchor positioning ka kɛ i ka fɛɛrɛ fɔlɔ ye, ka fara JavaScript fallback kan navigatɔrɔw kama minnu tɛ dɛmɛ sɔrɔ. Walima DOM bilali dakun dɔ min bɛ fara ɲɔgɔn kan ni getBoundingClientRect() ye walasa ka koordinatɛriw ka tiɲɛni kɛ.
Kuncɛli N tun bɛ nin fɛnɲɛnama in minɛ i n’a fɔ ko min bɛ kɛ siɲɛ kelen — fɛn min ka kan ka patɔrɔn ka taa ɲɛ. Nka n y’i sigi n’a ye ka mɛn walasa ka sistɛm saba bɛɛ faamuya minnu bɛ o ko la — overflow clipping, stacking contexts, ani containing blocks — a y’a dabila ka kɛ random ye. N tun bɛ se ka fɛn dɔ lajɛ min karilen don, ka sɔrɔ ka o yɔrɔnin bɛɛ a ɲini ka bɛnbakɛ jumɛn de jalaki. O jiginni min kɛra n ka DOM kalancogo la, o de tun ye fɛn ye min bɛ taa ni a ye tiɲɛ na. Jaabi ɲuman kelen t’a la. N ye n bolo Se min ma, o tùn bɛ Bɔ n bɛ Se ka min Kɔrɔsi kodebase kɔnɔ: dakunw waati min na bɛnbakan jiri tun tɛ Se ka Fɔ ka ɲɛ; jɔyɔrɔfalen jɔlen tuma min na a saniyalen don ani a tun ka nɔgɔn; ka elementi lamaga tuma min na foyi tun tɛ n bali; ani ankɔri jɔyɔrɔfalen sisan, .n bɛ se yɔrɔ min na. I labanna ka fɛn o fɛn sugandi, i kana sɔrɔli jate i n’a fɔ fɛɛrɛ laban. N ka ko kɛlenw na, o waati tigitigi de b’a Sɔrɔ a bɛ Tɛmɛ. ARIA jɛɲɔgɔnyaw, sinsinnanw ɲɛnabɔli, klaviyeti kɛcogo — olu tɛ polisiw ye. U ye fɛn dɔ ye min b’a to o fɛn bɛ baara kɛ tiɲɛ na. Aw ye source code dafalen lajɛ n ka GitHub repo kɔnɔ. Kalan wɛrɛw Ninnu ye kunnafoni minnu ye n tun bɛ segin ka na minnu kan n’a tun bɛ baara kɛ nin ko in fɛ:
A ka baarakɛcogo (MDN) . “CSS ka ankɔri jɔyɔrɔko gafe”, Juan Diego Rodriguez “Ka daminɛ ni Popover API ye”, Godstime Aburu UI min bɛ wuli (floating-ui.com) . CSS ka baarakɛcogo (MDN) .