Ikirangantego ni hafi buri gihe, ni imbonerahamwe yamakuru imbere yikintu gishobora kuzunguruka. Buri murongo ufite ibikorwa byibikorwa, ntoya yamanutse hamwe namahitamo amwe, nka Guhindura, Kwigana, no Gusiba. Urayubaka, bisa nkaho bikora neza mubwigunge, hanyuma umuntu akabishyira imbere muri iyo divizunguruka hanyuma ibintu bigatandukana. Nabonye iri kosa rwose muri codebase eshatu zitandukanye: kontineri, stack, hamwe nurwego, byose bitandukanye. Ikosa, nubwo, rirasa rwose. Ibitonyanga bigenda bikata ku nkombe ya kontineri. Cyangwa irerekana inyuma yibirimo bigomba kuba munsi yacyo. Cyangwa ikora neza kugeza uyikoresheje azunguruka, hanyuma ikagenda. Ugera kuri z-indangagaciro: 9999. Rimwe na rimwe irafasha, ariko ubundi ntacyo ikora rwose. Uku kudahuza nicyo kimenyetso cya mbere cyerekana ko ikintu cyimbitse kibaho. Impamvu ikomeza kugaruka ni uko sisitemu eshatu zitandukanye za mushakisha zirimo, kandi abitezimbere benshi basobanukirwa buriwese ariko ntibigere batekereza uko bigenda iyo uko ari batatu bagonganye: kurengerwa, gutondekanya ibice, hamwe nibice.

Umaze gusobanukirwa uburyo uko ari bitatu bikorana, uburyo bwo gutsindwa bureka kumva bidashoboka. Mubyukuri, bahinduka ibiteganijwe. Ibintu bitatu Mubyukuri Bitera Ibi Reka turebe buri kimwe muri ibyo bintu muburyo burambuye. Ikibazo Cyuzuye Mugihe washyizeho umwuzure: uhishe, wuzuye: umuzingo, cyangwa kurengerwa: auto on element, mushakisha izajya ikuramo ikintu cyose kirenze imipaka yacyo, harimo nabakomokaho rwose. .ibikoresho kurengerwa: imodoka; uburebure: 300px; / * Ibi bizakuraho ibitonyanga, guhagarara byuzuye * / }

.dropdown { umwanya: byuzuye; / * Ntacyo bitwaye - biracyaciwe na .ibikoresho-byuzuye * / }

Ibyo byarantangaje ubwambere nabirutse. Nafashe umwanya: absolute yareka ikintu kigahunga kontineri. Ntabwo aribyo. Mubimenyerezo, bivuze ko menu ihagaze rwose irashobora kugabanywa nabakurambere bose bafite agaciro katagaragara kugaragara, kabone niyo uwo sogokuruza atari menu ikubiyemo blok. Gukata no guhagarara ni sisitemu zitandukanye. Bibaho gusa kugongana muburyo busa nkubusa kugeza ubyunvise byombi.

Dore urugero rwiza ukoresheje kurema Portal:

gutumiza {kuremaPortal} kuva 'reaction-dom'; gutumiza {gukoreshaState, koreshaEffect, koreshaRef} kuva 'reaction';

imikorere Igitonyanga ({anchorRef, is Gufungura, abana}) { const [umwanya, setPosition] = gukoreshaState ({hejuru: 0, ibumoso: 0});

Koresha Ingaruka (() => { niba (isOfungura && anchorRef.current) { const rect = anchorRef.current.getBoundingClientRect (); Gushiraho ({ hejuru: ikosora.buto + idirishya.scrollY, ibumoso: ikosora.ibumoso + idirishya.scrollX, }); } }, [isOpen, anchorRef]);

niba (! isOpen) garuka null;

garuka kuremaPortal (

{abana}
, inyandiko.umuntu wese ); }

Kandi, byanze bikunze, ntidushobora kwirengagiza kugerwaho. Ibintu bihamye bigaragara hejuru yibirimo bigomba kuba bikiri clavier. Niba gahunda yibanze ntabwo isanzwe yimuka mumanuka yagenwe, uzakenera kuyicunga ukoresheje code. Birakwiye kandi kugenzura ko iticaye hejuru yizindi ngingo zidafite uburyo bwo kubirukana. Uwo akuruma mugupima clavier. Umwanya wa CSS Anchor: Aho Ntekereza ko Ibi bigana Umwanya wa CSS Anchor nicyerekezo nshimishijwe cyane kurubu. Ntabwo nari nzi neza umubare wa spec wakoreshejwe mubyukuri nkireba bwa mbere. Iragufasha gutangaza isano iri hagati yigitonyanga nigitera muri CSS, kandi mushakisha ikora imirongo. .trigger { izina-inanga: --my-imbarutso; }

.dropdown-menu { umwanya: byuzuye; imyanya-inanga: --my-imbarutso; hejuru: inanga (hepfo); ibumoso: inanga (ibumoso); umwanya-gerageza-gusubira inyuma: flip-blok, flip-inline; }

Umwanya-gerageza-gusubira inyuma nibyo aribyo bituma agaciro gakoreshwa hejuru yintoki. Mucukumbuzi igerageza iyindi myanya mbere yo kureka, bityo igitonyanga kiri hepfo yicyerekezo gihita kijya hejuru aho guca. Inkunga ya mushakisha irakomeye muri Chromium ishingiye kuri mushakisha kandi ikura muri Safari. Firefox ikenera polyfill. Igikoresho cya @ oddbird / css-icyuma-gihagaze gikubiyemo ibintu byingenzi. Nakubise imiterere yimanza hamwe nayo isaba gusubira inyuma ntateganyaga, rero ubifate nkiterambere ryiterambere cyangwa ubihuze na aJavaScript kugaruka kuri Firefox. Muri make, bitanga icyizere ariko ntabwo ari rusange. Gerageza muri mushakisha yawe. Kandi kubijyanye no kugerwaho, gutangaza umubano ugaragara muri CSS ntacyo ubwira igiti kiboneka. aria-igenzura, aria-yaguwe, aria-haspopup - icyo gice kiracyari kuri wewe. Rimwe na rimwe, Ikosora ni Kwimura Ikintu gusa Mbere yo kugera kumurongo cyangwa gukora ibara rihuza, burigihe ndabaza ikibazo kimwe mbere: Ese uku kumanuka gukeneye kuba imbere mubikoresho byizingo? Niba ataribyo, kwimura marike kurwego rwohejuru rwipfunyika bikuraho ikibazo burundu, nta JavaScript kandi nta kubara guhuza. Ibi ntabwo buri gihe bishoboka. Niba buto no kumanuka bikubiye mubice bimwe, kwimura imwe nta bundi buryo bwo gutekereza kuri API yose. Ariko iyo ushobora kubikora, ntakintu nakimwe cyo gukemura. Ikibazo ntikibaho. Ibyo CSS igezweho iracyakemura CSS igeze kure hano, ariko haracyari ahantu ikureka. Umwanya: ibibazo byakosowe kandi bihindure biracyahari. Ari muri spec nkana, bivuze ko nta CSS ikora ibaho. Niba ukoresha isomero rya animasiyo rifunga imiterere yawe mubintu byahinduwe, wagarutse ukeneye portal cyangwa umwanya wa ankeri. Umwanya wa CSS Anchor uratanga ikizere, ariko ni shyashya. Nkuko byavuzwe haruguru, Firefox iracyakeneye polyfill mugihe nandika ibi. Nakubise imiterere yimanza hamwe nayo isaba gusubira inyuma ntari niteze. Niba ukeneye imyitwarire ihamye kurubuga rwose uyumunsi, uracyagera kuri JavaScript kubice byoroshye. Inyongera Nahinduye mubyukuri akazi kanjye ni HTML Popover API, ubu iraboneka muri mushakisha zose zigezweho. Ibintu hamwe na popover ikiranga itanga murwego rwo hejuru rwa mushakisha, hejuru ya byose, nta mwanya wa JavaScript ukenewe.

Fungura

Guhunga gukemura, gusezerera-kanda-hanze, hamwe nibisobanuro bihamye byo kugerwaho biza kubuntu kubintu nkibikoresho, ibikoresho bya widgets, hamwe no kurenga byoroshye. Nigikoresho cya mbere ngezeho ubu. Ibyo byavuzwe, ntabwo bikemura imyanya. Ikemura. Uracyakeneye inanga cyangwa JavaScript kugirango uhuze popover kuri trigger yayo. Popover API ikora urwego. Imyanya ihagaze neza. Byakoreshejwe hamwe, bikubiyemo byinshi mubyo wari ugeze mbere kugirango isomero rikore. Igitabo Cyicyemezo Kubibazo byawe Nyuma yo kunyura muribi byose inzira igoye, dore uko ntekereza mubyukuri guhitamo ubu.

Koresha portal.Nabikoresha mugihe imbarutso iba mubuzima bwimbitse. Nakoresheje iyi shusho kumeza yibikorwa menyisi kandi nayihuje no kugarura kwibanda no kugenzura kugerwaho. Nuburyo bwizewe cyane, ariko igihe cyingengo yimishinga yinyongera. Koresha umwanya uhamye.Ibi ni mugihe uri muri vanilla JavaScript cyangwa urwego ruto kandi urashobora kugenzura ko ntamukurambere ukoresha impinduka cyangwa akayunguruzo. Nibyoroshye gushiraho kandi byoroshye gukemura, mugihe cyose iyo mbogamizi imwe ifashe. Koresha umwanya wa CSS Anchor. Shikira ibi mugihe inkunga ya mushakisha yawe ibyemereye. Niba inkunga ya Firefox isabwa, ihuze na @oddbird polyfill. Aha niho urubuga rugana kandi amaherezo ruzahinduka inzira yawe. Ongera uhindure DOM. Koresha ibi mugihe ubwubatsi bubyemereye, kandi ushaka zeru zigihe kitoroshye. Nizera ko bishoboka ko aribwo buryo budashyigikiwe cyane. Huza ibishushanyo. Kora ibi mugihe ushaka ankeri ihagaze nkuburyo bwibanze bwawe, ihujwe na JavaScript yagarutse kubashakisha badashyigikiwe. Cyangwa umuyoboro wa DOM ushyizwe hamwe na getBoundingClientRect () kugirango uhuze neza.

Umwanzuro Nakunze gufata iki kibazo nkikibazo kimwe - ikintu cyo gutobora no kuva. Ariko namara kwicarana nayo bihagije kugirango nsobanukirwe na sisitemu zose uko ari eshatu zirimo - gukuramo ibicuruzwa byinshi, gutondekanya ibice, no kubamo - byahagaritse kumva bidashoboka. Nashoboraga kureba kumeneka kumeneka mpita nkurikirana abakurambere bashinzwe. Ihinduka muburyo nasomye DOM nicyo kintu gifatika. Nta gisubizo kimwe kiboneye. Ibyo nagezeho byaterwaga nicyo nashoboraga kugenzura muri codebase: portal mugihe igiti cyabakurambere kitari giteganijwe; imyanya ihamye mugihe yari isukuye kandi yoroshye; kwimura element mugihe ntakintu cyambuzaga; na inanga ihagaze ubu,aho nshobora. Ibyo aribyo byose warangiza ugahitamo, ntugafate ibiboneka nkintambwe yanyuma. Mubunararibonye bwanjye, nibyo rwose iyo bisimbutse. Umubano wa ARIA, imiyoborere yibanze, imyitwarire ya clavier - ibyo ntabwo ari polish. Biri mubituma ikintu gikora mubyukuri. Reba kode yuzuye yinkomoko muri repo yanjye ya GitHub. Ibindi Gusoma Izi nizo nyandiko nakomeje kugaruka mugihe nkora muri ibi:

Ibirindiro (MDN) “CSS Anchor Positioning Guide”, Juan Diego Rodriguez "Gutangirana na Popover API", Godstime Aburu Kureremba UI (kureremba-ui.com) CSS Yuzuye (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