حدث آخر لموقف CSS: مثبت

هل سبق لك أن تساءلت عن كيفية تتبع العناصر التي لها positions: sticky أصبحت positions: sticky ثابتة؟ إريك بيلدمان لديه مشاركة مذهلة حول هذا الموضوع ، اذهب واقرأها الآن.


لقد وجدت بعض الصعوبات أثناء استخدامه في مشروعي. ها هم:


  1. انه يكسر التغليف. يتعلق حدث sticky-change بعنصر الرأس ، ولكن يجب عليك إدخال حراس إلى أصل الرأس (وجعله position: relative ).
  2. أنه ينطوي على الكثير من العوامل التي ينبغي أن تكون متسقة واتصالهم ليس واضحًا دائمًا. على سبيل المثال ، لا يمكنك ضبط --default-padding أكبر من 40px ، وهو ارتفاع الحارس العلوي.
  3. لا يمكنك تتبع كتلة في منتصف مقال.

دعونا نحاول تحسينه!


تعكس كل هذه المشكلات المشكلة نفسها: حل إريك هو تتبع الموقف الأصلي لزجة ، وليس كتلة لزجة نفسها. دعونا تحسين هذا مع الحفاظ على الفكرة الأصلية. كيف؟ سنقوم بإضافة حراس لرأس نفسه ومراقبة تقاطعهم مع الحاوية.


مثال


إليك كيفية القيام بذلك:


  1. تحتاج إلى حارس واحد لكل جانب مثبت تريد مراقبته.
  2. تعيين الخاصية top sentinel top تساوي رأس الصفحة ولكن مع علامة عكس ناقص 1. على سبيل المثال إذا كان رأسك top: 10px ، ثم قم بتعيين رأس sentinel على -11px . يمكنك استخدام شيء مثل top: calc(-1px + -1 * var( -- header-sticky-top)) أو فقط تعيين -1px إذا كان لديك رأس رأس يساوي الصفر.
  3. إضافة حراس أخرى إذا لزم الأمر.
  4. راقب تقاطع الحراس مع الحاوية.
  5. يمكنك أن تقول أن الرأس عالق إذا كان سجل تقاطع الحارس هو isIntersecting = true ، intersectionRatio = 0 ، و intersectionRect.top = rootBounds.top
  6. نفس الجوانب الأخرى ، فقط شاهد الجزء السفلي أو اليسار أو اليمين بدلاً من الأعلى.
  7. لا تنس أن تضيف visibility: hidden pointer-events: none visibility: hidden pointer-events: none إلى الحراس.

تحقق من التجريبي والمصادر هنا

Source: https://habr.com/ru/post/ar436182/


All Articles