position:sticky กลับมาใน Chrome

เมื่อ 4 ปีก่อน Eric Bidelman ได้เขียนบล็อกโพสต์ที่น่าสนใจซึ่งพูดถึงข้อเท็จจริงที่ว่า position: sticky อยู่ใน WebKit ซึ่งในเวลานั้นเป็นเครื่องมือที่ขับเคลื่อน Chrome (และเบราว์เซอร์อื่นๆ อีกมากมาย รวมถึง Safari) 1 ปีต่อมา เรานำ position:sticky ออกจาก Chrome จนน่าตกใจมากเพราะ "การใช้งานในปัจจุบันไม่ได้ออกแบบมาในลักษณะที่สามารถผสานรวมเข้ากับระบบการเลื่อนและการประกอบภาพที่มีอยู่ได้เป็นอย่างดี"

เราต้องการให้ Chrome กลับมาใช้ใน Chrome อยู่เสมอ ตามข้อบกพร่องที่กล่าวว่า "เมื่อเลื่อนและจัดองค์ประกอบเสร็จแล้ว เราควรกลับไปที่ position: sticky และนำฟีเจอร์นี้ไปผสานรวมเข้ากับเครื่องมืออื่นๆ ที่เหลือ" ข้อบกพร่องเมตาที่ติดตามการติดตั้งใช้งานได้มาตั้งแต่ปี 2013

ข่าวดีคือ Chrome 56 (ปัจจุบันเป็นเวอร์ชันเบต้าในเดือนธันวาคม 2016 และเสถียรในเดือนมกราคม 2017) position: sticky กลับมาใน Chrome แล้ว

ตำแหน่ง:ติดหนึบคืออะไร

ใช้เวลาสักพักกว่าจะมาถึงจุดนี้ได้ แล้วทำไมฉันถึงตื่นเต้นขนาดนี้ล่ะ

position:sticky เป็นแอตทริบิวต์การวางตำแหน่ง CSS ที่ให้คุณแก้ไของค์ประกอบให้กับวิวพอร์ตได้ (เช่น ตรึงองค์ประกอบไว้ที่ด้านบนของหน้าจอ) แต่เฉพาะในกรณีที่หน่วยโฆษณาระดับบนสุดปรากฏในวิวพอร์ตและอยู่ภายในค่าเกณฑ์เท่านั้น เมื่อไม่ได้กำหนดตายตัวในวิวพอร์ต องค์ประกอบจะทำหน้าที่เหมือนเป็น position: relative ซึ่งเป็นการเพิ่มแพลตฟอร์มที่ไม่จำเป็นต้องใช้ JavaScript ในเครื่องจัดการเหตุการณ์ onscroll เพียงเพื่อล็อกองค์ประกอบไว้ที่ด้านบนของวิวพอร์ต

นี่คือลักษณะที่ปรากฏในบล็อกของฉัน ทำให้ผมสามารถเก็บส่วนหัวของส่วนปัจจุบันไว้ที่ด้านบนของหน้าจอได้ ขณะที่คุณอ่านบทความที่ ยาวแต่ใช้เวลานาน :\

หากต้องการใช้ฟีเจอร์นี้ ให้ระบุว่าแอตทริบิวต์ position ควรมีค่า sticky ในองค์ประกอบที่คุณต้องการให้เป็นเช่นนั้น นอกจากนี้ คุณยังสามารถเพิ่มระยะห่างจากจุดที่ค้างอยู่ได้ด้วย

    h3 {
      /* Element will be 'fixed' when it ... */
      position: sticky;
      /* ... is 10px from the top of the viewport */
      top: 10px;
    }

ตัวอย่างก่อนหน้านี้จะแก้ไของค์ประกอบ <h3> ที่ขนาด 10 พิกเซลจากด้านบนของวิวพอร์ต หากต้องการแก้ไขที่ด้านบนของวิวพอร์ตโดยตรง คุณจะต้องตั้งค่าแอตทริบิวต์ top เป็น top: 0px

การสนับสนุนสำหรับฟีเจอร์นี้ค่อนข้างดีมาก มีใน Chrome (ใช่แล้ว), Firefox และ Safari รายละเอียดเพิ่มเติมเกี่ยวกับ position:sticky มีดังนี้