Come selezionare gli elementi nel 2022 (migliori pratiche)

Pubblicato: 2022-08-23

Questo articolo discuterà i modi migliori per creare elementi di selezione in movimento nel moderno web design.

Un tendone è una sezione infinita di testo e/o elemento visivo (come le immagini) che scorre automaticamente in orizzontale.

immagine-38-9

Nonostante l'elemento HTML <marquee> ufficiale sia stato deprezzato e fortemente sconsigliato dall'uso, l'effetto complessivo dello scorrimento, elementi continui utilizzati per rendere più piccante una pagina Web è vivo e vegeto nel 2022, apparendo in molti siti Web alla moda.

Alcuni usano ancora l'elemento Marquee, che è ancora supportato da tutti i browser nonostante (di nuovo) sia sconsigliato di essere utilizzato. Ad esempio, ecco il classico "salvaschermo" del DVD rimbalzante creato con un riquadro di selezione HTML.

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

Questo non è intelligente, ma funziona ancora. Le ragioni per evitare di utilizzare questo elemento nel 2022 sono chiare:

  • Non è davvero accessibile
  • È deprezzato al 100% e il supporto per esso può (e probabilmente sarà a un certo punto) essere rimosso
  • Non è mai stato un vero elemento HTML per cominciare (non fa parte di nessuno standard)
Il Marquee HTML è deprezzato: non usarlo.
Spiegazione di MDN docs sul perché non dovresti usare questo elemento

Tuttavia, siamo sempre stati fan dei tendoni per feste a Isotropic.

Dai un'occhiata a molti dei siti Web alla moda di Awwwards e vedrai testo, immagini o una combinazione di entrambi che si muovono orizzontalmente, in questo modo:

Questo è un tendone dimostrativo

Naturalmente, non è mai una buona idea inserire informazioni mission-critical in sezioni a scorrimento o animate. Ma per qualcosa come l'esempio sopra, sembra interessante, differenzia il sito e lo rende memorabile. Usalo con saggezza e con moderazione.

I tendoni sono così fantastici che abbiamo persino pubblicato uno strumento utile che genererà automaticamente una sezione di testo scorrevole in stile "ticker" utilizzando le ombre dei riquadri CSS. È fantastico, ma penso che l'approccio discusso in questo articolo sia ancora migliore.

Il codice per realizzare quella demo tendone è tratto da questo CodePen di Ryan Mulligan, che è (probabilmente) il modo migliore per creare un effetto tendone nel 2022. Scrive anche di questo codice nel suo blog, https://ryanmulligan.dev/ blog/css-marquee.

È accessibile (supporta prefers-reduced-motion), infinito, consente qualsiasi tipo di elemento html ed è leggero e facile da implementare.

È anche realizzato con CSS al 100% e nessun 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=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ3MzQ&ixlib=1&q=1.2'>00& alb=1&q=1.2.
    <img src='https://images.unsplash.com/photo-1583511666445-775f1f2116f5?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ3MzQ&ixlib=rb-1.2.1&q=80&w=400' alt=''>
    <img src='https://images.unsplash.com/photo-1586917383423-c25e88ac05ce?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ3NzU&ixlib=rb-1.2.1&q=80&w=400' alt=''>
    <img src='https://images.unsplash.com/photo-1560743173-567a3b5658b1?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ3NzU&x'2lib='rb-1='2lib=8'0'.
    <img src='https://images.unsplash.com/photo-1603232644140-bb47da511b92?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ4MDE&x2'0MDQ4MDE&ix2'01='rb-1='2lib='rb-1'
  </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=1&q=1.2'>00& alb=1&q=1.2.
    <img src='https://images.unsplash.com/photo-1583511666445-775f1f2116f5?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ3MzQ&ixlib=rb-1.2.1&q=80&w=400' alt=''>
    <img src='https://images.unsplash.com/photo-1586917383423-c25e88ac05ce?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ3NzU&ixlib=rb-1.2.1&q=80&w=400' alt=''>
    <img src='https://images.unsplash.com/photo-1560743173-567a3b5658b1?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ3NzU&x'2lib='rb-1='2lib=8'0'.
    <img src='https://images.unsplash.com/photo-1603232644140-bb47da511b92?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ4MDE&x2'0MDQ4MDE&ix2'01='rb-1='2lib='rb-1'
  </div>
</div>

<div class="marquee marquee--borders">
  <div class="marquee__group">
    <p>I cani di Unsplash</p>
    <p aria-hidden="true">I cani di Unsplash</p>
    <p aria-hidden="true">I cani di Unsplash</p>
  </div>

  <div aria-hidden="true" class="marquee__group">
    <p>I cani di Unsplash</p>
    <p>I cani di Unsplash</p>
    <p>I cani di Unsplash</p>
  </div>
</div>

<div class="marquee tendone--reverse">
  <div class="marquee__group">
    <img src='https://images.unsplash.com/photo-1546421845-6471bdcf3edf?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ4MDE&ixlib=1&q=1.2'>&ixlib=1&q=1.2.'
    <img src='https://images.unsplash.com/photo-1518378188025-22bd89516ee2?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ4MDE&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=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ4MDE&ixlib=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=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDUyMTM&x2lib='01='rb-1='2lib='rb-1'
    <img src='https://images.unsplash.com/photo-1508948956644-0017e845d797?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDUyMTM&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-1546421845-6471bdcf3edf?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ4MDE&ixlib=1&q=1.2'>&ixlib=1&q=1.2.'
    <img src='https://images.unsplash.com/photo-1518378188025-22bd89516ee2?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ4MDE&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=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ4MDE&ixlib=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=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDUyMTM&x2lib='01='rb-1='2lib='rb-1'
    <img src='https://images.unsplash.com/photo-1508948956644-0017e845d797?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDUyMTM&ixlib=rb-1.2.1&q=80&w=400' alt=''>
  </div>
</div>
 @import url("https://fonts.googleapis.com/css2?family=Corben:wght@700&display=swap");

* {
  formato scatola: bordo-scatola;
}

corpo {
  altezza minima: 100vh;
}

corpo {
  --spazio: 2rem;

  visualizzazione: griglia;
  align-content: centro;
  overflow: nascosto;
  gap: var(--spazio);
  larghezza: 100%;
  famiglia di caratteri: "Corben", system-ui, sans-serif;
  dimensione del carattere: 1,5 rem;
  altezza della linea: 1,5;
}

.tendone {
  --durata: 60s;
  --gap: var(--space);

  display: flessibile;
  overflow: nascosto;
  user-select: nessuno;
  gap: var(--gap);
  trasforma: skewY(-3deg);
}

.marquee__group {
  termoretraibile: 0;
  display: flessibile;
  allineare-elementi: centro;
  giustificare-contenuto: spazio-intorno;
  gap: var(--gap);
  larghezza minima: 100%;
  animazione: scroll var(--duration) linear infinite;
}

@media (preferisce-ridotto-movimento: riduci) {
  .marquee__group {
    stato di riproduzione dell'animazione: in pausa;
  }
}

.marquee__group img {
  larghezza massima: morsetto (10 rem, 1 rem + 28 vmin, 20 rem);
  proporzioni: 1;
  adatto all'oggetto: copertina;
  raggio di confine: 1rem;
}

.marquee__group p {
  immagine di sfondo: gradiente lineare(
    75 gradi,
    hsl(240 gradi 70% 49%) 0%,
    hsl(253 gradi 70% 49%) 11%,
    hsl(267 gradi 70% 49%) 22%,
    hsl(280 gradi 71% 48%) 33%,
    hsl(293 gradi 71% 48%) 44%,
    hsl(307 gradi 71% 48%) 56%,
    hsl (320 gradi 71% 48%) 67%,
    hsl(333 gradi 72% 48%) 78%,
    hsl(347 gradi 72% 48%) 89%,
    hsl(0 gradi 73% 47%) 100%
  );
  -clip-sfondo-webkit: testo;
  -webkit-text-fill-color: trasparente;
}

.marquee--bordi {
  border-block: 3px solid Dodgerblue;
  blocco di riempimento: 0,75 rem;
}

.marquee--reverse .marquee__group {
  direzione dell'animazione: retromarcia;
  animazione-ritardo: calc(var(--duration) / -2);
}

@fotogrammi chiave scorrere {
  0% {
    trasformare: translateX(0);
  }

  100% {
    trasformare: translateX(calc(-100% - var(--gap)));
  }
}

Diamo un'occhiata a come è stato creato e perché è così eccezionale.

Ecco una panoramica, prima di guardare tutto il codice:

  • Possiamo facilmente controllare la velocità e la direzione dell'effetto di scorrimento. Per la velocità, abbiamo impostato e per la direzione, usiamo una classe di .marquee--reverse .
  • È modulare: puoi avere tutti i gruppi che desideri avvolgendo il contenuto in un div con la classe di .marquee e il contenuto interno con .marquee__group .
  • Il dimensionamento è reattivo e fluido in quanto utilizza variabili CSS e clamp.
  • È accessibile usando le etichette dell'aria e mettendo in pausa se CSS's prefers-reduced-motion è impostato su ridotto.
  • Il movimento è un'animazione CSS standard che utilizza i fotogrammi chiave (quindi puoi mettere in pausa al passaggio del mouse se lo desideri). Non c'è affatto JS.
  • È anche un bel copia/incolla. Sostituisci semplicemente i tuoi contenuti, implementa HTML e CSS e avrai un piccolo e fantastico tendone.

È davvero ben fatto e (imo) dovrebbe essere il modo standard in cui viene implementato un effetto tendone nel 2022.

Ecco l'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=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHxDE=libHrb08 -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=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ3MzQ&ixlib=rb-1.2 .1&q=80&w=400' alt=''> <img src='https://images.unsplash.com/photo-1586917383423-c25e88ac05ce?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ3NzU&ixlib=rb-1.2.1&q =80&w=400' alt=''> <img src='https://images.unsplash.com/photo-1560743173-567a3b5658b1?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ3NzU&ixlib=rb-1.2.1&q=80&w =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.2.1&q=80&spwlash=400' <img>'un alt='shttps://images.photos. -1583511666445-775f1f2116f5?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ3MzQ&ixlib=rb-1.2.1&q=80&w=400' alt=''> <img src='https://images.unsplash.com/photo-1586917383423 -c25e88ac05ce?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ3NzU&ixlib=rb-1.2.1&q=80&w=400' alt=''> <img src='https://images.unsplash.com/photo-1560743173-567a3b5658b1 ?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ3NzU&ixlib=rb-1.2.1&q=80&w=400' alt=''> <img src='https://images.unsplash.com/photo-1603232644140-bb47da511b92?crop =ent ropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ4MDE&ixlib=rb-1.2.1&q=80&w=400' alt=''> </div> </div> <div class="marquee marquee="--duration borders" style : 100s"> <div class="marquee__group"> <p>I cani di Unsplash</p> <p aria-hidden="true">I cani di Unsplash</p> <p aria-hidden="true" >I cani di Unsplash</p> </div> <div aria-hidden="true" class="marquee__group"> <p>I cani di Unsplash</p> <p>I cani di Unsplash</p> <p>I cani di 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=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ4MDE&ixlib=rb-1.2.1&q=80&w=400' alt=''> <img src='https://images.unsplash. com/photo-1518378188025-22bd89516ee2?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ4MDE&ixlib=rbmg-1.2.1&q=80&w='https://'0i' alt='https://' s.unsplash.com/photo-1571772805064-207c8435df79?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ4MDE&ixlib=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=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&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-1546421845-6471bdcf3edf?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ4MDE&ixlib=rb-1.2.1&q=80&w=400' alt=' '> <img src='https://images.unsplash.com/photo-1518378188025-22bd89516ee2?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk 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=jpg&ixid=MnwzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NTk0MDQ4MDE&ixlib= 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=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&ixlib=rb-1.2. 1&q=80&w=400' alt=''> </div> </div>

Nella demo possiamo vedere tre tendoni. Il primo e il terzo sono invertiti con la classe di .marquee--reverse . Hanno una velocità standard e contengono immagini.

Il secondo (quello centrale) è tutto testo e implementa i bordi con una classe personalizzata. Ha anche una durata più lenta impostata dall'attributo style: .

Noterai anche che ci sono essenzialmente duplicati all'interno del div .marquee , che sono gli stessi tranne che con un tag aria.

Questo per rendere l'animazione perfettamente infinita, pur essendo in grado di adattarsi a diversi rapporti di visualizzazione (ne parleremo di più quando osserviamo il CSS).

Questo è reso accessibile con aria-hidden="true" , ​​che rimuove il contenuto duplicato dall'albero di accessibilità.

Inoltre, le immagini vengono fornite direttamente da Unsplash. Potresti trovare interessante questa risorsa: Come generare immagini casuali per URL (Web Dev)

Tutto sommato, è una struttura HTML semplice ed elegante.

Ora diamo un'occhiata ai CSS

Ed ecco il CSS (tratto direttamente dal CodePen):

@import url("https://fonts.googleapis.com/css2?family=Corben:wght@700&display=swap"); * {dimensioni della scatola: bordo della scatola; } corpo { altezza minima: 100vh; } .demo_marquee-wrap { --demo-marquee_space: 2rem; visualizzazione: griglia; align-content: centro; overflow: nascosto; gap: var(--demo-marquee_space); larghezza: 100%; famiglia di caratteri: "Corben", system-ui, sans-serif; dimensione del carattere: 1,5 rem; altezza della linea: 1,5; } .marquee { --demo-marquee_duration: 60s; --demo-marquee_gap: var(--demo-marquee_space); display: flessibile; overflow: nascosto; user-select: nessuno; gap: var(--demo-marquee_gap); trasforma: skewY(-3deg); } .marquee__group { restringimento flessibile: 0; display: flessibile; allineare-elementi: centro; giustificare-contenuto: spazio-intorno; gap: var(--demo-marquee_gap); larghezza minima: 100%; animazione: scroll var(--demo-marquee_duration) linear infinite; } @media (preferisce-ridotto-movimento: riduci) { .marquee__group { animation-play-state: in pausa; } } .marquee__group img { larghezza massima: clamp(10rem, 1rem + 28vmin, 20rem); proporzioni: 1; adatto all'oggetto: copertina; raggio di confine: 1rem; } .marquee__group p { color:#29303e; } .marquee--borders { border-block: 3px solid #29303e; blocco di riempimento: 0,75 rem; } .marquee--reverse .marquee__group { direzione-animazione: reverse; animazione-ritardo: calc(var(--demo-marquee_duration) / -2); } @keyframes scroll { 0% { transform: translateX(0); } 100% { trasformazione: translateX(calc(-100% - var(--demo-marquee_gap))); } }

Possiamo vedere quanto segue:

  • Tutto utilizza REM, variabili e clamp, il che significa che l'effetto fluido e reagirà alle dimensioni dello schermo e alle impostazioni del browser.
  • L'animazione è al 100% CSS. Questo è implementato con la linea " animation: scroll var(--duration) linear infinite; " in .marquee__group . L'animazione è infinita, lineare e denominata scroll. La durata radice è controllata dalla variabile --duration , che può essere sovrascritta per controllare la velocità di un gruppo specifico nel markup HTML (menzionato sopra).
  • Scroll è una trasformazione di base, che traduce X.
  • Per invertire l'animazione, abbiamo semplicemente " animation-direction: reverse; ' nella classe .marquee--reverse .marquee__group .
  • Stiamo utilizzando calc e --gap per la maggior parte della spaziatura. Questo rende le cose fluide e puoi cambiare Gap in base alle tue esigenze.
  • C'è un effetto di inclinazione (3%) che lo rende diagonale, che può essere rimosso per renderlo orizzontale al 100%.
  • È accessibile e responsabile in quanto non si muoverà se preferisce-ridotto-movimento: è impostato ridurre (scopri come testarlo qui).

Fondamentalmente, fa tutto davvero bene ed è il modo migliore per implementare un effetto simile a un tendone a scorrimento nel 2022.

Per implementarlo, aggiungi semplicemente l'HTML alla tua pagina, sostituisci il testo/le immagini e aggiungi il CSS ai tuoi stili globali.

Puoi giocare con le variabili, ma realisticamente questo è abbastanza plug and play... non c'è molto che devi cambiare!