Yanayin kusan koyaushe iri ɗaya ne, wanda shine tebur na bayanai a cikin akwati mai gungurawa. Kowane jere yana da menu na ayyuka, ƙaramin zaɓuka tare da wasu zaɓuɓɓuka, kamar Shirya, Kwafi, da Share. Kuna gina shi, da alama yana aiki daidai a keɓe, sannan wani ya sanya shi a cikin wannan div ɗin da za a iya jujjuya shi kuma abubuwa sun lalace. Na ga wannan ainihin kwaro a cikin nau'ikan codebases guda uku: akwati, tari, da tsarin, duk daban-daban. Ko da yake, kwaro iri ɗaya ne. Zazzage zazzagewa yana yanke a gefen kwantena. Ko yana nunawa a bayan abun ciki wanda ya kamata a hankali ya kasance ƙasa da shi. Ko yana aiki da kyau har sai mai amfani ya gungurawa, sannan ya zarce. Kuna isa ga z-index: 9999. Wani lokaci yana taimakawa, amma wasu lokuta ba ya yin komai. Wannan rashin daidaituwa shine farkon alamar cewa wani abu mai zurfi yana faruwa. Dalilin da ya sa ya ci gaba da dawowa shine tsarin tsarin bincike daban-daban guda uku sun haɗa, kuma yawancin masu haɓakawa suna fahimtar kowannensu da kansa amma ba su taba tunanin abin da zai faru ba lokacin da dukan ukun suka yi karo: ambaliya, tari, da kuma dauke da tubalan.

Da zarar kun fahimci yadda duk ukun ke hulɗa, hanyoyin gazawar suna daina jin bazuwar. A gaskiya ma, sun zama abin iya faɗi. Abubuwa Uku A Haƙiƙa Suke Haɗa Wannan Bari mu dubi kowane ɗayan waɗannan abubuwan daki-daki. Matsala mai Yawa Lokacin da kuka saita ambaliya: ɓoye, ambaliya: gungura, ko ambaliya: auto a kan wani abu, mai binciken zai zazzage duk wani abu da ya wuce iyakarsa, gami da cikakken zuriyarsa. gungura-kwantena { ambaliya: auto; tsawo: 300px; /* Wannan zai cire zazzagewar, cikakken tsayawa */ }

. saukarwa { matsayi: cikakke; /* Ba komai -- har yanzu an yanke ta .scroll-container */ }

Hakan ya ba ni mamaki a karon farko da na ci karo da shi. Na ɗauki matsayi: cikakke zai bar wani abu ya tsere daga tsinken akwati. Ba ya. A aikace, wannan yana nufin za a iya yanke menu mai cikakken matsayi ta kowane kakanni da ke da ƙimar ambaliya marar ganuwa, ko da ma wannan kakan ba shine toshe menu ba. Yankewa da sakawa tsarin daban ne. Suna faruwa kawai suna yin karo ta hanyoyi masu kama da bazuwar har sai kun fahimci duka biyun.

Ga misalin React ta amfani da createPortal:

shigo da {create Portal} daga 'react-dom'; shigo da {useState, useEffect, useRef} daga 'amsa';

aikin Dropdown ({anchorRef, isOpen, yara}) { const [matsayi, setPosition] = amfaniState ({ saman: 0, hagu: 0});

amfaniEffect(() => { idan (isOpen && anchorRef.current) { const rect = anchorRef.current.getBoundingClientRect(); Matsayi ({ saman: rect.bottom + taga.scrollY, hagu: madaidaici.hagu + taga.scrollX, }); } }, [isOpen, anchorRef]);

idan (!isOpen) dawo banza;

dawo CreatePortal (

, daftarin aiki.jiki ); }

Kuma, ba shakka, ba za mu iya watsi da samun dama ba. Kafaffen abubuwan da suka bayyana akan abun ciki dole ne su kasance masu iya isa ga madannai. Idan odar mayar da hankali ba ta dabi'a ta motsa cikin ƙayyadaddun zaɓuka ba, kuna buƙatar sarrafa ta ta amfani da lamba. Hakanan yana da kyau a duba cewa baya zama akan sauran abubuwan da ke mu'amala da shi ba tare da wata hanya ta watsar da shi ba. Wannan yana cizon ku a gwajin madannai. Matsayin Anchor CSS: Inda Ina tsammanin Wannan yana kan hanya Matsayin CSS Anchor shine jagorar da na fi sha'awar a yanzu. Ban tabbata nawa ne ainihin abin amfani ba lokacin da na fara dubansa. Yana ba ka damar bayyana alaƙar da ke tsakanin zazzagewa da kuma jawo ta kai tsaye a cikin CSS, kuma mai binciken yana sarrafa haɗin gwiwar. .hargitsi { anga-suna: --na-fasa; }

.zaɓi-menu { matsayi: cikakke; matsayi-anga: --na-fasa; saman: anga (kasa); hagu: anga (hagu); matsayi-gwada-fadawa: juye-block, juye-layi; }

Matsakaicin-gwada-fallbacks dukiya shine abin da ya sa wannan ya cancanci amfani fiye da lissafin hannu. Mai binciken yana gwada madadin wurare kafin ya daina, don haka zazzagewa a kasan wurin kallo yana juyewa sama ta atomatik maimakon yankewa. Taimakon mai lilo yana da ƙarfi a cikin masu bincike na tushen Chromium kuma yana girma a cikin Safari. Firefox yana buƙatar polyfill. Kunshin @oddbird/css-anga-matsayin matsayi ya ƙunshi ainihin ƙayyadaddun bayanai. Na buge shari'o'in shimfidawa tare da shi waɗanda ke buƙatar koma baya da ban yi tsammani ba, don haka ɗaukar shi azaman haɓakawa na ci gaba ko haɗa shi daJavaScript fallback don Firefox. A taƙaice, alƙawarin amma ba duniya ba tukuna. Gwada a cikin maƙallan burauzan ku. Kuma dangane da samun dama, ayyana dangantakar gani a CSS baya gaya wa bishiyar samun damar komai. aria-controls, aria-fadada, aria-haspopup - wannan bangaren yana kanku har yanzu. Wani lokaci Gyaran Yana Matsar da Abun Kafin in isa ga tashar yanar gizo ko yin lissafin daidaitawa, koyaushe ina yin tambaya ɗaya da farko: Shin wannan zazzagewar yana buƙatar zama a cikin akwati na gungurawa? Idan ba haka ba, matsar da alamar zuwa babban abin rufe fuska yana kawar da matsalar gaba ɗaya, ba tare da JavaScript ba kuma babu lissafin daidaitawa. Wannan ba koyaushe yana yiwuwa ba. Idan maballin da zazzagewa an lullube su a cikin sassa ɗaya, motsi ɗaya ba tare da wata hanyar sake tunani gaba ɗaya API ba. Amma lokacin da za ku iya yin shi, babu wani abin da za a gyara. Matsalar ba ta wanzu. Abin da CSS na Zamani Har yanzu Ba Ya Warware CSS ya yi nisa a nan, amma har yanzu akwai wuraren da zai ba ku damar. Matsayin: gyarawa da canza al'amurran da suka shafi har yanzu suna nan. Yana cikin ƙayyadaddun ƙayyadaddun niyya, wanda ke nufin babu tsarin CSS. Idan kana amfani da ɗakin karatu mai rairayi wanda ke naɗe shimfidar wuri a cikin abin da aka canza, kun dawo don buƙatar tashoshi ko sanya anka. Matsayin CSS Anchor yana da alƙawarin, amma sabo. Kamar yadda aka ambata a baya, Firefox har yanzu yana buƙatar polyfill a lokacin da nake rubuta wannan. Na buge shari'o'in gefen shimfidawa da shi waɗanda ke buƙatar koma baya da ban yi tsammani ba. Idan kuna buƙatar daidaiton ɗabi'a a duk masu bincike a yau, har yanzu kuna isa ga JavaScript don ɓangarori masu banƙyama. Ƙarin da na canza ainihin aikina shine HTML Popover API, yanzu ana samunsa a duk masu bincike na zamani. Abubuwan da ke da sifa mai fa'ida suna bayarwa a saman saman mai binciken, sama da komai, ba tare da sanya JavaScript da ake buƙata ba.

Gudanar da tserewa, korar-kan-danna-waje, da ingantattun ilimin tarukan samun dama suna zuwa kyauta don abubuwa kamar tukwici na kayan aiki, na'urori masu bayyanawa, da mai sauƙi. Shine kayan aiki na farko da na isa yanzu. Wannan ya ce, ba ya warware matsayi. Yana warware layering. Har yanzu kuna buƙatar sakawa anka ko JavaScript don daidaita popover zuwa farar sa. Popover API yana kula da shimfidawa. Matsayin anga yana ɗaukar jeri. An yi amfani da su tare, suna ɗaukar mafi yawan abin da za ku iya kaiwa ga ɗakin karatu a baya. Jagoran Shawara Don Halin ku Bayan na bi duk wannan hanya mai wahala, ga yadda nake tunani a zahiri game da zabi a yanzu.

Yi amfani da portal. Zan yi amfani da wannan lokacin da mai faɗakarwa ke rayuwa mai zurfi a cikin kwantena na gungurawa. Na yi amfani da wannan tsarin don menus ayyuka na tebur kuma na haɗa shi tare da maido da mayar da hankali da kuma duba damar shiga. Yana da zaɓi mafi aminci, amma lokacin kasafin kuɗi don ƙarin wayoyi. Yi amfani da kafaffen matsayi.Wannan na lokacin da kake cikin Vanilla JavaScript ko tsarin nauyi mai nauyi kuma zai iya tabbatar da cewa babu wani kakanni da ya shafi canji ko tacewa. Yana da sauƙi don saitawa kuma mai sauƙi don cirewa, muddin wannan ƙuntatawa ta riƙe. Yi amfani da Matsayin Anchor CSS. Kai ga wannan lokacin da tallafin burauzan ku ya ba shi damar. Idan ana buƙatar tallafin Firefox, haɗa shi da @oddbird polyfill. Wannan shine inda dandali ke tafiya a ƙarshe kuma a ƙarshe zai zama hanyar ku. Sake fasalin DOM. Yi amfani da wannan lokacin da gine-ginen ya ba shi izini, kuma kuna son sikirin lokacin aiki. Na yi imani yana iya zama mafi ƙarancin zaɓi. Haɗa alamu.Yi wannan lokacin da kuke son sanya anka azaman hanyar farko, haɗe tare da faɗuwar JavaScript don masu bincike mara tallafi. Ko tashar tashar DOM mai haɗe tare da samunBoundingClientRect() don daidaita daidaito.

Kammalawa Na kasance ina ɗaukar wannan kwaro azaman batun kashe-kashe - wani abu don faci da ci gaba daga. Amma da zarar na zauna tare da shi tsawon lokaci don fahimtar duk tsarin ukun da ke tattare da shi - zubar da ruwa mai yawa, abubuwan da ke tattare da abubuwan da ke dauke da tubalan - ya daina jin bazuwar. Zan iya kallon faifan da aka karye nan da nan na gano wane kakanni ne ke da alhakin. Canjin canjin yadda na karanta DOM shine ainihin abin ɗauka. Babu amsa daidai guda ɗaya. Abin da na kai ga ya dogara da abin da zan iya sarrafawa a cikin codebase: portals lokacin da bishiyar kakanni ba ta da tabbas; kafaffen matsayi lokacin da yake mai tsabta da sauƙi; motsi da kashi lokacin da babu abin da ya hana ni; da anga positioning yanzu,inda zan iya. Duk abin da kuka ƙare zabar, kar a ɗauki samun dama a matsayin mataki na ƙarshe. A cikin kwarewata, daidai lokacin da aka tsallake shi ke nan. Dangantakar ARIA, kulawar mayar da hankali, halayyar madannai - waɗancan ba goge ba ne. Suna daga cikin abin da ke sa abin ya yi aiki a zahiri. Duba cikakken lambar tushe a cikin GitHub repo dina. Karin Karatu Waɗannan su ne nassoshi da na ci gaba da dawowa kansu yayin aiki ta wannan:

Maganar Stacking (MDN) "Jagorar Matsayin Anchor CSS", Juan Diego Rodriguez "Farawa Tare da Popover API", Godstime Aburu UI mai iyo (floating-ui.com) CSS ya cika (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