ሁኔታው ሁልጊዜ ማለት ይቻላል ተመሳሳይ ነው፣ ይህም በጥቅልል መያዣ ውስጥ ያለው የውሂብ ሰንጠረዥ ነው። እያንዳንዱ ረድፍ የተግባር ሜኑ አለው፣ ትንሽ ተቆልቋይ ከአንዳንድ አማራጮች ጋር፣ እንደ አርትዕ፣ ብዜት እና ሰርዝ። አንተ ገንብተሃል፣ በተናጥል በትክክል የሚሰራ ይመስላል፣ እና አንድ ሰው በዚያ ሊጠቀለል የሚችል ዲቪ ውስጥ ያስቀምጠዋል እና ነገሮች ይፈርሳሉ። ይህንን ትክክለኛ ስህተት በሶስት የተለያዩ የኮድ ቤዝ ውስጥ አይቻለሁ፡ መያዣው፣ ቁልል እና ማዕቀፉ ሁሉም የተለያዩ። ስህተቱ ግን ሙሉ በሙሉ ተመሳሳይ ነው። ቁልቁል በመያዣው ጠርዝ ላይ ይጣበቃል. ወይም በምክንያታዊነት ከሱ በታች መሆን ያለበትን ይዘት ከኋላ ያሳያል። ወይም ተጠቃሚው እስኪሸብለል እና ከዚያም እስኪንሳፈፍ ድረስ በጥሩ ሁኔታ ይሰራል። እርስዎ ለ z-index ደርሰዋል: 9999. አንዳንድ ጊዜ ይረዳል, ነገር ግን ሌላ ጊዜ ምንም አያደርግም. ያ አለመመጣጠን ጠለቅ ያለ ነገር እየተፈጠረ እንደሆነ የመጀመሪያው ፍንጭ ነው። ተመልሶ የሚመጣበት ምክንያት ሶስት የተለያዩ የአሳሽ ሲስተሞች ስለተካተቱ ነው፣ እና አብዛኛዎቹ ገንቢዎች እያንዳንዳቸውን በራሳቸው ይገነዘባሉ ነገር ግን ሦስቱም ሲጋጩ ምን እንደሚፈጠር በጭራሽ አያስቡ፡ ከመጠን በላይ መፍሰስ፣ አውድ መደራረብ እና ብሎኮችን የያዙ።
አንዴ ሦስቱም እንዴት እንደሚገናኙ ከተረዱ፣ የውድቀት ሁነታዎች የዘፈቀደ ስሜትን ያቆማሉ። እንደ እውነቱ ከሆነ, ሊተነብዩ የሚችሉ ይሆናሉ. በእውነቱ ይህንን የሚያስከትሉ ሶስት ነገሮች እያንዳንዳቸውን እቃዎች በዝርዝር እንመልከታቸው. የትርፍ ፍሰት ችግር የትርፍ ፍሰት: የተደበቀ, የተትረፈረፈ: ማሸብለል ወይም የትርፍ ፍሰት: በአንድ ኤለመንት ላይ በራስ-ሰር፣ አሳሹ ከገደቡ በላይ የሚዘልቅ ማንኛውንም ነገር ይቆርጣል፣ ፍፁም የተቀመጡ ዘሮችን ጨምሮ። ማሸብለል-መያዣ { መብዛሕትኡ፡ auto; ቁመት: 300 ፒክስል; /* ይህ ተቆልቋዩን ይቆርጣል፣ ሙሉ ማቆሚያ */ }
ተቆልቋይ { ቦታ፡ ፍፁም; /* ምንም አይደለም -- አሁንም በ .ጥቅልል-container የተቀነጨበ */ }
ለመጀመሪያ ጊዜ ስሮጥበት አስገረመኝ። ቦታ ገምቼ ነበር፡ ፍፁም አንድ አካል ከእቃ መቆራረጥ እንዲያመልጥ ያስችለዋል። አያደርግም። በተግባር፣ ያ ማለት ፍጹም የተቀመጠ ምናሌ የማይታይ የትርፍ ፍሰት ዋጋ ባለው በማንኛውም ቅድመ አያት ሊቆረጥ ይችላል፣ ምንም እንኳን ያ ቅድመ አያት የማውጫው ማውጫው ባይሆንም። መቆንጠጥ እና አቀማመጥ የተለዩ ስርዓቶች ናቸው. ሁለቱንም እስክትረዳ ድረስ ሙሉ በሙሉ በዘፈቀደ በሚመስሉ መንገዶች ይጋጫሉ።
CreatePortalን በመጠቀም የምላሽ ምሳሌ ይኸውና፡
ከ'react-dom' አስመጣ {creaPortal}; አስመጣ {useState, useEffect, useRef} ከ'react';
ተግባር Dropdown ({ anchorRef, isOpen, children }) { const [ቦታ, setPosition] = useState ({ከላይ: 0, ግራ: 0});
useEffect(() => { ከሆነ (የተከፈተ እና anchorRef.current) { const rect = anchorRef.current.getBoundingClientRect(); አቀማመጥ ({ ከላይ፡ rect.bottom + window.scrollY፣ ግራ፡ rect.left + window.scrollX፣ }); } }፣ [isOpen, anchorRef]);
ከሆነ (! isOpen) መመለስ null;
መፍጠር ፖርታል መመለስ
እና፣ በእርግጥ፣ ተደራሽነትን ችላ ማለት አንችልም። በይዘት ላይ የሚታዩ ቋሚ አካላት አሁንም በቁልፍ ሰሌዳ ሊደረስባቸው የሚችሉ መሆን አለባቸው። የትኩረት ትዕዛዙ በተፈጥሮው ወደ ቋሚ ተቆልቋይ ካልገባ፣ ኮድ በመጠቀም ማስተዳደር ያስፈልግዎታል። እንዲሁም ለማሰናበት ምንም መንገድ በሌላ በይነተገናኝ ይዘት ላይ እንደማይቀመጥ መፈተሽ ተገቢ ነው። ያ በቁልፍ ሰሌዳ ሙከራ ላይ ነክሶታል። የCSS መልህቅ አቀማመጥ፡ ይህ እየሄደ ነው ብዬ ወደማስበው የCSS መልህቅ አቀማመጥ አሁን በጣም የምፈልገው አቅጣጫ ነው። ለመጀመሪያ ጊዜ ስመለከት የዝርዝሩ ምን ያህል በትክክል ጥቅም ላይ እንደሚውል እርግጠኛ አልነበርኩም። በተቆልቋይ እና በሲኤስኤስ መካከል ያለውን ግንኙነት በቀጥታ እንዲገልጹ ያስችልዎታል፣ እና አሳሹ መጋጠሚያዎቹን ይቆጣጠራል። ቀስቅሴ { መልህቅ-ስም: --የእኔ-ቀስቃሽ; }
ተቆልቋይ-ምናሌ { ቦታ፡ ፍፁም; አቀማመጥ-መልሕቅ: --የእኔ-ቀስቃሽ; ከላይ: መልህቅ (ታች); ግራ: መልህቅ (በግራ); አቀማመጥ-ሙከራ-ውድቀት: መገልበጥ-ብሎክ, መገልበጥ-ውስጥ መስመር; }
ይህ በእጅ በሚሰራ ስሌት ላይ ጥቅም ላይ እንዲውል የሚያደርገው የቦታ-ሙከራ-መውደቅ ንብረቱ ነው። አሳሹ ተስፋ ከመቁረጥ በፊት አማራጭ ምደባዎችን ይሞክራል፣ ስለዚህ ከመመልከቻው ስር ያለው ተቆልቋይ ከመቁረጥ ይልቅ ወደ ላይ ይገለበጣል። የአሳሽ ድጋፍ በChromium ላይ በተመሰረቱ አሳሾች እና በSafari እያደገ ነው። ፋየርፎክስ ፖሊ ሙሌት ያስፈልገዋል። የ@oddbird/css-anchor-positioning ጥቅል ዋናውን ዝርዝር ይሸፍናል። ያላሰብኩትን ውድቀት የሚያስፈልጋቸውን የአቀማመጥ ጠርዝ ጉዳዮችን መታሁበት፣ ስለዚህ እንደ ተራማጅ ማሻሻያ ያዙት ወይም ከጃቫ ስክሪፕት ለፋየርፎክስ መመለስ። ባጭሩ ተስፋ ሰጭ ግን ገና ሁለንተናዊ አይደለም። በእርስዎ ዒላማ አሳሾች ውስጥ ይሞክሩ። እና ተደራሽነትን በተመለከተ፣ በCSS ውስጥ ምስላዊ ግንኙነትን ማወጅ ለተደራሽነት ዛፉ ምንም አይናገርም። aria-controls፣ aria-expanded፣ aria-haspopup - ያ ክፍል አሁንም በእርስዎ ላይ ነው። አንዳንድ ጊዜ ማስተካከያው ኤለመንቱን ማንቀሳቀስ ብቻ ነው። ወደ ፖርታል ከመድረሴ ወይም የተቀናጀ ስሌት ከመሥራቴ በፊት ሁል ጊዜ አንድ ጥያቄ እጠይቃለሁ፡ ይህ ተቆልቋይ በእውኑ በጥቅልል መያዣ ውስጥ መኖር አለበት? ይህ ካልሆነ, ምልክት ማድረጊያውን ወደ ከፍተኛ ደረጃ ማሸግ ችግሩን ሙሉ በሙሉ ያስወግዳል, ያለ ጃቫ ስክሪፕት እና ምንም የተቀናጁ ስሌቶች የሉም. ይህ ሁልጊዜ የሚቻል አይደለም. አዝራሩ እና ተቆልቋዩ በአንድ አካል ውስጥ ከታሸጉ፣ አንዱን ያለሌላው ማንቀሳቀስ መላውን ኤፒአይ እንደገና ማሰብ ማለት ነው። ግን ማድረግ ሲችሉ, ለማረም ምንም ነገር የለም. ችግሩ ብቻ የለም። ዘመናዊው CSS አሁንም የማይፈታው CSS እዚህ ረጅም መንገድ ተጉዟል፣ ነገር ግን አሁንም የሚያወርዱዎት ቦታዎች አሉ። ቦታው፡ የተስተካከሉ እና የመቀየር ጉዳዮች አሁንም አሉ። እሱ ሆን ተብሎ በዝርዝሩ ውስጥ ነው ፣ ይህ ማለት ምንም የ CSS መፍትሄ የለም ማለት ነው። የአኒሜሽን ቤተ-መጽሐፍት እየተጠቀሙ ከሆነ አቀማመጥዎን በተለወጠ አካል ውስጥ ያጠቃለለ፣ ወደ ፖርታል ወይም መልህቅ አቀማመጥ ተመልሰዋል። የCSS መልህቅ አቀማመጥ ተስፋ ሰጪ ነው፣ ግን አዲስ ነው። ቀደም ሲል እንደተገለፀው ፋየርፎክስ ይህንን በምጽፍበት ጊዜ አሁንም ፖሊ ሙሌት ያስፈልገዋል. ያላሰብኳቸውን ውድቀት የሚያስፈልጋቸው የአቀማመጥ ጠርዝ ጉዳዮችን መታሁበት። ዛሬ በሁሉም አሳሾች ላይ ወጥነት ያለው ባህሪ ከፈለጉ፣ አሁንም ለተንኮል ክፍሎቹ ጃቫስክሪፕትን እየደረሱ ነው። የስራ ፍሰቴን የቀየርኩት ተጨማሪው አሁን በሁሉም ዘመናዊ አሳሾች ውስጥ የሚገኘው HTML Popover API ነው። ብቅ-ባይ ባህሪ ያላቸው ንጥረ ነገሮች በአሳሹ የላይኛው ንብርብር ከሁሉም ነገር በላይ፣ ምንም የጃቫስክሪፕት አቀማመጥ አያስፈልግም።
የማምለጫ አያያዝ፣ ክሊክ-ውጭን ማሰናበት እና ጠንካራ የተደራሽነት ትርጉሞች እንደ መሳሪያ ምክሮች፣ ይፋ መግብሮች እና ቀላል ተደራቢዎች በነጻ ይመጣሉ። አሁን የምደርስበት የመጀመሪያው መሳሪያ ነው። ያ ማለት, አቀማመጥን አይፈታውም. መደራረብን ይፈታል። ብቅ ባይን ወደ ቀስቅሴው ለማስማማት አሁንም መልህቅ አቀማመጥ ወይም ጃቫስክሪፕት ያስፈልግዎታል። የፖፖቨር ኤፒአይ መደራረብን ይቆጣጠራል። መልህቅ አቀማመጥ አቀማመጥን ይቆጣጠራል. አንድ ላይ ጥቅም ላይ ሲውሉ፣ ከዚህ ቀደም ቤተ-መጽሐፍት እንዲያደርጉ ከደረሱት አብዛኛዎቹን ይሸፍናሉ። ለእርስዎ ሁኔታ የውሳኔ መመሪያ ይህን ሁሉ በከባድ መንገድ ካሳለፍኩ በኋላ፣ አሁን ስለ ምርጫው እንዴት እንደማስበው ይኸው ነው።
ፖርታል ተጠቀም።ይህን የምጠቀምበት ቀስቅሴው በጎጆ ውስጥ በተሸበሸበሸበሸበ ኮንቴይነሮች ውስጥ ሲኖር ነው። ይህንን ስርዓተ-ጥለት ለሠንጠረዥ የድርጊት ሜኑዎች ተጠቀምኩ እና ከትኩረት እድሳት እና የተደራሽነት ፍተሻዎች ጋር አጣምሬዋለሁ። በጣም አስተማማኝ አማራጭ ነው, ነገር ግን ለተጨማሪ ሽቦዎች የበጀት ጊዜ. ቋሚ አቀማመጥን ተጠቀም ይህ በቫኒላ ጃቫ ስክሪፕት ወይም ቀላል ክብደት ባለው ማዕቀፍ ውስጥ ስትሆን እና ምንም አይነት ቅድመ አያት ለውጦችን ወይም ማጣሪያዎችን እንደማይተገበር ማረጋገጥ ነው። አንድ ገደብ እስካለ ድረስ ማዋቀር ቀላል እና ለማረም ቀላል ነው። CSS Anchor Positioning ተጠቀም።የአሳሽህ ድጋፍ ሲፈቅድ ይህን ይድረስ። የፋየርፎክስ ድጋፍ የሚያስፈልግ ከሆነ ከ@oddbird ፖሊፊል ጋር ያጣምሩት። መድረኩ በመጨረሻ የሚያመራበት እና በመጨረሻም የአንተ አካሄድ ይሆናል። DOMን እንደገና ያዋቅሩት።ይህን አርክቴክቸር ሲፈቅድ ይጠቀሙ እና ዜሮ የአሂድ ጊዜ ውስብስብነት ይፈልጋሉ። በጣም ዝቅተኛ ደረጃ የተሰጠው አማራጭ ሳይሆን አይቀርም ብዬ አምናለሁ። ስርዓተ ጥለቶችን ያዋህዱ።ይህን አድርግ መልህቅ አቀማመጥን እንደ ዋና አቀራረብህ ስትፈልግ ከጃቫስክሪፕት ውድቀት ጋር ላልተደገፉ አሳሾች ተጣምሯል። ወይም ለDOM አቀማመጥ ፖርታል ከgetBoundingClientRect() ጋር ተጣምሮ ለማስተባበር ትክክለኛነት።
ማጠቃለያ ይህንን ስህተት እንደ አንድ ጊዜ ጉዳይ እይዘው ነበር - የሚጣጠፍ እና የሚቀጥል ነገር። ግን አንድ ጊዜ ከእሱ ጋር ከተቀመጥኩ በኋላ ሁሉንም ሶስት ስርዓቶች ለመረዳት በቂ ነው - የተትረፈረፈ ክሊፕ ፣ አውድ መደራረብ እና ብሎኮችን የያዙ - የዘፈቀደ ስሜት አቆመ። የተሰበረ ተቆልቋይ አይቼ የትኛው ቅድመ አያት እንደሆነ ወዲያውኑ መፈለግ እችል ነበር። ያ DOMን እንዴት እንዳነበብኩ የተደረገው ለውጥ እውነተኛው መወሰድ ነበር። አንድ ትክክለኛ መልስ የለም። የደረስኩት በኮድ ቤዝ ውስጥ መቆጣጠር በምችለው ነገር ላይ የተመካ ነው፡ ቅድመ አያት ዛፉ የማይታወቅበት መግቢያዎች; ንጹህ እና ቀላል በሚሆንበት ጊዜ ቋሚ አቀማመጥ; ምንም ነገር በማይከለክልኝ ጊዜ ኤለመንቱን ማንቀሳቀስ; እና አሁን መልህቅ አቀማመጥ ፣የምችለው የት ነው። የመረጡት ነገር ሁሉ፣ ተደራሽነትን እንደ የመጨረሻ ደረጃ አድርገው አይመልከቱት። በእኔ ልምድ, በትክክል ሲዘለል ነው. የ ARIA ግንኙነቶች፣ የትኩረት አስተዳደር፣ የቁልፍ ሰሌዳ ባህሪ - እነዚያ ፖላንድኛ አይደሉም። ነገሩ በትክክል እንዲሰራ የሚያደርገው አካል ናቸው። በእኔ GitHub repo ውስጥ ያለውን ሙሉ የምንጭ ኮድ ይመልከቱ። ተጨማሪ ንባብ በዚህ ውስጥ ስሰራ የምመለስባቸው ማጣቀሻዎች እነዚህ ናቸው።
የቁልል አውድ (ኤምዲኤን) "CSS መልህቅ አቀማመጥ መመሪያ", ሁዋን ዲዬጎ ሮድሪገስ "በፖፖቨር ኤፒአይ መጀመር"፣ Godstime አቡሩ ተንሳፋፊ UI (floating-ui.com) የሲኤስኤስ የትርፍ ፍሰት (ኤምዲኤን)