Boemo bo batla bo tshwana ka metlha, e leng tafole ya tshedimosetso mo teng ga setshodi se se kgonang go tsamaya. Mola mongwe le mongwe o na le menyu wa tiro, lenaane le lennye le le nang le ditlhopho dingwe, tse di jaaka Tseleganya, Boeletsa, le Phimola. O e aga, e lebega e bereka sentle e le nosi, mme morago ga moo mongwe a e tsenya mo teng ga div eo e e kgonang go tsamaya mme dilo di wela fa fatshe. Ke bone khukhwana eno mo dikhoutu tse tharo tse di farologaneng: setshodi, mokgobo, le letlhomeso, tsotlhe di farologane. Le fa go ntse jalo, khukhwana eno e tshwana gotlhelele. Lenaneo le le latlhegang le kgaolwa mo ntlheng ya setshodi. Kana e bonala ka fa morago ga diteng tse di tshwanetseng go nna ka fa tlase ga yone ka tsela e e utlwalang. Kana e dira sentle go fitlha modirisi a tsamaya, mme morago ga moo e bo e kgweetsa. O fitlhelela z-index: 9999. Ka dinako tse dingwe e a thusa, mme ka dinako tse dingwe ga e dire sepe gotlhelele. Go sa tlhomamang goo ke sesupo sa ntlha sa gore go diragala sengwe se se tseneletseng. Lebaka la go bo e nna e boa ke gore go amega ditsamaiso tse tharo tse di farologaneng tsa sebatli, mme bontsi jwa batlhami ba tlhaloganya nngwe le nngwe ka boyone mme ga ba ke ba akanya ka se se diragalang fa boraro jwa tsone bo thulana: go phophoma, go kgobokanya diteng, le go nna le diboloko.
Fa o setse o tlhaloganya kafa boraro jwa tsone bo dirisanang ka gone, mekgwa ya go palelwa e emisa go ikutlwa e sa rulaganngwa. Tota e bile, di nna tse di ka bonelwang pele. Dilo Tse Tharo Tse Tota di Bakang Seno A re lebeleleng nngwe le nngwe ya dintlha tseo ka botlalo. Bothata jwa go elela Fa o seta go phophoma: go fitlhegile, go phophoma: go tsamaya, kgotsa go phophoma: ka go itirisa mo elementeng, sebatli se tla kgaola sengwe le sengwe se se fetang melelwane ya sone, go akaretsa le ditlogolwana tse di beilweng sentle. .setshodi sa go tsamaisa { go phophoma: itiriso; boleele: 300px; /* Se se tla kgaola lenaneo le le latlhegang, sekhutlo se se feletseng */ }
.setlhogo { boemo: bo feletseng; /* Ga go kgathalesege -- e sa ntse e kgaotswe ke .scroll-setshodi */ }
Seo se ne sa nkgakgamatsa lekgetlo la ntlha fa ke ne ke kopana le yone. Ke ne ke tsere boemo: absolute e ne e tla dira gore elemente e se ka ya kgaolwa ke setshodi. Ga e dire jalo. Mo tirisong, seo se raya gore menyu o o beilweng sentle o ka kgaolwa ke mogologolwane mongwe le mongwe yo o nang le boleng jwa go phophoma jo bo sa bonaleng, le fa mogologolwane yoo e se boloko e e nang le menyu. Go poma le go baya ke ditsamaiso tse di farologaneng. Di thulana fela ka ditsela tse di lebegang di sa rulaganngwa gotlhelele go fitlha o di tlhaloganya ka bobedi.
Sekao sa React se se dirisang createPortal ke seno:
romelateng { tlhamaPortal } go tswa go 'tsibogo-dom'; import { tirisoBoemo, tirisoPhelelo, tirisoRef } go tswa go 'tsiboga';
tiro Dropdown ({ anchorRef, e Butswe, bana }) { const [boemo, setaBoemo] = dirisaBoemo ({ kwa godimo: 0, molemeng: 0 });
dirisaPhelelo(() => { fa (e Butswe && Tshupo ya tshetledi ya ga jaanong) { const rect = tshetledi ya Ref.ga jaana.bonaRect yaTlelaente e e Bofang (); setaBoemo({ kwa godimo: rect.tlase + fensetere.phetoloY, molemeng: rect.molemeng + fensetere.phetoloX, }); } }, [eButswe, tshetledi Ref]);
fa (!e Butswe) e busetsa lefela;
busetsa tlhamaPortal(
Mme, e le ruri, ga re ka ke ra itlhokomolosa phitlhelelo. Dikarolo tse di tlhomameng tse di tlhagelelang mo godimo ga diteng di santse di tshwanetse go fitlhelelwa ke khiiboto. Fa tatelano ya tsepamiso e sa tsene ka tlholego mo lenaaneng le le latlhegang le le tlhomameng, o tla tlhoka go le laola o dirisa khoutu. Gape go botlhokwa go tlhola gore a ga e nne mo godimo ga diteng tse dingwe tse di dirisanang mme go se na tsela ya go di kgaphela kwa thoko. Eo e go loma mo tekong ya keyboard. Go Bewa ga Setshetledi sa CSS: Kwa ke Akanyang Seno se Lebile Kwa Go Baya Setshetledi sa CSS ke tsela e ke e kgatlhegelang thata gone jaanong. Ke ne ke sa tlhomamisege gore tota go ne go ka dirisiwa bokae fa ke ne ke e leba la ntlha. E go letla go bolela kamano fa gare ga dropdown le trigger ya yone ka tlhamalalo mo CSS, mme sebatli se tshwara ditekanyetso. .setlhotlheletsi { leina la tshetledi: --setlhotlheletsi sa me; }
.menyu o o latlhegang { boemo: bo feletseng; boemo-tshetledi: --setlhotlheletsi sa me; kwa godimo: tshetledi ya (tlase); molema: tshetledi (mo molemeng); boemo-leka-go boela morago: phetolo-boloko, phetolo-mo moleng; }
Thepa ya boemo-leka-fallbacks ke e e dirang gore seno se nne botlhokwa go se dirisa go feta palo ya diatla. Sebatli se leka dipeo tse dingwe pele se ineela, ka jalo dropdown e e kwa tlase ga lefelo la pono e fetogela kwa godimo ka go itirisa go na le gore e kgaolwe. Tshegetso ya sebatli e tiile mo dibatling tse di theilweng mo Chromium mme e a gola mo Safari. Firefox e tlhoka tlatso e ntsi. Sephuthelwana sa go baya tshetledi ya @oddbird/css-se akaretsa dintlha tsa konokono. Ke tlhasetse dikgetsi tsa thulaganyo ka yone tse di neng di tlhoka dipoelo tse ke neng ke sa di lebelela, ka jalo e tseye jaaka tokafatso e e tswelelang pele kgotsa e kopanye leJavaScript ya go boela morago ya Firefox. Ka bokhutshwane, e solofetsa mme ga e ise e nne ya lefatshe lotlhe. Leka mo dibatlising tsa gago tse di ikaeletsweng. Mme mabapi le phitlhelelo, go bolela kamano ya pono mo CSS ga go bolelele setlhare sa phitlhelelo sepe. aria-ditaolo, aria-atolositswe, aria-haspopup - karolo eo e ntse e le ho wena. Ka dinako tse dingwe go baakanngwa ke go sutisa elemente fela Pele ga ke fitlhelela kgoro kgotsa ke dira dipalelo tsa ditekanyetso, ka metlha ke botsa potso e le nngwe pele: A tota dropdown eno e tlhoka go nna mo teng ga setshodi sa momeno? Fa e sa dire jalo, go sutisetsa tshwao kwa sephuthelong sa maemo a a kwa godimo go fedisa bothata gotlhelele, go se na JavaScript le dipalelo tsa ditekanyetso. Seno ga se ka metlha se kgonegang. Fa konopo le dropdown di akareditswe mo karolong e le nngwe, go tsamaisa e nngwe kwantle ga e nngwe go raya go akanya gape ka API yotlhe. Mme fa o kgona go e dira, ga go na sepe se o ka se baakanyang. Bothata ga bo yo. Se CSS ya Segompieno e Sa Ntseng e sa Se Rarabolole CSS e tlile kgakala fano, mme go santse go na le mafelo a e go swabisang. Boemo: dikgang tse di tlhomamisitsweng le tsa go fetola di santse di le teng. E mo spec ka boomo, se se rayang gore ga go na tharabololo ya CSS e e leng teng. Fa e le gore o dirisa laeborari ya ditshwantsho tse di tshelang e e phuthelang thulaganyo ya gago mo elementeng e e fetotsweng, o boetse o tlhoka di-portal kgotsa go baya tshetledi. Go Bewa ga Setshetledi sa CSS go a solofetsa, mme go le gosha. Jaaka go umakilwe pelenyana, Firefox e sa ntse e tlhoka polyfill ka nako e ke kwalang seno ka yone. Ke tlhodile dikgetsi tsa thulaganyo ka yone tse di neng di tlhoka dipoelo tse ke neng ke sa di lebelela. Fa e le gore o tlhoka boitshwaro jo bo tshwanang mo dibatlising tsotlhe gompieno, o sa ntse o batla JavaScript mo dikarolong tse di boferefere. Tlaleletso e ke e fetotseng tsamaiso ya me ya tiro ke HTML Popover API, e jaanong e leng teng mo dibatling tsotlhe tsa segompieno. Dielemente tse di nang le tshwano ya popover di tlhagisiwa mo llageng e e kwa godimo ya sebatli, kwa godimo ga sengwe le sengwe, go sa tlhokege go bewa ga JavaScript.
Go tshaba go tshwara, go kgaola-fa-o-tobetsa-kwa ntle, le bokao jo bo tiileng jwa phitlhelelo di tla mahala mo dilong tse di jaaka dintlha tsa didirisiwa, di-widget tsa go senola, le di-overlay tse di bonolo. Ke sedirisiwa sa ntlha se ke se tshwarang gone jaanong. Seo se builwe, ga se rarabolole go bewa. E rarabolola go tlhoma dikarolo. O sa ntse o tlhoka go baya tshetledi kgotsa JavaScript go tlhamalatsa popover le setlhotlheletsi sa yone. API ya Popover e tshwaragane le go tsenya dikarolo. Go bewa ga tshetledi go tshwara go bewa. Fa di dirisiwa mmogo, di akaretsa bontsi jwa dilo tse o neng o ka di fitlhelela pele gore laeborari e di dire. Kaedi ya Tshwetso ya Boemo jwa Gago Morago ga go feta mo go seno sotlhe ka tsela e e thata, ke ka fa ke akanyang ka teng ka tlhopho jaanong.
Dirisa portal. Ke tla dirisa seno fa setlhotlheletsi se nna kwa teng mo ditshoding tsa memeno tse di tsenngwang. Ke sebedisitse paterone ena bakeng sa dimenyu tsa ketso ya tafole mme ka e kopanya le ho tsosolosa tsepamiso le ditshekatsheko tsa phihlello. Ke kgetho e e ikanyegang thata, mme nako ya tekanyetsokabo ya go tsenya dithapo tse di oketsegileng. Dirisa boemo jo bo tlhomameng. Seno ke sa fa o le mo JavaScript ya vanilla kgotsa mo letlhomesong le le botlhofo mme o ka tlhomamisa gore ga go na mogologolwane ope yo o dirisang diphetogo kgotsa ditlhotlhi. Go bonolo go seta e bile go bonolo go baakanya diphoso, fa fela kganelo eo e le nngwe e ntse e le teng. Dirisa CSS Anchor Positioning.Fitlhelela seno fa tshegetso ya sebatli sa gago e go letla. Fa go tlhokega tshegetso ya Firefox, e kopanye le polyfill ya @oddbird. Ke fa polatefomo e felelang e lebile teng mme e tla feleletsa e le tsela ya gago ya go ya. Rulaganya sešwa DOM.Dirisa seno fa thulaganyo e e letla, mme o batla go raraana ga nako ya go dira ga lefela. Ke dumela gore e ka tswa e le kgetho e e sa tseelweng kwa tlase thata. Kopanya dipaterone.Dira seno fa o batla go baya tshetledi jaaka tsela ya gago ya konokono, e e kopantsweng le fallback ya JavaScript ya dibatli tse di sa tshegediweng. Kapa kgoro ya ho beha DOM e kopantsweng le getBoundingClientRect () bakeng sa ho nepahala ha ho hokahanya.
Bokhutlo Ke ne ke tlwaetse go tshwara khukhwana eno e le kgang ya nako e le nngwe — sengwe se nka se baakanyang le go tswelela pele mo go sone. Mme fa ke sena go nna le yone nako e telele go tlhaloganya ditsamaiso tsotlhe tse tharo tse di amegang — go kgaola go phophoma, go kgobokanya diteng, le go nna le diboloko — e ne ya emisa go ikutlwa e sa rulaganngwa. Ke ne ke kgona go leba dropdown e e thubegileng mme ka bonako ke latedisa gore ke mogologolwane ofe yo o neng a ikarabela. Phetogo eo ya tsela e ke neng ke bala DOM ka yone e ne e le yone e e neng ya nkisa tota. Ga go na karabo e le nngwe e e siameng. Se ke neng ke se fitlhelela se ne se ikaegile ka se ke neng ke ka se laola mo codebase: di-portal fa setlhare sa bagologolwane se ne se sa bonelwa kwa pele; go tlhomamisa boemo fa go ne go le phepa e bile go le bonolo; go tsamaisa elemente fa go ne go se na sepe se se neng se nkemisa; le go baya tshetledi jaanong,moo nka kgonang. Le fa o ka feleletsa o tlhophile eng, o se ka wa tsaya go fitlhelega jaaka kgato ya bofelo. Mo maitemogelong a me, ke gone fa e tlolwa. Dikamano tsa ARIA, taolo ya tsepamiso, boitshwaro ba khiiboto — tseo ha di pholeshe. Ke karolo ya se se dirang gore selo se dire. Leba khoutu ya motswedi e e feletseng mo repo ya me ya GitHub. Puiso e e Tswelelang Tse ke ditshupiso tse ke neng ke nna ke boela kwa go tsone fa ke ntse ke dira seno:
Bokao jwa go Kgobokanya (MDN) "Kaedi ya go Beya Setshetledi sa CSS", Juan Diego Rodriguez “Go Simolola ka API ya Popover”, Nako ya Modimo Aburu UI e e phaphametseng (ui.com e e phaphametseng) Go elela ga CSS (MDN)