Introducere în Web Development

Capitolul 8: Animații și tranziții
Greșeli frecvente la tranziții

În această secțiune am să încerc să vă dezvălui ce greșeli am făcut înainte să înțeleg tranzițiile.

Tranziție pe selectorul nepotrivit

Tranziția trebuie pusă pe un selector care se aplică mereu pe element.

Un exemplu simplu e atunci când vrem să scalăm un buton la hover cu mouse-ul.

Instinctul de juniori ne face să vedem "hover" în enunțul problemei și să facem:

                    a:hover {
  transform: scale(1.1);
  transition: transform 250ms;
}
                

Dar psudo-clasa :hover e aplicată doar atunci când avem mouse-ul peste element. În rest, elementul nostru va avea transition: none și nu îi va fi aplicată nicio tranziție.

Corect ar fi să aplicăm tranziția pe selectorul care va fi mereu aplicat, și doar modificările să le punem pe cazurile speciale:

                    a {
  transition: transform 250ms;
}

a:hover {
  transform: scale(1.1);
}

                
Conținutul continuă după reclamă

Tranziție cu display: none

Proprietatea display nu poate fi animată, dar ce ne facem când vrem să ascundem un element prin animație.

În funcție de context, putem să facem tranziție pe dimensiuni (height sau width), pe proprietatea opacity, sau pe transform: scale(...).

Dacă vrem să ascundem cu adevărat, sau chiar să ștergem elementul, vom putea folosi JS pentru a detecta când s-a încheiat tranziția.

                    .parent a {
  display: none;
  transition: all 250ms;
}

.parent:hover a {
  display: block;
}
                
Greșit
                    .parent a {
  transform: scale(0);
  transform-origin: top;
  transition: transform 250ms;
}
.parent:hover a {
  transform: scale(1);
}
                
Poate fi mai bine

Tranziție pe transformări

Poate doar creierul meu dă rateuri de genul ăsta, dar am încercat de mai multe ori să pun tranziție pe translate, rotate sau scale și constat că nu funcționează.

Tranzițiile funcționează exclusiv cu proprietăți CSS, nu pe funcții de transformare.
Tranzițiile funcționează excelent cu transformări dacă avem transition-property: transform;.

                    transform: rotate(180deg);
transition: rotate 1s;
                
Greșit
                    transform: rotate(180deg);
transition: transform 1s;
                
Corect
                    rotate: 180deg;
transition: rotate 1s;
                
Corect (proprietăți noi)

Adăugare de tranziție care le șterge pe celelalte

Atunci când pe un element avem mai multe tranziții, am putea avea nevoie la un moment dat să adăugăm o nouă tranziție pe lângă cele deja existente.

De fiecare dată când setăm o tranziție, celelalte vor fi șterse. Nu există altă soluție decât să scrii din nou tranzițiile, la care să o adaugi pe cea nouă.

                    a {
  transition: color 250ms;
}

a.target {
  transition: transform 0.5s;
}
/*
Rezultat:
La ancorele cu clasa target 
se va aplica doar tranziția 
cu transform
*/

                
Greșit
                    a {
  transition: color 250ms;
}

a.target {
  transition: 
    color 250ms, 
    transform 0.5s;
}
/*
Rezultat:
La ancorele cu clasa target 
se vor aplica ambele tranziții
*/
                
Poate asta doreai
Designed by