Xaaladdu had iyo jeer waa isku mid, kaas oo ah miis xogeed oo ku dhex jira weel la duubi karo. Saf kastaa waxa uu leeyahay liis hawleed, hoos u dhac yar oo leh doorashooyin qaar, sida Tafatir, nuqul, iyo Tirtir. Adigu waad dhistaa, waxay u muuqataa inay si qumman u shaqaynayso go'doon, ka dibna qof ayaa gelinaya gudaha dushiisa duuban oo arrimuhu kala daadanayaan. Waxaan ku arkay cayayaankan saxda ah saddex saldhig oo kala duwan: weelka, raso, iyo qaabka, dhammaan way kala duwan yihiin. Cayayaanka, in kastoo, gabi ahaanba waa isku mid. Hoos-u-dhaca waxa lagu gooyaa geesta weelka. Ama waxay muujinaysaa inay ka dambeeyaan nuxurka macquulka ah inay ka hooseeyaan. Ama si fiican ayey u shaqeysaa ilaa isticmaaluhu uu wareego, ka dibna wuu wareegayaa. Waxaad gaartaa z-index: 9999. Mararka qaarkood way caawisaa, laakiin marar kale gabi ahaanba waxba ma qabato. Is-waafajin la'aantaas ayaa ah tilmaanta ugu horreysa ee ah in wax qoto dheer ay dhacayaan. Sababta ay dib ugu soo laabanayso ayaa ah in saddex hab oo kala duwan oo browser ah ay ku lug leeyihiin, inta badan horumariyayaashuna mid walba goonidiisa ayay u fahmaan laakiin waligood ha ka fikirin waxa dhacaya marka ay saddexdaas isku dhacaan: qulqulka xad dhaafka ah, isku xidhka xaaladaha, iyo ka kooban blocks.
Marka aad fahanto sida saddexdaba ay u wada falgalaan, hababka guul darradu waxay joojiyaan dareenka aan kala sooc lahayn. Dhab ahaantii, waxay noqdaan kuwo la saadaalin karo. Saddexda shay ee dhabta ah ee arrintan keenaya Aynu si faahfaahsan u eegno mid kasta oo ka mid ah walxahaas. Dhibaatada Qulqulka Markaad dejiso qulqulka: qarsoon, qulqulka: rog, ama qulqulka: auto on element, browserku wuxuu gooyn doonaa wax kasta oo ka baxsan xuduudihiisa, oo ay ku jiraan faraca meelaysan. weel-duub qulqulka: auto; dhererka: 300px; /* Tani waxay gooyn doontaa hoos u dhaca, joogsi buuxda */ }
.hoos u dhac{ booska: buuxda; /* Dhib malahan -- wali waxaa gooyay weel-rogid */ }
Taasi waxay iga yaabisay markii ugu horeysay ee aan ku dhex ordo. Waxaan u qaadan lahaa booska: gabi ahaanba wuxuu u ogolaanayaa curiye inuu ka baxsado goynta weelka. Ma aha. Ficil ahaan, taasi waxay la macno tahay in menu-ga la meeleeyay uu goyn karo awoowe kasta oo leh qiime qulqulaya oo aan muuqan, xitaa haddii awoowahaasi aanu ahayn menu-ka ku jira block. Goynta iyo meelaynta waa nidaamyo kala duwan. Waxay kaliya dhacaan inay isku dhacaan siyaabo si buuxda u muuqda ilaa aad ka fahanto labadaba.
Waa kuwan tusaale falcelinta iyadoo la isticmaalayo createPortal:
ka soo daji {createPortal} ka 'react-dom'; ka soo dejinta {useState, useEffect, useRef} ka 'react';
shaqada hoos u dhigista ({anchorRef, isOpen, children }) { const [boos, setPosition] = isticmaalkaState ({ sare: 0, bidix: 0});
useEffect(() => { haddii (waa Furan && anchorRef.current) { const rect = anchorRef.current.getBoundingClientRect(); meelaynta ({ sare: rect.bottom + window.gudbin Y, bidix: rect.left + window.scrollX, } } }, [isOpen, anchorRef]);
haddii (!isOpen) soo laabto waxba;
soo celi CreatePortal
Iyo, dabcan, ma iska indho tiri karno gelitaanka. Walxaha go'an ee ka muuqda nuxurka waa inay ahaadaan kuwo la gaadhi karo kiiboodhka. Haddii amarka foojignaanta uusan si dabiici ah ugu dhaqaaqin hoos u dhaca go'an, waxaad u baahan doontaa inaad ku maamusho koodka. Waxa kale oo ay mudan tahay in la hubiyo in aanay ku dul fadhiisanayn waxyaabo kale oo is dhexgal ah iyada oo aan sinaba loo diidin. Midkaas ayaa ku qaniinaya tijaabada kiiboodhka. Booska Barroosinka CSS: Halka aan u malaynayo in ay tani ku sii jeeddo Meelaynta CSS Anchor waa jihada aan aad u xiisaynayo hadda. Ma aan hubin inta ay le'eg tahay tafatirka dhabta ah ee la isticmaali karo markii ugu horeysay ee aan eego. Waxay kuu ogolaanaysaa inaad si toos ah ugu dhawaaqdo xidhiidhka ka dhexeeya hoos u dhaca iyo kicintiisa gudaha CSS, browserkuna wuxuu gacanta ku hayaa isku-duwayaasha. . kicinta { barroosin-magaca: --kiciyaheyga; }
.hoos u-dhac-menu { booska: buuxda; booska-barroosinka: --kiciyeyga; sare: barroosin (hoose); bidix: barroosin (bidix); booska-isku day-dib-u-dhacyada: rogrogid-block, rog-inline; }
Booska-isku day-soo-celinta hantida waa tan ka dhigaysa mid mudan in la isticmaalo xisaabinta gacanta. Barowsarku waxa uu isku dayaa meelayn kale ka hor inta aanu is dhiibin, markaa hoos u dhaca xagga hoose ee daawashada ayaa si toos ah kor ugu rogaaysa halkii laga goyn lahaa. Taageerada Browser waa ku adag tahay daalacashada ku salaysan Chromium oo ku koraysa Safari. Firefox wuxuu u baahan yahay buuxinta badan Xirmada @oddbird/css-anchor-pointing waxay dabooshaa xogta asaasiga ah. Waxaan ku dhuftay kiisaska geesaha qaabeynta ee u baahan dib-u-dhacyo aanan filayn, markaa ula dhaqan sidii horumarin horumarsan ama ku lammaanDib u dhaca JavaScript ee Firefox. Marka la soo koobo, rajo leh laakiin aan weli caalami ahayn. Ku tijaabi daalacashada bartilmaameedkaaga. Iyo ilaa inta la heli karo, ku dhawaaqida xiriirka muuqaalka ee CSS waxba uma sheegayso geedka gelitaanka. aria-controls, aria-ballaaran, aria-haspopup - qaybtaas wali adigay kugu saaran tahay. Mararka qaarkood Hagaajintu waxa ay dhaqaajinaysaa Cunsurka Kahor intaanan gaarin portal ama samaynta xisaabinta iskudubarid, waxaan had iyo jeer weydiiyaa hal su'aal marka hore: Hoosudhacani dhab ahaantii ma u baahan yahay inuu ku noolaado gudaha weelka duubka? Haddii aysan taasi dhicin, u wareejinta calaamadaynta xirmo heer sare ah ayaa meesha ka saaraysa dhibaatada gebi ahaanba, iyada oo aan lahayn JavaScript iyo xisaabin isku dubarid ah. Tani mar walba suurtagal maaha. Haddii badhanka iyo hoos u dhigista lagu soo koobay isla qayb, guuritaanka mid la'aanteed macnaha kale ee dib-u-eegista API oo dhan. Laakiin marka aad samayn karto, ma jiraan wax lagu saxayo. Dhibaatadu kaliya ma jirto. Waa maxay CSS Casriga ah oo aan wali xalin CSS waxa ay soo martay waddo dheer halkan, laakiin weli waxa jira meelo ay ku dejiso. Booska: arrimaha go'an iyo isbeddelka ayaa weli jira. Waxay ku jirtaa si ulakac ah, taas oo macnaheedu yahay inaysan jirin wax ka qaban CSS oo jira. Haddii aad isticmaalayso maktabad animation ah oo qaabayntaada ku soo duuduubtay shay la beddelay, waxaad ku soo noqotay inaad u baahato marinnada ama meelaynta barroosinka. Meelaynta CSS Anchor waa rajo leh, laakiin cusub. Sidii hore loo sheegay, Firefox wali waxay u baahan tahay buuxbuuxinta wakhtiga aan tan qorayo. Waxaan ku dhuftay kiisaska geesaha qaabeynta oo u baahan dib-u-dhacyo aanan filayn. Haddii aad u baahan tahay hab-dhaqan joogto ah dhammaan daalacashada maanta, waxaad weli gaadhaysaa JavaScript qaybaha qallafsan. Ku-darka aan runtii u beddelay socodka shaqadayda waa HTML Popover API, oo hadda laga heli karo dhammaan daalacashada casriga ah. Walxaha leh sifada popover-ka waxay ka dhigayaan lakabka sare ee browserka, wax kasta ka sarreeya, iyada oo aan meelayn JavaScript loo baahnayn.
Wax ka qabashada baxsadka, ka saarida-guji-baxa-baxa, iyo micnaha gelitaan adag ayaa bilaash u ah waxyaabaha ay ka midka yihiin tabaha aaladaha, widgets siideynta, iyo dulsaar fudud. Waa qalabkii ugu horreeyay ee aan gaaro hadda. Taasi waxay tidhi, ma xallinayso meelaynta. Waxay xallisaa lakabyada. Weli waxaad u baahan tahay meelaynta barroosinka ama JavaScript si aad ugu toosiso bood-boodka kicintiisa. Popover API ayaa gacanta ku haysa lakabyada. Meelaynta barroosintu waxay gacanta ku haysaa meelaynta. Si wada jir ah loo isticmaalo, waxay daboolayaan inta badan waxaad hore u gaadhi lahayd maktabad si aad u samayso. Hagaha Go'aanka ee Xaaladaada Ka dib markaan soo maro dhammaan kuwan habka adag, halkan waa sida aan dhab ahaantii uga fekerayo doorashada hadda.
Isticmaal portal. Waxaan isticmaali lahaa tan marka kiciyahu si qoto dheer ugu dhex jiro weelasha duuban ee buulkooda leh. Waxa aan qaabkan u isticmaalay liiska waxqabadyada miiska waxaanan ku lammaaniyay soo celinta diiradda iyo hubinta gelitaanka. Waa ikhtiyaarka ugu kalsoonaan karo, laakiin wakhtiga miisaaniyada ee fiilooyinka dheeraadka ah. Isticmaal meelaynta go'an.Tani waxa loogu talagalay marka aad ku jirto vaniljka JavaScript ama qaab-dhismeedka miisaanka fudud oo aad xaqiijin kartaa in awoowe aanu codsan beddelka ama filtarrada. Way fududahay in la dejiyo oo ay fududahay in la saxo, ilaa iyo inta ay xaddidan tahay. Isticmaal CSS Anchor Positioning.ar tan marka taageerada browserkaagu kuu ogolaato. Haddii taageerada Firefox loo baahan yahay, ku dheji @oddbird polyfill. Tani waa meesha ugu dambeyntii madalku ku sii jeedo oo aakhirka waxay noqon doontaa habka aad u socoto. Dib u habayn ku samee DOM. Isticmaal tan marka qaabdhismeedku ogolaado, oo aad rabto kakanaanta wakhtiga runtime eber. Waxaan aaminsanahay inay u badan tahay ikhtiyaarka ugu hooseeya. Isku dar qaababka Ama portal meelaynta DOM oo lagu lammaaniyay getBoundingClientRect() si loo helo saxnaanta isku xidhka.
Gabagabo Waxaan ula dhaqmi jiray bug-gan sidii arrin hal-mar ah - wax la dhejiyo oo laga gudbo. Laakiin mar aan la fadhiistay waqti dheer oo ku filan si aan u fahmo dhammaan saddexda nidaam ee ku lug leh - jarista qulqulka, isugeynta xaaladaha, iyo ka kooban baloogyada - waxay joojisay dareemka nasiib. Waxaan eegi karay hoos u jabay oo isla markiiba raadraacay awoowgee masuulka ka ahaa. Isbedelkaas sida aan u akhriyay DOM wuxuu ahaa qaadashada dhabta ah. Ma jirto jawaab keliya oo sax ah. Waxa aan gaadhay waxay ku xidhan tahay waxa aan ku xakamayn karo codebase: portals marka geedka awoowgu ahaa mid aan la saadaalin karin; meelaynta go'an markay nadiif ahayd oo fududayd; dhaqaajinta curiyaha markii aan waxba i joojinayn; iyo meelaynta hadda,meesha aan awoodo. Wax kasta oo aad dooratid, ha ula dhaqmin gelitaanka sidii talaabadii ugu dambaysay. Waayo-aragnimadayda, taasi waa dhab ahaan marka la boodo. Xidhiidhada ARIA, maamulka diiradda saaraya, habdhaqanka kiiboodhka - kuwani maaha kuwo nadiif ah. Waxay qayb ka yihiin waxa ka dhigaya shaygu inuu shaqeeyo. Fiiri koodhka isha oo buuxa ee ku jira GitHub repo. Akhris Dheeraad ah Waa kuwan tix-raacyadii aan ku soo noqday intii aan hawshan waday:
Macnaha Dulsaarka (MDN) "Hagaha meelaynta barroosinka ee CSS", Juan Diego Rodriguez "Ku Bilawga Popover API", Godstime Aburu sabayn UI (floating-ui.com) Qulqulka CSS (MDN)