Română

Un ghid cuprinzător pentru Cronologiile de derulare CSS, o nouă tehnică puternică de animație web care leagă animațiile direct de poziția de derulare.

Cronologia de defilare CSS: Animație bazată pe poziția de derulare

Animațiile bazate pe derulare revoluționează designul web, oferind experiențe de utilizare captivante și interactive, care depășesc aspectele statice tradiționale. Cronologiile de defilare CSS oferă o soluție nativă pentru browser pentru crearea acestor animații, legând direct progresul animației de poziția de derulare a unui element. Acest lucru deschide o lume de posibilități creative pentru îmbunătățirea angajamentului utilizatorului și a povestirii pe web.

Ce sunt cronologiile de defilare CSS?

Cronologiile de defilare CSS vă permit să controlați progresul unei animații sau tranziții CSS în funcție de poziția de derulare a unui container de derulare specificat. În loc să vă bazați pe animațiile tradiționale bazate pe timp, unde durata animației este fixă, progresul animației este direct legat de cât de departe a derulat un utilizator. Aceasta înseamnă că animația se va întrerupe, reda, derula înapoi sau avansa rapid ca răspuns direct la comportamentul de derulare al utilizatorului, creând o experiență mai naturală și interactivă. Imaginați-vă o bară de progres care se umple pe măsură ce derulați în jos pe o pagină sau elemente care se estompează și se estompează pe măsură ce intră în vizualizare - acestea sunt tipurile de efecte care sunt ușor de realizat cu cronologiile de derulare CSS.

De ce să utilizați cronologiile de derulare CSS?

Concepte și proprietăți cheie

Înțelegerea conceptelor de bază și a proprietăților CSS este crucială pentru utilizarea eficientă a cronologiilor de derulare:

1. Cronologie de derulare

Proprietatea scroll-timeline definește containerul de derulare care va fi utilizat ca cronologie pentru animație. Puteți specifica o cronologie numită (de exemplu, --my-scroll-timeline) sau puteți utiliza valori predefinite precum auto (cel mai apropiat container de derulare ancestral), none (fără cronologie de derulare) sau root (viewport-ul documentului).

/* Definește o cronologie de derulare numită */
.scroll-container {
  scroll-timeline: --my-scroll-timeline;
}

/* Utilizează cronologia numită în animație */
.animated-element {
  animation-timeline: --my-scroll-timeline;
}

2. Cronologie de animație

Proprietatea animation-timeline atribuie o cronologie de derulare unei animații. Această proprietate leagă progresul animației de poziția de derulare a containerului de derulare specificat. Puteți utiliza, de asemenea, funcția view() care creează o cronologie bazată pe un element care se intersectează cu viewport-ul.

/* Leagă animația de cronologia de derulare */
.animated-element {
  animation-timeline: --my-scroll-timeline;
}

/* Utilizează view() pentru animații bazate pe viewport */
.animated-element {
  animation-timeline: view();
}

3. Offset-uri de derulare

Offset-urile de derulare definesc punctele de început și de sfârșit ale cronologiei de derulare care corespund începutului și sfârșitului animației. Aceste offset-uri vă permit să controlați cu precizie când începe și se oprește animația în funcție de poziția de derulare. Puteți utiliza cuvinte cheie precum cover, contain, entry, exit și valori numerice (de exemplu, 100px, 50%) pentru a defini aceste offset-uri.

/* Animează atunci când elementul este complet vizibil */
.animated-element {
  scroll-timeline-axis: block;
  animation-timeline: view(block);
  animation-range: entry 0% cover 100%;
}

/* Start animația la 100px de sus, sfârșește când partea de jos este la 200px de partea de jos a viewport-ului */
.animated-element {
  scroll-timeline-axis: block;
  animation-timeline: view(block);
  animation-range: 100px exit 200px;
}

4. Axa cronologiei de derulare

Proprietatea scroll-timeline-axis specifică axa de-a lungul căreia progresează cronologia de derulare. Poate fi setată la block (derulare verticală), inline (derulare orizontală), both (ambele axe) sau auto (determinată de browser). Când utilizați `view()`, se recomandă să specificați în mod explicit axa.

/* Definește axa cronologiei de derulare */
.scroll-container {
  scroll-timeline-axis: y;
}

/* Cu view */
.animated-element {
  scroll-timeline-axis: block;
}

5. Intervalul de animație

Proprietatea `animation-range` definește offset-urile de derulare (puncte de început și de sfârșit) care corespund începutului (0%) și sfârșitului (100%) animației. Acest lucru vă permite să mapați poziții specifice de derulare la progresul animației.

/* Maparea întregului interval de derulare la animație */
.animated-element {
  animation-range: entry 0% cover 100%;
}

/* Porniți animația la jumătatea intervalului de derulare */
.animated-element {
  animation-range: 50% 100%;
}

/* Utilizează valori în pixeli */
.animated-element {
  animation-range: 100px 500px;
}

Exemple practice și cazuri de utilizare

Să explorăm câteva exemple practice despre modul de utilizare a cronologiilor de derulare CSS pentru a crea animații captivante:

1. Bară de progres

Un caz de utilizare clasic pentru animațiile bazate pe derulare este o bară de progres care se umple pe măsură ce utilizatorul derulează în jos pe pagină. Aceasta oferă feedback vizual cu privire la cât de departe a progresat utilizatorul prin conținut.

/* CSS */
.progress-container {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 5px;
  background-color: #eee;
  z-index: 1000;
}

.progress-bar {
  height: 5px;
  background-color: #4CAF50;
  width: 0%;
  animation: fillProgressBar linear;
  animation-timeline: view();
  animation-range: entry 0% cover 100%;
  transform-origin: 0%;
  animation-fill-mode: forwards;
}

@keyframes fillProgressBar {
  to {
    width: 100%;
  }
}

/* HTML */
<div class="progress-container">
  <div class="progress-bar"></div>
</div>
<div class="content">
  <p>... conținutul tău aici ...</p>
</div>

Acest cod creează o bară de progres fixă ​​în partea de sus a paginii. Animația fillProgressBar mărește treptat lățimea barei de progres de la 0% la 100% pe măsură ce utilizatorul derulează în jos pe pagină. animation-timeline: view() leagă animația de progresul de derulare al viewport-ului, iar `animation-range` leagă derularea de progresul vizual.

2. Estompare imagine

Puteți utiliza cronologiile de derulare pentru a crea un efect subtil de estompare pentru imagini pe măsură ce intră în viewport, îmbunătățind atractivitatea vizuală a conținutului dvs.

/* CSS */
.fade-in-image {
  opacity: 0;
  transform: translateY(20px);
  animation: fadeIn linear;
  animation-timeline: view();
  animation-range: entry 25% cover 75%;
  animation-fill-mode: both;
}

@keyframes fadeIn {
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* HTML */
<img src="image.jpg" class="fade-in-image" alt="Image">

Acest cod ascunde inițial imaginea și o poziționează ușor sub poziția sa finală. Pe măsură ce imaginea derulează în vizualizare, animația fadeIn mărește treptat opacitatea și mută imaginea în poziția sa inițială, creând un efect de estompare lină. `animation-range` specifică faptul că animația începe atunci când marginea superioară a imaginii este la 25% în viewport și se finalizează atunci când marginea inferioară este la 75% în viewport.

3. Elemente lipicioase

Obțineți efecte „lipicioase” – unde elementele se lipesc de partea de sus a viewport-ului în timpul derulării – dar cu control și tranziții îmbunătățite. Imaginați-vă o bară de navigare care se transformă lin într-o versiune condensată pe măsură ce utilizatorul derulează în jos.

/*CSS*/
.sticky-container {
  height: 200px; /* Ajustați după nevoile dvs. */
  position: relative;
}

.sticky-element {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  background-color: #f0f0f0;
  padding: 20px;
  box-sizing: border-box;
  animation: stickyAnimation linear;
  animation-timeline: view();
  animation-range: entry 0% cover 20%; /* Ajustați intervalul după necesități */
  animation-fill-mode: both;
  z-index: 10;
}

@keyframes stickyAnimation {
  0% {
    position: absolute;
    top: 0;
  }
  100% {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    background-color: #ddd; /* Schimbați culoarea pentru a indica lipirea */
  }
}

În acest exemplu, elementul face tranziția de la `position: absolute` la `position: fixed` pe măsură ce intră în primele 20% din viewport, creând un efect lin de „lipire”. Ajustați proprietățile `animation-range` și CSS din cadrul keyframes pentru a personaliza comportamentul.

4. Efect de derulare parallax

Creați un efect de derulare parallax în care diferite straturi de conținut se mișcă cu viteze diferite pe măsură ce utilizatorul derulează, adăugând profunzime și interes vizual paginii.

/* CSS */
.parallax-container {
  position: relative;
  height: 500px; /* Ajustați după nevoile dvs. */
  overflow: hidden;
}

.parallax-layer {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-size: cover;
  background-position: center;
}

.parallax-layer--bg {
  background-image: url("background.jpg");
  animation: parallaxBg linear;
  animation-timeline: view();
  animation-range: entry 0% cover 100%;
  transform-origin: 50% 0%;
  animation-fill-mode: both;
}

.parallax-layer--fg {
 background-image: url("foreground.png");
  animation: parallaxFg linear;
  animation-timeline: view();
  animation-range: entry 0% cover 100%;
  transform-origin: 50% 0%;
  animation-fill-mode: both;
}

@keyframes parallaxBg {
 to {
    transform: translateY(50px); /* Ajustați pentru viteza parallax */
 }
}

@keyframes parallaxFg {
 to {
   transform: translateY(100px); /* Ajustați pentru viteza parallax */
 }
}

/* HTML */
<div class="parallax-container">
  <div class="parallax-layer parallax-layer--bg"></div>
  <div class="parallax-layer parallax-layer--fg"></div>
</div>

Acest exemplu creează două straturi cu diferite imagini de fundal. Animațiile `parallaxBg` și `parallaxFg` translează straturile la viteze diferite, creând efectul parallax. Ajustați valorile `translateY` în keyframes pentru a controla viteza fiecărui strat.

5. Animație de dezvăluire a textului

Dezvăluiți text caracter cu caracter pe măsură ce utilizatorul trece de un anumit punct, atrăgând atenția și îmbunătățind aspectul de povestire al conținutului.

/* CSS */
.text-reveal-container {
  position: relative;
  overflow: hidden;
}

.text-reveal {
  display: inline-block;
  white-space: nowrap;
  overflow: hidden;
  animation: textRevealAnimation steps(1) forwards;
  animation-timeline: view();
  animation-range: entry 25% cover 75%;
  animation-fill-mode: both;
  width: 0;
}

@keyframes textRevealAnimation {
  to {
    width: 100%;
  }
}

/* HTML */
<div class="text-reveal-container">
  <span class="text-reveal">Acest text va fi dezvăluit pe măsură ce derulați.</span>
</div>

Acest exemplu utilizează funcția de sincronizare `steps(1)` pentru a dezvălui textul caracter cu caracter. `width: 0` ascunde inițial textul, iar `textRevealAnimation` mărește treptat lățimea pentru a dezvălui întregul text. Ajustați `animation-range` pentru a controla când începe și se termină animația de dezvăluire a textului.

Compatibilitatea browserului și polyfill-uri

Cronologiile de derulare CSS sunt o tehnologie relativ nouă, iar suportul browserului este încă în curs de dezvoltare. La sfârșitul anului 2023, browserele majore precum Chrome și Edge oferă un suport bun. Firefox și Safari lucrează activ la implementarea funcției. Este esențial să verificați compatibilitatea curentă a browserului înainte de a implementa cronologiile de derulare în producție. Puteți utiliza resurse precum Can I use pentru a verifica starea de asistență.

Pentru browserele care nu acceptă în mod nativ cronologiile de derulare, puteți utiliza polyfill-uri pentru a oferi o funcționalitate similară. Un polyfill este o bucată de cod JavaScript care implementează funcția lipsă utilizând JavaScript. Sunt disponibile mai multe polyfill-uri pentru cronologiile de derulare CSS, permițându-vă să utilizați funcția chiar și în browserele mai vechi.

Considerații de accesibilitate

În timp ce animațiile bazate pe derulare pot îmbunătăți experiența utilizatorului, este crucial să se ia în considerare accesibilitatea pentru a vă asigura că site-ul dvs. web este utilizabil de către toată lumea, inclusiv utilizatorii cu dizabilități.

Cele mai bune practici și sfaturi

Iată câteva bune practici și sfaturi pentru utilizarea eficientă a cronologiilor de derulare CSS:

Considerații globale pentru designul de animație

Când proiectați animații pentru un public global, rețineți aceste puncte:

Concluzie

Cronologiile de derulare CSS oferă o modalitate puternică și eficientă de a crea animații web captivante și interactive. Prin conectarea progresului animației la poziția de derulare, puteți crea experiențe mai dinamice, receptive și ușor de utilizat. Deși suportul browserului este încă în curs de dezvoltare, beneficiile utilizării cronologiilor de derulare CSS – performanțe îmbunătățite, o abordare declarativă și o experiență de utilizare îmbunătățită – le fac un instrument valoros pentru dezvoltatorii web moderni. Pe măsură ce experimentați cu cronologiile de derulare, amintiți-vă să acordați prioritate accesibilității și să luați în considerare contextul global al publicului dvs. pentru a crea experiențe web cu adevărat incluzive și captivante.

Îmbrățișați această tehnologie nouă și interesantă și deblocați o lume de posibilități creative pentru proiectele dvs. web. Viitorul animației web este aici și este condus de derulare!

Cronologia de defilare CSS: Animație bazată pe poziția de derulare | MLOG