{}const=>[]async()letfn</>var
DéveloppementMobile

Comment faire « comme chez Tinkoff/Yandex » : des animations et des micro-interactions qui rendent immédiatement l'application « coûteuse »

Pas besoin d'être un designer ou de connaître la 3D. Des animations CSS simples et des astuces JavaScript qui améliorent immédiatement le niveau de votre application. Guide étape par étape avec code et explications, des boutons aux fenêtres modales.

К

Kodik

Auteur

7 min de lecture

Avez-vous remarqué à quel point les applications Tinkoff, Yandex ou Alfa-Bank sont agréables à utiliser ? Les boutons répondent aux pressions, les éléments apparaissent en douceur, les chargements ne sont pas énervants, mais au contraire, ils sont agréables à l'œil. Ce n'est pas de la magie et ce n'est pas une armée de designers. C'est un ensemble de techniques spécifiques que vous pouvez maîtriser.

Pourquoi est-ce important ?

L'utilisateur ne dira pas : « Wow, il y a une transition avec cubic-bezier ! ». Mais il dira : « Quelle belle application » ou « Ça a l'air un peu bon marché ». Les animations de haute qualité fonctionnent à un niveau subconscient :

  • Créent une sensation de vitesse — même si le serveur est lent

  • Donnent un retour d'information — l'utilisateur comprend que son action a été prise en compte

  • Réduire la charge cognitive - les transitions en douceur aident le cerveau à comprendre ce qui se passe

  • Inspire confiance — les détails montrent que l'équipe se soucie du produit

🔥 100 000+ étudiants déjà avec nous

Marre de lire la théorie ?
Il est temps de coder !

Kodik — une appli où tu apprends à coder par la pratique. Mentor IA, leçons interactives, projets réels.

🤖 IA 24/7
🎓 Certificats
💰 Gratuit
🚀 Commencer
Ont rejoint aujourd'hui

1. Des squelettes au lieu de spinners

Quel est le problème avec les spinners ?

Le cercle tournant ne donne aucune information. L'utilisateur ne sait pas combien de temps attendre et ce qui est en cours de chargement.

Ce qu'ils font chez Tinkoff :

Ils montrent le « fantôme » du contenu futur : des blocs gris à la place du texte, des images, des boutons. C'est ce qu'on appelle skeleton screen ou squelette.

.skeleton {
  background: linear-gradient(
    90deg,
    #f0f0f0 25%,
    #e0e0e0 50%,
    #f0f0f0 75%
  );
  background-size: 200% 100%;
  animation: loading 1.5s infinite;
  border-radius: 4px;
}

@keyframes loading {
  0% {
    background-position: 200% 0;
  }
  100% {
    background-position: -200% 0;
  }
}

Pourquoi cela fonctionne :

Le cerveau perçoit le squelette comme « le contenu est presque chargé », et non « vous devrez attendre un temps indéterminé ». Selon les recherches, les utilisateurs estiment que le temps de chargement avec les squelettes est de 30 à 40 % plus rapide qu'avec les spinners.

2. Réponse tactile aux actions

Effet de pression sur le bouton :

Lorsque vous appuyez sur un bouton dans l'application Yandex, il « tombe » légèrement. Cela imite un bouton physique.

.button {
  background: #ffdd2d;
  border: none;
  padding: 12px 24px;
  border-radius: 8px;
  font-weight: 600;
  cursor: pointer;
  transition: all 0.15s cubic-bezier(0.4, 0, 0.2, 1);
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}

.button:hover {
  transform: translateY(-2px);
  box-shadow: 0 6px 16px rgba(0, 0, 0, 0.15);
}

.button:active {
  transform: translateY(0);
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}

Effet d'entraînement (vague) :

Lorsque vous cliquez sur le point de pression, l'onde diverge. C'est une fonctionnalité de Material Design, mais tout le monde l'utilise.

function createRipple(event) {
  const button = event.currentTarget;
  const circle = document.createElement('span');
  const diameter = Math.max(button.clientWidth, button.clientHeight);
  const radius = diameter / 2;

  circle.style.width = circle.style.height = `${diameter}px`;
  circle.style.left = `${event.clientX - button.offsetLeft - radius}px`;
  circle.style.top = `${event.clientY - button.offsetTop - radius}px`;
  circle.classList.add('ripple');

  const ripple = button.getElementsByClassName('ripple')[0];
  if (ripple) {
    ripple.remove();
  }

  button.appendChild(circle);
}

3. Transitions intelligentes entre les états

Mauvais :

Le contenu disparaît et apparaît. Brusquement. À moindre coût.

Bien :

Nous utilisons des transitions en douceur avec transform et opacity.

.fade-enter {
  opacity: 0;
  transform: translateY(10px);
}

.fade-enter-active {
  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.fade-enter-to {
  opacity: 1;
  transform: translateY(0);
}

Règle d'or : Toute modification du DOM doit être animée. Pas d'apparitions/disparitions soudaines.

4. Micro-animations de formes

En mettant l'accent sur l'entrée :

.input {
  border: 2px solid #e0e0e0;
  padding: 12px;
  width: 100%;
  transition: all 0.2s ease;
  outline: none;
}

.input:focus {
  border-color: #ffdd2d;
  box-shadow: 0 0 0 4px rgba(255, 221, 45, 0.1);
}

.input-label {
  position: absolute;
  left: 12px;
  top: 12px;
  color: #999;
  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
  pointer-events: none;
}

.input:focus + .input-label,
.input:not(:placeholder-shown) + .input-label {
  top: -8px;
  left: 8px;
  font-size: 12px;
  background: white;
  padding: 0 4px;
  color: #ffdd2d;
}

Validation avec animation :

.input-error {
  border-color: #ff3333;
  animation: shake 0.4s;
}

@keyframes shake {
  0%, 100% { transform: translateX(0); }
  10%, 30%, 50%, 70%, 90% { transform: translateX(-5px); }
  20%, 40%, 60%, 80% { transform: translateX(5px); }
}

5. Les barres de progression qui ne vous énervent pas

Mauvaise barre de progression : se déplace simplement. Ennuyeux.

Une bonne barre de progression : fluide, avec une légère lueur, montre des étapes spécifiques.

.progress-bar {
  width: 100%;
  height: 6px;
  background: #f0f0f0;
  border-radius: 10px;
  overflow: hidden;
  position: relative;
}

.progress-fill {
  height: 100%;
  background: linear-gradient(90deg, #ffdd2d, #ffc700);
  border-radius: 10px;
  transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  position: relative;
  box-shadow: 0 0 10px rgba(255, 221, 45, 0.5);
}

6. Fenêtres modales avec apparition intelligente

Incorrect : la fenêtre apparaît simplement.

Correct : l'arrière-plan s'assombrit, la fenêtre apparaît avec un léger effet de zoom et un mouvement de bas en haut.

.modal-overlay {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: rgba(0, 0, 0, 0);
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background 0.3s ease;
  pointer-events: none;
}

.modal-overlay.active {
  background: rgba(0, 0, 0, 0.5);
  pointer-events: all;
}

.modal {
  background: white;
  border-radius: 16px;
  padding: 24px;
  max-width: 500px;
  width: 90%;
  transform: scale(0.9) translateY(20px);
  opacity: 0;
  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.modal-overlay.active .modal {
  transform: scale(1) translateY(0);
  opacity: 1;
}

7. Cartes avec effets de survol

Cartes de produits, publications, projets — ils doivent répondre au survol :

.card {
  background: white;
  border-radius: 12px;
  padding: 20px;
  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  cursor: pointer;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
}

.card:hover {
  transform: translateY(-4px);
  box-shadow: 0 12px 24px rgba(0, 0, 0, 0.15);
}

.card img {
  transition: transform 0.3s ease;
}

.card:hover img {
  transform: scale(1.05);
}

8. Indicateurs de charge pour les actions

Lorsque l'utilisateur clique sur « Envoyer », le bouton doit indiquer que le processus est en cours :

.submit-button {
  position: relative;
  min-width: 120px;
  transition: all 0.3s ease;
}

.submit-button.loading {
  pointer-events: none;
}

.spinner {
  width: 20px;
  height: 20px;
  animation: rotate 1s linear infinite;
}

@keyframes rotate {
  100% { transform: rotate(360deg); }
}

9. Toasts et notifications

Principes :

  • Apparaissent sur le côté (en haut à droite ou à gauche)

  • Entrée en douceur

  • Disparaissent automatiquement après 3-5 secondes

  • Peut être fermé manuellement

.toast {
  position: fixed;
  top: 20px;
  right: -300px;
  background: white;
  padding: 16px 20px;
  border-radius: 8px;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
  min-width: 250px;
  transition: right 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.toast.show {
  right: 20px;
}

10. Principes importants des animations

Timing functions (fonctions de temps) :

N'utilisez pas simplement ease ou linear. Étudiez cubic-bezier :

  • ease-in-out - accélère et ralentit en douceur

  • cubic-bezier(0.4, 0, 0.2, 1) — Material Design easing, très agréable

  • cubic-bezier(0.25, 0.46, 0.45, 0.94) — easeOutQuad pour des animations rapides

Durée :

  • Micro-interactions (survol, clics) : 100-200 ms

  • Transitions entre les états: 200-300ms

  • Fenêtres modales, tiroirs: 300-400ms

  • Animations de pages: 400-600ms

Plus de 600 ms, c'est déjà trop lent.

Règle des 60 FPS :

Animez uniquement les propriétés qui ne provoquent pas de reflow :

  • transform, opacity

  • width, height, top, left, margin

Conclusion

Les animations de qualité ne sont pas une question de complexité, mais de détails. Vous n'avez pas besoin d'apprendre la 3D ou la physique. Il vous suffit de :

  1. Ajouter de la fluidité à tout

  2. Donner un retour d'information sur les actions

  3. Utiliser les bonnes fonctions de timing

  4. Être cohérent

Commencez par un bouton. Rendez-le agréable. Ensuite, un autre. Ensuite, les formulaires. Ensuite, les cartes. Dans un mois, votre application vaudra un million.

Tout cela et bien plus encore peut être étudié dans Codique - en détail, avec des exercices pratiques et des exemples réels. Nous analysons non seulement la théorie, mais nous montrons également comment tout cela fonctionne dans des projets réels.

Et si vous avez besoin d'aide, si vous avez des questions ou si vous souhaitez discuter du code, nous avons une énorme communauté active dans Chaîne Telegram! Plus de 2000 développeurs qui vous aideront, vous conseilleront et vous soutiendront toujours.

👉 Commencer à apprendre avec Kodik 🔥 Rejoindre Telegram

🎯Arrête de reporter

Tu as aimé l'article ?
Place à la pratique !

Avec Kodik, tu ne lis pas seulement — tu codes immédiatement. Théorie + pratique = vraies compétences.

Pratique instantanée
🧠L'IA explique le code
🏆Certificat

Sans inscription • Sans carte