Tranziții și animații CSS
Acest tutorial acoperă tot ce trebuie să știi despre tranziții și animații în CSS — de la concepte de bază, la tehnici avansate. Este structurat progresiv, astfel încât să poți învăța pas cu pas, chiar dacă pornești de la zero.
Tranziții CSS - Ghid complet
Tranzițiile CSS permit modificarea lină a valorilor proprietăților stilistice, fără a folosi JavaScript. În loc ca o schimbare să fie instantanee, ea se desfășoară gradual, oferind o experiență vizuală mai fluidă și mai plăcută.
Ce sunt tranzițiile
Tranzițiile sunt efecte vizuale care apar atunci când o proprietate CSS se modifică. Ele pot fi aplicate la hover, focus, activare sau orice altă schimbare de stare.
Proprietăți implicate
transition-property- definește ce proprietate va fi animatătransition-duration- durata tranziției (ex:0.5s,200ms)transition-timing-function- modul în care se desfășoară tranziția (ex:ease,linear)transition-delay- întârzierea înainte de începerea tranziției
Exemplu simplu de tranziție
Tranziția aplicată mai jos modifică culoarea de fundal la hover, folosind forma extinsă:
transition-property
Definește ce proprietate CSS va fi animată. Poate primi:
all- animă toate proprietățile care se pot tranziționabackground-color,width,opacityetc. - animă doar proprietatea specificatănone- dezactivează tranzițiile
transition-duration
Definește cât timp durează tranziția. Valori acceptate:
s- secunde (ex:0.5s)ms- milisecunde (ex:200ms)
transition-timing-function
Definește modul în care se desfășoară tranziția în timp. Controlează viteza de evoluție a animației. Valori acceptate:
ease- începe lent, accelerează, apoi încetinește (implicit)linear- viteza constantă pe tot parcursul tranzițieiease-in- începe lent, apoi accelereazăease-out- începe rapid, apoi încetineșteease-in-out- începe și se termină lentcubic-bezier(x1, y1, x2, y2)- funcție personalizată pentru control avansat
transition-delay
Definește întârzierea înainte ca tranziția să înceapă. Valori acceptate:
0s- fără întârziere0.5s,200msetc. - întârziere personalizată
Forma prescurtată - transition
După ce ai înțeles cum funcționează proprietățile individuale (transition-property,
transition-duration, transition-timing-function, transition-delay), poți
folosi forma prescurtată transition pentru a le combina într-o singură linie.
Structura generală:>
transition: [property] [duration] [timing-function] [delay];
Exemplu:>
transition: background-color 1s ease 0.5s;
Această linie este echivalentă cu:
transition-property: background-color;
transition-duration: 1s;
transition-timing-function: ease;
transition-delay: 0.5s;
Exemplu - Tranziție multiplă cu formă prescurtată
Poți anima mai multe proprietăți în același timp, folosind forma prescurtată:
transition: background-color 0.5s ease, transform 0.3s ease-in;
Acest exemplu animă atât culoarea de fundal, cât și transformarea (scalare) la hover.
Introducere în animații CSS
Animațiile CSS permit controlul detaliat asupra schimbărilor vizuale, folosind reguli @keyframes
și proprietăți dedicate. Spre deosebire de tranziții, animațiile nu depind de o interacțiune directă (hover,
click), ci pot fi declanșate automat și pot fi repetate, inversate sau sincronizate.
Diferența dintre tranziții și animații
- Tranzițiile> - se declanșează la schimbarea unei proprietăți CSS (ex: hover), sunt mai simple
- Animațiile> - se definesc cu
@keyframes, pot fi complexe, repetitive și independente de interacțiune
Proprietăți implicate în animații CSS
@keyframes- definește etapele animațieianimation-name- numele animației (legat de@keyframes)animation-duration- durata unei iterațiianimation-timing-function- modul în care se desfășoară animațiaanimation-delay- întârzierea înainte de începereanimation-iteration-count- de câte ori se repetă animațiaanimation-direction- direcția animației (normal,reverse,alternate)animation-fill-mode- comportamentul înainte/după animație (none,forwards,backwards,both)
Exemplu simplu de animație - pulsare
Acest exemplu creează o animație de tip „puls” care mărește și micșorează un element în mod repetat.
Exemplu simplu de animație - fade in
Acest exemplu face ca un element să apară treptat, crescând opacitatea de la 0 la 1.
Ce sunt funcțiile de temporizare?
Funcțiile de temporizare definesc curba de viteză> a unei animații. Ele determină cum se distribuie mișcarea pe durata animației. Cu alte cuvinte, controlează ritmul cu care un element se transformă în timp.
De exemplu, o animație poate începe lent și accelera spre final, sau invers. Aceste funcții oferă un control fin asupra modului în care utilizatorul percepe mișcarea.
Animații multiple și control avansat
CSS permite aplicarea mai multor animații simultan pe același element. Fiecare animație poate avea propriul nume, durată, funcție de temporizare și comportament. Prin combinarea lor, poți crea efecte complexe și dinamice.
În plus, proprietăți precum animation-delay, animation-fill-mode și
animation-direction oferă control fin asupra modului în care animațiile se comportă înainte, în
timpul și după execuție.
Exemplu - Animație cu formă prescurtată
Poți aplica o animație completă într-o singură linie, folosind forma prescurtată:
animation: bounce 1s ease-in-out infinite alternate;
Acest exemplu face ca elementul să sară vertical la infinit, cu mișcare dus-întors.
Control avansat al animațiilor
CSS-ul e bun pentru efecte simple, dar dacă vrei să controlezi animațiile cu precizie, intră în scenă JavaScript. Poți detecta când se termină o animație, să le sincronizezi între ele sau să le declanșezi condiționat.
1. Evenimente JavaScript: animationend, transitionend
Aceste evenimente se declanșează automat când o animație sau tranziție se încheie. Le poți folosi pentru a lansa alte acțiuni sau a schimba stilul.
2. Sincronizare și chaining
Poți lansa o animație doar după ce alta s-a terminat, folosind animationend sau
setTimeout. Asta îți permite să creezi efecte în lanț.
3. Animații condiționate
Poți porni o animație doar dacă se îndeplinește o condiție - de exemplu, dacă un element are o clasă sau dacă utilizatorul face o acțiune.
Aplicații practice
Acum că stăpânești animațiile și controlul lor, e timpul să le aplici în interfață. Mai jos ai exemple reale, folosite în site-uri și aplicații moderne.
1. Hover effects
Un efect simplu, dar elegant, care oferă feedback vizual la interacțiune. În acest exemplu, cardul se ridică ușor și își schimbă culoarea la hover.
transition: transform 0.3s ease, background-color 0.3s ease;
2. Loader animat
Un loader animat indică progresul sau așteptarea. Mai jos, un cerc pulsează continuu pentru a sugera activitate.
3. Slide-in menu
Un meniu care se glisează din stânga, iar butonul de deschidere dispare când meniul e activ. La închidere, butonul reapare.
4. Carduri animate
Cardurile pot avea efecte la apariție sau interacțiune. În exemplul de mai jos, ele se animă cu fade-in la încărcare.
5. Scroll-based animations (cu JS)
Elementele pot apărea cu efecte când intră în viewport.
Elementele se animă automat la scroll, folosind IntersectionObserver pentru a detecta momentul în
care intră în viewport.
Optimizare și performanță
Animațiile pot îmbunătăți experiența utilizatorului, dar dacă nu sunt bine gândite, pot afecta performanța. În acest capitol, învățăm ce să animăm, cum să folosim GPU-ul și ce practici să aplicăm pentru un UI fluid.
1. Ce proprietăți sunt costisitoare
Nu toate proprietățile CSS sunt egale când vine vorba de performanță. Unele declanșează recalculări complexe și reflow-uri în browser.
❌ Costisitoare: width, height, top, left, margin
✅ Recomandate: transform, opacity
2. GPU vs CPU rendering
Proprietățile precum transform și opacity sunt accelerate de GPU, ceea ce le face
ideale pentru animații fluide. Alte proprietăți sunt procesate de CPU și pot cauza sacadări.
animation: transform 1s ease; /* GPU-friendly */
animation: width 1s ease; /* CPU-intensive */
3. Best practices
Ca să păstrezi animațiile rapide și fluide, urmează aceste recomandări:
- Folosește
transformșiopacitypentru animații - Evită modificarea layout-ului în timpul animației
- Testează pe dispozitive reale, nu doar în browser
- Respectă preferințele utilizatorului:
@media (prefers-reduced-motion)
Animațiile nu sunt doar decor — ele sunt parte din ritmul și personalitatea unei interfețe. Dar fără optimizare, frumusețea devine balast.
Alegerea proprietăților potrivite, folosirea GPU-ului și respectarea bunelor practici nu sunt opționale, ci esențiale.
Când performanța e fluidă, utilizatorul nu observă animația — o simte. Iar asta face diferența între un site care arată bine și unul care se simte viu.
🧠 Quiz - CSS Tranziții și Animații
