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

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

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

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

position:sticky คืออะไร

เราใช้เวลาสักพักกว่าจะมาถึงจุดนี้ เหตุใดเราจึงตื่นเต้นกับเรื่องนี้

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

ลักษณะของภาพในบล็อก ซึ่งช่วยให้ฉันสามารถแสดงส่วนหัวของส่วนปัจจุบันที่ด้านบนของหน้าจอขณะที่คุณอ่านบทความที่ค่อนข้างยาวและอ่านยากของฉันได้ :\

หากต้องการใช้ฟีเจอร์นี้ ให้ระบุว่าแอตทริบิวต์ 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 มีดังนี้