วิธีการปะรำองค์ประกอบในปี 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 ที่ดี... คุณไม่จำเป็นต้องเปลี่ยนอะไรมาก!
