วิธีการปะรำองค์ประกอบในปี 2022 (แนวทางปฏิบัติที่ดีที่สุด)

เผยแพร่แล้ว: 2022-08-23

บทความนี้จะกล่าวถึงวิธีที่ดีที่สุดในการเคลื่อนย้ายองค์ประกอบปะรำในการออกแบบเว็บสมัยใหม่

ปะรำเป็นส่วนที่ไม่มีที่สิ้นสุดของข้อความและ/หรือองค์ประกอบภาพ (เช่น รูปภาพ) ที่จะเลื่อนในแนวนอนโดยอัตโนมัติ

image-38-9

แม้ว่าองค์ประกอบ HTML <marquee> อย่างเป็นทางการจะถูกคิดค่าเสื่อมราคาและ ไม่แนะนำให้ใช้ แต่ ผลกระทบโดยรวมของการเลื่อนและองค์ประกอบต่อเนื่องที่ใช้เพื่อทำให้หน้าเว็บมีชีวิตชีวาขึ้นและดีในปี 2022 ซึ่งปรากฏในเว็บไซต์ยอดนิยมหลายแห่ง

บางคนยังคงใช้องค์ประกอบ Marquee ซึ่งยังคงได้รับการสนับสนุนโดยเบราว์เซอร์ทั้งหมดแม้ว่าจะถูกกีดกันจากการใช้ (อีกครั้ง) ตัวอย่างเช่น นี่คือ "สกรีนเซฟเวอร์" ของดีวีดีแบบคลาสสิกที่สร้างด้วย HTML Marquee

<div> <marquee direction="down" height="100%" width="100%" behavior="alternate"> <marquee behavior="alternate"> <img height="80" src="/dvd.png" " /> </marquee> </marquee> </div>

นี่ไม่ฉลาด แต่ก็ยังใช้งานได้ เหตุผลในการหลีกเลี่ยงการใช้องค์ประกอบนี้ในปี 2022 นั้นชัดเจน:

  • ไม่สามารถเข้าถึงได้จริงๆ
  • ค่าเสื่อมราคา 100% และสามารถลบการสนับสนุนได้ (และอาจจะในบางจุด)
  • ไม่เคยเป็นองค์ประกอบ HTML จริงที่จะเริ่มต้นด้วย (ไม่ใช่ส่วนหนึ่งของมาตรฐานใด ๆ )
HTML Marquee ถูกคิดค่าเสื่อมราคา - อย่าใช้มัน
คำอธิบายของเอกสาร MDN เกี่ยวกับสาเหตุที่คุณไม่ควรใช้องค์ประกอบนี้

อย่างไรก็ตาม เราเป็นแฟนตัวยงของ 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=&amp;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=&amp;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:

<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=MnwzMjM4NDJQ8hbMDxfHb -1.2.1&q=80&w=400' alt=''> <img src='https://images.unsplash.com/photo-1583511666445-775f1f2116f5?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4HNDQ8MHwxRfH8HNDQhMDxb=MnwzMjM4HNDQ8MHwxRfH .1&q=80&w=400' alt=''> <img src='https://images.unsplash.com/photo-1586917383423-c25e88ac05ce?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDJQ2hbDEmxfHbHf. =80&w=400' alt=''> <img src='https://images.unsplash.com/photo-1560743173-567a3b5658b1?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRv2.10 =400' alt=''> <img src='https://images.unsplash.com/photo-1603232644140-bb47da511b92?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx 8fHx8fHx8fDE2NTk0MDQ4MDE&ixlib=rb-1.2.1&q=80&w=400' alt=''> </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=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ3MzQ.&ixlib=rb-1's.imglt=mzQ.&ixlib=rb-1's.imglt=mzQ&ixlib=rb-1's -1583511666445-775f1f2116f5?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ3MzQ.&ixlib=rb-1's.imgltk0MDQ3MzQ.&ixlib=rb-1&hl=th'sun's -c25e88ac05ce?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ3NzU&ixlib=rb-1.2.1&q=56's '60a.mzU&ixlib=rb-1.2.1&q=56's unsp.60s.com&q=80&amp;&gt;&hl=th&gt; 73sp60s3NzU&ixlib=rb-1.2.1&q=56=80&hl=th&nbsp; 73sp60s58s&q=73sp58'sp58s&hl=73&q=80s&amp;amp; ?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ3NzU&ixlib=rb-1.2.1&q=80'w'crop> alt=? =ent ropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ4MDE&ixlib=rb-1.2.1&q=80&w=400' alt=''> </eddus style=''> </divs style=font-family:arial,helvetica,sans-serif : 100s"> <div class="marquee__group"> <p>The Dogs of Unsplash</p> <p aria-hidden="true">The Dogs of Unsplash</p> <p aria-hidden="true" >หมาของ Unsplash</p> </div> <div aria-hidden="true" class="marquee__group"> <p>The Dogs of 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=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0libMDQ4MDE&rc.'s.'80ltx8fDE2NTk0libMDQ4MDE&s.' com/photo-1518378188025-22bd89516ee2?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ'MDE-1.ixlib='>a>a<rbmDE1&ixlib='>a>a s.unsplash.com/photo-1571772805064-207c8435df79?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fD2NTk0ix&Q4M'a.c.m.lt.q.o.m.rvbXx8fHx8fHx8fD2NTk0ix&Q4M's.mglt80-1dQ4m's.unsplash.com unsplash.com/photo-1602067340370-bdcebe8d1930?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDUyMTM&ixlib=rb-1.2.1&q=80&w=400' alt=''> <img src='https://images.unsplash. com/photo-1508948956644-0017e845d797?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDUyMTM-1&ixlib=" ระดับ 80 d'en dvbmRvbXx8fHx8fHx8fDE2NTk0MDUyMTM-1&ixlib='> "marquee__group"> <img src='https://images.unsplash.com/photo-1546421845-6471bdcf3edf?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXf.4'a'a'a'a'a's '> <img src='https://images.unsplash.com/photo-1518378188025-22bd89516ee2?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHxD8NTH 0MDQ4MDE&ixlib=rb-1.2.1&q=80&w=400' alt=''> <img src='https://images.unsplash.com/photo-1571772805064-207c8435df79?crop=entropy&cs=tinysrgb&fit=max&fm=fjpg&ixid=MnwzMnwzM rb-1.2.1&q=80&w=400' alt=''> <img src='https://images.unsplash.com/photo-1602067340370-bdcebe8d1930?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwm 1.2.1&q=80&w=400' alt=''> <img src='https://images.unsplash.com/photo-1508948956644-0017e845d797?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwmxrfHJf. 1&q=80&w=400' alt=''> </div> </div>

ในการสาธิต เราจะเห็นสามปะรำ อันที่หนึ่งและสามจะกลับกันด้วยคลาสของ .marquee--reverse มีความเร็วมาตรฐานและมีรูปภาพ

อันที่สอง (อันกลาง) เป็นข้อความทั้งหมด และใช้เส้นขอบกับคลาสที่กำหนดเอง นอกจากนี้ยังมีระยะเวลาที่ช้ากว่าที่กำหนดโดยแอตทริบิวต์ style: .

นอกจากนี้ คุณจะสังเกตเห็นว่ามีการทำซ้ำเป็นหลักใน .marquee div ซึ่งเหมือนกัน ยกเว้นแท็ก aria

นี่คือการทำให้แอนิเมชั่นไม่มีที่สิ้นสุดอย่างไร้รอยต่อ ในขณะที่ยังสามารถปรับให้เข้ากับอัตราส่วนวิวพอร์ตที่แตกต่างกันได้ (เพิ่มเติมเกี่ยวกับเรื่องนี้เมื่อเราดูที่ CSS)

สามารถเข้าถึงได้ด้วย aria-hidden="true" ซึ่งจะลบเนื้อหาที่ซ้ำกันออกจากแผนผังการช่วยสำหรับการเข้าถึง

นอกจากนี้ รูปภาพยังให้บริการโดยตรงจาก Unsplash คุณอาจพบว่าแหล่งข้อมูลนี้น่าสนใจ: วิธีสร้างรูปภาพแบบสุ่มโดย URL (Web Dev)

ทั้งหมดนี้เป็นโครงสร้าง HTML ที่เรียบง่ายและสวยงาม

ทีนี้มาดูที่ CSS

และนี่คือ CSS (ดึงโดยตรงจาก CodePen):

@import url("https://fonts.googleapis.com/css2?family=Corben:wght@700&display=swap"); * { ขนาดกล่อง: border-box; } ร่างกาย { ความสูงขั้นต่ำ: 100vh; } .demo_marquee-wrap { --demo-marquee_space: 2rem; แสดง: กริด; จัดเนื้อหา: ศูนย์; ล้น: ซ่อน; ช่องว่าง: var(--demo-marquee_space); ความกว้าง: 100%; ตระกูลแบบอักษร: "Corben", system-ui, sans-serif; ขนาดตัวอักษร: 1.5rem; ความสูงของเส้น: 1.5; } .marquee { --demo-marquee_duration: 60s; --demo-marquee_gap: var(--สาธิต-marquee_space); จอแสดงผล: ดิ้น; ล้น: ซ่อน; ผู้ใช้เลือก: ไม่มี; ช่องว่าง: var(--demo-marquee_gap); แปลง: เอียงY(-3deg); } .marquee__group { หดตัวแบบยืดหยุ่น: 0; จอแสดงผล: ดิ้น; จัดรายการ: ศูนย์; justify-content: ช่องว่างรอบ ๆ; ช่องว่าง: var(--demo-marquee_gap); ความกว้างขั้นต่ำ: 100%; แอนิเมชั่น: scroll var(--demo-marquee_duration) ไม่มีที่สิ้นสุดเชิงเส้น; } @media (ต้องการลดการเคลื่อนไหว: ลด) { .marquee__group { สถานะการเล่นแอนิเมชั่น: หยุดชั่วคราว; } } .marquee__group img { ความกว้างสูงสุด: แคลมป์ (10rem, 1rem + 28vmin, 20rem); อัตราส่วนภาพ: 1; พอดีกับวัตถุ: ปก; รัศมีขอบ: 1rem; } .marquee__group p { สี:#29303e; } .marquee--เส้นขอบ { border-block: 3px solid #2903e; padding-block: 0.75rem; } .marquee--reverse .marquee__group { ทิศทางภาพเคลื่อนไหว: ย้อนกลับ; ภาพเคลื่อนไหว-ล่าช้า: calc(var(--demo-marquee_duration) / -2); } @keyframes เลื่อน { 0% { แปลง: translateX (0); } 100% { แปลง: translateX(calc(-100% - var(--demo-marquee_gap))); } }

เราสามารถเห็นสิ่งต่อไปนี้:

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