วิธีการปะรำองค์ประกอบในปี 2022 (แนวทางปฏิบัติที่ดีที่สุด)
เผยแพร่แล้ว: 2022-08-23บทความนี้จะกล่าวถึงวิธีที่ดีที่สุดในการเคลื่อนย้ายองค์ประกอบปะรำในการออกแบบเว็บสมัยใหม่
ปะรำเป็นส่วนที่ไม่มีที่สิ้นสุดของข้อความและ/หรือองค์ประกอบภาพ (เช่น รูปภาพ) ที่จะเลื่อนในแนวนอนโดยอัตโนมัติ
แม้ว่าองค์ประกอบ HTML <marquee> อย่างเป็นทางการจะถูกคิดค่าเสื่อมราคาและ ไม่แนะนำให้ใช้ แต่ ผลกระทบโดยรวมของการเลื่อนและองค์ประกอบต่อเนื่องที่ใช้เพื่อทำให้หน้าเว็บมีชีวิตชีวาขึ้นและดีในปี 2022 ซึ่งปรากฏในเว็บไซต์ยอดนิยมหลายแห่ง
บางคนยังคงใช้องค์ประกอบ Marquee ซึ่งยังคงได้รับการสนับสนุนโดยเบราว์เซอร์ทั้งหมดแม้ว่าจะถูกกีดกันจากการใช้ (อีกครั้ง) ตัวอย่างเช่น นี่คือ "สกรีนเซฟเวอร์" ของดีวีดีแบบคลาสสิกที่สร้างด้วย HTML Marquee
นี่ไม่ฉลาด แต่ก็ยังใช้งานได้ เหตุผลในการหลีกเลี่ยงการใช้องค์ประกอบนี้ในปี 2022 นั้นชัดเจน:
- ไม่สามารถเข้าถึงได้จริงๆ
- ค่าเสื่อมราคา 100% และสามารถลบการสนับสนุนได้ (และอาจจะในบางจุด)
- ไม่เคยเป็นองค์ประกอบ HTML จริงที่จะเริ่มต้นด้วย (ไม่ใช่ส่วนหนึ่งของมาตรฐานใด ๆ )
อย่างไรก็ตาม เราเป็นแฟนตัวยงของ Marquees ที่ Isotropic มาโดยตลอด
ลองดูเว็บไซต์ยอดนิยมของ Awwwards หลายๆ แห่ง แล้วคุณจะเห็นข้อความ รูปภาพ หรือทั้งสองอย่างรวมกันในแนวนอน ดังนี้:
นี่คือตัวอย่าง Marquee
แน่นอนว่า ไม่ควรใส่ข้อมูลสำคัญเกี่ยวกับภารกิจ ในส่วนการเลื่อนหรือภาพเคลื่อนไหว แต่สำหรับบางอย่างเช่นตัวอย่างข้างต้น มันดูเท่ สร้างความแตกต่างให้กับไซต์ และทำให้น่าจดจำ ใช้อย่างชาญฉลาดและพอประมาณ
Marquees เจ๋งมาก เรายังได้เผยแพร่เครื่องมือที่เป็นประโยชน์ซึ่งจะสร้างส่วนสไตล์ "ทิกเกอร์" ของข้อความเลื่อนโดยอัตโนมัติโดยใช้เงาของกล่อง CSS ดีมาก แต่ฉันคิดว่าแนวทางที่กล่าวถึงในบทความนี้ดีกว่า
รหัสสำหรับการสาธิตปะรำนั้นมาจาก CodePen นี้โดย Ryan Mulligan ซึ่ง (น่าจะ) เป็นวิธีที่ดีที่สุดในการสร้างเอฟเฟกต์ปะรำในปี 2022 เขายังเขียนเกี่ยวกับรหัสนี้ในบล็อกของเขาที่ https://ryanmulligan.dev/ บล็อก/css-marquee.
สามารถเข้าถึงได้ (รองรับลดการเคลื่อนไหวที่ต้องการ) ไม่จำกัด อนุญาตให้ใช้องค์ประกอบ html ทุกประเภท และมีน้ำหนักเบาและใช้งานง่าย
มันถูกสร้างขึ้นด้วย 100% CSS และไม่มี JS
<div class="marquee"> <div class="marquee__group"> <img src='https://images.unsplash.com/photo-1548199973-03cce0bbc87b?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHxbQNT=0&g'a.2Mlt. <img src='https://images.unsplash.com/photo-1583511666445-775f1f2116f5?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fQlib&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fQlib=&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8.FHx2q=&x0'a'MnwzMjM4NDZ8MHwxfHJhbmRvbXx8. <img src='https://images.unsplash.com/photo-1586917383423-c25e88ac05ce?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHq2qMD=80'a>a'U.U.L.MjM4NDZ8MHwxfHJhbmRvbXx8fHQ2qMD=80'a <img src='https://images.unsplash.com/photo-1560743173-567a3b5658b1?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHQ2qMD=&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHQ2qMD=&8f'a... <img src='https://images.unsplash.com/photo-1603232644140-bb47da511b92?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHxb='a'MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHxb='a </div> <div aria-hidden="true" class="marquee__group"> <img src='https://images.unsplash.com/photo-1548199973-03cce0bbc87b?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHxbQNT=0&g'a.2Mlt. <img src='https://images.unsplash.com/photo-1583511666445-775f1f2116f5?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fQlib&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fQlib=&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8.FHx2q=&x0'a'MnwzMjM4NDZ8MHwxfHJhbmRvbXx8. <img src='https://images.unsplash.com/photo-1586917383423-c25e88ac05ce?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHq2qMD=80'a>a'U.U.L.MjM4NDZ8MHwxfHJhbmRvbXx8fHQ2qMD=80'a <img src='https://images.unsplash.com/photo-1560743173-567a3b5658b1?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHQ2qMD=&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHQ2qMD=&8f'a... <img src='https://images.unsplash.com/photo-1603232644140-bb47da511b92?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHxb='a'MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHxb='a </div> </div> <div class="marquee marquee--borders"> <div class="marquee__group"> <p>หมาของ Unsplash</p> <p aria-hidden="true">หมาของ Unsplash</p> <p aria-hidden="true">หมาของ Unsplash</p> </div> <div aria-hidden="true" class="marquee__group"> <p>หมาของ Unsplash</p> <p>หมาของ Unsplash</p> <p>หมาของ Unsplash</p> </div> </div> <div class="marquee marquee--reverse"> <div class="marquee__group"> <img src='https://images.unsplash.com/photo-1546421845-6471bdcf3edf?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHlibD8fNk='MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHlibQ2fNk='MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHlibD8fNk='MnwzMjM4NDZ8MHwxfHJhbmRvbXx7 <img src='https://images.unsplash.com/photo-1518378188025-22bd89516ee2?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHxb='MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHxb='a <img src='https://images.unsplash.com/photo-1571772805064-207c8435df79?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHxb='a'2.1lt4qt=mnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHxb='a <img src='https://images.unsplash.com/photo-1602067340370-bdcebe8d1930?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx4DUTM=&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHlibDE80fNk>a'MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fMx400qTM=&a'MnwzMjM4NDZ8MHwxfHJhbmRvbXx7 <img src='https://images.unsplash.com/photo-1508948956644-0017e845d797?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fNk>a'MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fNk='MnwzMjM4NDZ8MHwxfHJhbmRvbXx7 </div> <div aria-hidden="true" class="marquee__group"> <img src='https://images.unsplash.com/photo-1546421845-6471bdcf3edf?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHlibD8fNk='MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHlibQ2fNk='MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHlibD8fNk='MnwzMjM4NDZ8MHwxfHJhbmRvbXx7 <img src='https://images.unsplash.com/photo-1518378188025-22bd89516ee2?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHxb='MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHxb='a <img src='https://images.unsplash.com/photo-1571772805064-207c8435df79?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHxb='a'2.1lt4qt=mnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHxb='a <img src='https://images.unsplash.com/photo-1602067340370-bdcebe8d1930?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx4DUTM=&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHlibDE80fNk>a'MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fMx400qTM=&a'MnwzMjM4NDZ8MHwxfHJhbmRvbXx7 <img src='https://images.unsplash.com/photo-1508948956644-0017e845d797?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fNk>a'MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fNk='MnwzMjM4NDZ8MHwxfHJhbmRvbXx7 </div> </div>
@import url("https://fonts.googleapis.com/css2?family=Corben:wght@700&display=swap"); * { ขนาดกล่อง: เส้นขอบกล่อง; } ร่างกาย { ความสูงขั้นต่ำ: 100vh; } ร่างกาย { --พื้นที่: 2rem; แสดง: กริด; จัดเนื้อหา: ศูนย์; ล้น: ซ่อน; ช่องว่าง: var(--ช่องว่าง); ความกว้าง: 100%; ตระกูลแบบอักษร: "Corben", system-ui, sans-serif; ขนาดตัวอักษร: 1.5rem; ความสูงของเส้น: 1.5; } .marquee { --duration: 60 วินาที; --gap: var(--ช่องว่าง); จอแสดงผล: ดิ้น; ล้น: ซ่อน; ผู้ใช้เลือก: ไม่มี; ช่องว่าง: var(--ช่องว่าง); แปลง: เอียงY(-3deg); } .marquee__group { ดิ้นหด: 0; จอแสดงผล: ดิ้น; จัดรายการ: ศูนย์; justify-content: ช่องว่างรอบ ๆ; ช่องว่าง: var(--ช่องว่าง); ความกว้างขั้นต่ำ: 100%; แอนิเมชั่น: เลื่อน var(--duration) เชิงเส้น อนันต์; } @media (ชอบ-ลด-เคลื่อนไหว: ลด) { .marquee__group { แอนิเมชั่นเล่นสถานะ: หยุดชั่วคราว; } } .marquee__group img { ความกว้างสูงสุด: แคลมป์ (10rem, 1rem + 28vmin, 20rem); อัตราส่วนภาพ: 1; พอดีกับวัตถุ: ปก; รัศมีขอบ: 1rem; } .marquee__group พี { ภาพพื้นหลัง: การไล่ระดับสีเชิงเส้น ( 75 องศา, hsl (240deg 70% 49%) 0%, hsl(253deg 70% 49%) 11%, hsl(267deg 70% 49%) 22%, hsl (280deg 71% 48%) 33%, hsl(293deg 71% 48%) 44%, hsl(307deg 71% 48%) 56%, hsl(320deg 71% 48%) 67%, hsl(333deg 72% 48%) 78%, hsl(347deg 72% 48%) 89%, hsl(0deg 73% 47%) 100% ); -webkit-background-clip: ข้อความ; -webkit-text-fill-color: โปร่งใส; } .marquee--เส้นขอบ { border-block: 3px ของแข็ง dodgerblue; padding-block: 0.75rem; } .marquee--reverse .marquee__group { แอนิเมชั่น-ทิศทาง: ย้อนกลับ; ภาพเคลื่อนไหวล่าช้า: calc(var(--duration) / -2); } @keyframes เลื่อน { 0% { แปลง: translateX(0); } 100% { แปลง: translateX(calc(-100% - var(--gap))); } }
เรามาดูกันว่าสิ่งนี้ถูกสร้างขึ้นมาอย่างไร และทำไมมันจึงยอดเยี่ยมมาก
นี่คือภาพรวม ก่อนที่เราจะดูโค้ดทั้งหมด:
- เราสามารถควบคุมความเร็วและทิศทางของเอฟเฟกต์การเลื่อนได้อย่างง่ายดาย เพื่อความรวดเร็ว เราตั้งค่า
.marquee--reverse
- เป็นแบบแยกส่วน - คุณสามารถมีกลุ่มได้มากเท่าที่ต้องการโดยห่อเนื้อหาใน div ด้วยคลาสของ
.marquee
และเนื้อหาภายในด้วย ..marquee__group
- การปรับขนาดนั้นตอบสนองและลื่นไหลเนื่องจากใช้ตัวแปร CSS และแคลมป์
- สามารถเข้าถึงได้โดยใช้ป้ายกำกับ aria และหยุดชั่วคราวหากตั้งค่า CSS ที่ต้องการลดการเคลื่อนไหวเป็นลด
- การเคลื่อนไหวเป็นแอนิเมชั่น CSS มาตรฐานที่ใช้คีย์เฟรม (เพื่อให้คุณสามารถหยุดชั่วคราวเมื่อวางเมาส์เหนือได้หากต้องการ) ไม่มี JS เลย
- นอกจากนี้ยังคัดลอก / วางสวย เพียงสลับเนื้อหาของคุณ ปรับใช้ HTML และ CSS แล้วคุณจะมีปะรำเล็กๆ ที่ยอดเยี่ยม
ทำได้ดีมากและ (imo) ควรเป็นวิธีมาตรฐานในการนำเอฟเฟกต์ปะรำมาใช้ในปี 2565
นี่คือ HTML:
ในการสาธิต เราจะเห็นสามปะรำ อันที่หนึ่งและสามจะกลับกันด้วยคลาสของ .marquee--reverse
มีความเร็วมาตรฐานและมีรูปภาพ
อันที่สอง (อันกลาง) เป็นข้อความทั้งหมด และใช้เส้นขอบกับคลาสที่กำหนดเอง นอกจากนี้ยังมีระยะเวลาที่ช้ากว่าที่กำหนดโดยแอตทริบิวต์ style: .
นอกจากนี้ คุณจะสังเกตเห็นว่ามีการทำซ้ำเป็นหลักใน .marquee
div ซึ่งเหมือนกัน ยกเว้นแท็ก aria
นี่คือการทำให้แอนิเมชั่นไม่มีที่สิ้นสุดอย่างไร้รอยต่อ ในขณะที่ยังสามารถปรับให้เข้ากับอัตราส่วนวิวพอร์ตที่แตกต่างกันได้ (เพิ่มเติมเกี่ยวกับเรื่องนี้เมื่อเราดูที่ CSS)
สามารถเข้าถึงได้ด้วย aria-hidden="true"
ซึ่งจะลบเนื้อหาที่ซ้ำกันออกจากแผนผังการช่วยสำหรับการเข้าถึง
นอกจากนี้ รูปภาพยังให้บริการโดยตรงจาก Unsplash คุณอาจพบว่าแหล่งข้อมูลนี้น่าสนใจ: วิธีสร้างรูปภาพแบบสุ่มโดย URL (Web Dev)
ทั้งหมดนี้เป็นโครงสร้าง HTML ที่เรียบง่ายและสวยงาม
ทีนี้มาดูที่ CSS
และนี่คือ CSS (ดึงโดยตรงจาก CodePen):
เราสามารถเห็นสิ่งต่อไปนี้:
- ทุกอย่างใช้ REM ตัวแปร และแคลมป์ ซึ่งหมายความว่าเอฟเฟกต์จะไหล และจะตอบสนองต่อขนาดหน้าจอและการตั้งค่าเบราว์เซอร์
- ภาพเคลื่อนไหวเป็น 100% CSS สิ่งนี้ใช้กับ
animation: scroll var(--duration) linear infinite;
" บรรทัดใน ..marquee__group
แอนิเมชั่นเป็นอนันต์ เชิงเส้น และเลื่อนชื่อ ระยะเวลารูทถูกควบคุมโดยตัวแปร--duration
ซึ่งสามารถเขียนทับเพื่อควบคุมความเร็วของกลุ่มเฉพาะในมาร์กอัป HTML (ที่กล่าวถึงข้างต้น) - สโครลคือการแปลงพื้นฐานซึ่งแปลว่า X
- ในการย้อนกลับภาพเคลื่อนไหว เราเพียงแค่มี "
animation-direction: reverse;
' ในคลาส ..marquee--reverse .marquee__group
- เรากำลังใช้ประโยชน์จาก calc และ --gap สำหรับระยะห่างส่วนใหญ่ สิ่งนี้ทำให้สิ่งต่าง ๆ ลื่นไหลและคุณสามารถเปลี่ยน Gap ให้เหมาะกับความต้องการของคุณได้
- มีเอฟเฟกต์เอียง (3%) ที่ทำให้เป็นแนวทแยง ซึ่งสามารถลบออกเพื่อให้เป็นแนวนอนได้ 100%
- เข้าถึงได้และมีความรับผิดชอบ เนื่องจากจะไม่เคลื่อนไหวหากมีการตั้งค่า
โดยพื้นฐานแล้ว มันทำทุกอย่างได้ดีมาก และเป็นวิธีที่ดีที่สุดในการใช้เอฟเฟกต์แบบกระโจมแบบเลื่อนในปี 2022
ในการใช้งาน คุณเพียงแค่เพิ่ม HTML ลงในเพจของคุณ สลับข้อความ/รูปภาพ และเพิ่ม CSS ให้กับสไตล์โดยรวมของคุณ
คุณสามารถเล่นกับตัวแปรต่างๆ ได้ แต่ในความเป็นจริงแล้ว นี่เป็น Plug and Play ที่ดี... คุณไม่จำเป็นต้องเปลี่ยนอะไรมาก!