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

Animations sans JS : CSS sait déjà tout faire

Les nouvelles fonctionnalités CSS vous permettent de créer des animations complexes sans JavaScript. Nous analysons ce qui a changé et comment l'utiliser.

К

Kodik

Auteur

4 min de lecture

Jusqu'à récemment, « l'apparition lors du défilement » ou « la transition entre les écrans » signifiait des gestionnaires d'événements et un tas de code JS. Aujourd'hui, les moteurs de recherche prennent le rendu sur eux-mêmes, et nous décrivons l'intention en CSS. Avantages : moins de dépendances, fluidité au niveau du compositeur, limitations de performances plus claires.

🚀 Scroll-linked animations: @scroll-timeline

Nous associons la progression de l'animation au défilement. Le navigateur lui-même donne la « chronologie » — il reste à y attacher des images clés.

@scroll-timeline fade-tl {
  source: auto;               /* ближайший скроллируемый контейнер */
  orientation: block;         /* по оси прокрутки */
  scroll-offsets: 0%, 100%;   /* начало/конец */
}

.section__item{
  animation: fade-in 1s both linear;
  animation-timeline: fade-tl;        /* ← магия */
  animation-range: entry 0% cover 60%;/* когда и как играться */
}

@keyframes fade-in {
  from { opacity: 0; transform: translateY(24px); }
  to   { opacity: 1; transform: translateY(0); }
}

Où l'utiliser : apparition des cartes, parallaxe, barre de progression de lecture, titres de sections fixes.

🔥 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

🔁 View Transitions API : « dégradés » entre les états

Transitions natives entre les pages/états sans synchronisation manuelle. JS lance la transaction, CSS la met en forme.

/* CSS */
::view-transition-old(root),
::view-transition-new(root){
  animation: fade .35s ease;
}

@keyframes fade {
  from { opacity: .001 }
  to   { opacity: 1 }
}

/* JS (одна строка в обработчике) */
// document.startViewTransition(() => router.navigate('/about'));

Astuce : vous pouvez nommer les éléments via view-transition-name et faire un « vol » de blocs spécifiques (image de héros, titre).

📦 Requêtes de conteneur + animations

Les composants répondent à la largeur/hauteur du parent, pas à l'ensemble de la fenêtre. Vous pouvez facilement « réassembler » la carte lorsque vous changez de zone.

.card{
  container-type: inline-size; /* объявили контейнер */
}

@container (min-width: 520px){
  .card__media{ inline-size: 280px }
  .card__body{ animation: grow .4s ease }
}

@keyframes grow{
  from{ transform: scale(.96) }
  to  { transform: scale(1) }
}

🧲 Sélecteur d'état :has() sans JS

La réaction du parent à l'état/présence d'éléments enfants est un déclencheur pour l'animation.

.accordion:has(input:checked) .accordion__panel{
  grid-template-rows: 1fr;          /* раскрываем */
  transition: grid-template-rows .3s ease;
}
.accordion:not(:has(input:checked)) .accordion__panel{
  grid-template-rows: 0fr;          /* скрываем */
}
.card:has(:hover){ transform: rotate(1.5deg) scale(1.03); transition:.25s }

🧩 Propriétés de transformation individuelles et composition d'animations

Au lieu de la « grande » transform, les fonctions indépendantes translate, scale, rotate sont disponibles. Et la propriété animation-composition vous permet d'ajouter des effets.

.chip{
  translate: 0 8px;        /* читаемее и безопаснее */
  rotate: 1deg;
  transition: translate .25s ease, rotate .25s ease;
}
.chip:hover{ translate: 0 0; rotate: 0deg }

.pulse{ animation: pulse 1.2s infinite ease; }
.float{ animation: float 3s infinite ease alternate; }
.pulse, .float{ animation-composition: add; } /* суммируем эффекты */

@keyframes pulse{ from{scale:1} 50%{scale:1.04} to{scale:1} }
@keyframes float{ from{translate:0 0} to{translate:0 -8px} }

📊 Avant/Après

Tâche

Précédemment (JS)

Maintenant (CSS)

Apparition lors du défilement

Gestionnaire de défilement, classes

@scroll-timeline, animation-range

Parallaxe

Écoute, calcul des positions

Scroll‑timeline sur le conteneur

Navigation entre les pages

Synchronisation manuelle

View Transitions

Réaction à l'état

Événements / changement de classe

:has() sur le parent

Composer des effets

Chronologies complexes en JS

animation-composition: add;

CSS a atteint un niveau où la plupart des animations d'interface sont créées de manière déclarative et fonctionnent plus rapidement. Utilisez @scroll-timeline, View Transitions, :has(), Container Queries et les propriétés transform individuelles, et laissez JS là où la logique est nécessaire, pas le rendu.

📚 Vous voulez approfondir le sujet ?

Dans l'application Code vous trouverez des leçons détaillées sur différents sujets, des exercices pas à pas, des analyses d'erreurs et des exercices pratiques directement sur votre téléphone ou votre navigateur.

Et si vous voulez être au courant des nouveautés, des nouvelles fonctionnalités et des contenus utiles, abonnez-vous à notre Chaîne Telegram. C'est confortable, professionnel et avec amour pour le code ❤️

💬 Quels effets avez-vous déjà transportés de JS vers CSS et qu'est-ce qui a donné le plus de retour ?

🎯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