Texte✨ Premium

Word by Word

Les mots surgissent l'un après l'autre avec un fondu et une montée douce — révélation dramatique construite sur une seule animation CSS et du JS vanilla.

JSCSSWords

Vous aurez accès à la démo interactive avec un compte gratuit.

Cet effet fait partie d'Effect.Labs — 811 effets vanilla, une partie gratuite, une partie premium. Texte comprend 56 effets, dont 4 gratuits. Découvrir la catégorie →

3 exemples d'usage

Accroche hero — Titre qui se construit mot à mot — Word by Word exemple 1

① Accroche hero — Titre qui se construit mot à mot

QuandLa page d'accueil ou une landing de campagne charge et le titre principal révèle ses mots l'un après l'autre pour capter l'attention dès la première seconde.
PourquoiLe suspense mot à mot oblige l'œil à rester sur le titre pendant toute la durée de l'animation — 1,5 à 2 s de rétention sans aucun élément décoratif supplémentaire.
Réglagesdelay 0,3 s entre les mots, animation-duration 0,7 s, font-size 3,5–5 rem, translateY initial 30 px pour accentuer la montée.
Pull quote éditorial — Citation forte d'article ou de rapport — Word by Word exemple 2

② Pull quote éditorial — Citation forte d'article ou de rapport

QuandUne citation clé (interview, conférence, étude de cas) doit s'imposer visuellement dans un article ou une longue page de vente — la révélation mot à mot lui donne du poids sans animation de fond.
PourquoiL'animation mot à mot force la lecture linéaire : le visiteur ne peut pas scanner la phrase d'un coup d'œil, ce qui améliore la mémorisation du message.
Réglagesdelay 0,2 s, animation-duration 0,5 s, font-size 1,8–2,5 rem, translateY 12 px — entrée sobre pour rester dans le registre éditorial.
Slide de pitch — Accroche ou conclusion de présentation à fort impact — Word by Word exemple 3

③ Slide de pitch — Accroche ou conclusion de présentation à fort impact

QuandLa dernière slide d'un pitch deck ou d'une keynote affiche la phrase de clôture : chaque mot surgit l'un après l'autre, laissant au public le temps d'absorber avant que la phrase soit complète.
PourquoiDans une présentation, la lenteur est une qualité — le rythme mot-à-mot impose l'attention et le silence, là où un texte déjà visible serait ignoré ou survolé. L'animation exploite et justifie naturellement le délai de 0,35 s.
Réglagesdelay 0,35 s, animation-duration 0,7 s, font-size 3–4 rem, translateY 30 px — rythme oratoire, pensé pour une projection plein écran.

Comment ça marche

L'effet repose sur une animation CSS unique, wordAppear, qui fait passer chaque mot de opacity:0; transform:translateY(20px) à son état final en 0,6 s avec une courbe ease et un fill-mode:forwards. Chaque mot est placé dans un <span> avec un animation-delay inline calculé par la fonction JS splitWords : le premier mot à 0 s, puis +0,3 s par mot supplémentaire.

La fonction splitWords(el, text, delay) découpe la chaîne par espaces, vide le conteneur cible, crée un <span> par mot avec son animation-delay calculé (i * delay + 's'), et insère les nœuds dans le DOM. Dès leur insertion, la règle CSS .text-word-by-word span prend le relais et lance les animations en cascade — aucun JS supplémentaire requis pour le rendu initial.

Le bouton Replay vide l'élément (innerHTML = ''), attend 50 ms pour que le navigateur purge les styles calculés et réinitialise le cycle d'animation, puis rappelle initWordByWord(). Ce délai est nécessaire : supprimer et réinsérer immédiatement les spans sans pause empêche le navigateur de redémarrer le @keyframes.

Note de code : dans la version d'origine, replayWordByWord et splitWords sont définies à l'intérieur de l'IIFE et non exposées globalement — le bouton onclick ne fonctionnera pas sans adaptation (voir FAQ). L'animation initiale, elle, fonctionne en pur CSS dès que les <span> sont dans le DOM.

Accessibilité

  • prefers-reduced-motion absent : l'effet ne vérifie pas la préférence système — tous les mots s'animent même si l'utilisateur préfère réduire le mouvement. Pour couvrir ce cas, ajoutez : @media (prefers-reduced-motion: reduce) { .text-word-by-word span { animation: none; opacity: 1; transform: none; } }.
  • Le texte de chaque mot est dans le DOM en clair : les lecteurs d'écran lisent la phrase complète sans attendre la fin de l'animation.
  • Le bouton Replay est un élément <button> natif, focusable au clavier (Tab · Entrée · Espace) sans configuration supplémentaire.
  • Texte blanc sur fond sombre (#0a0a0f) : ratio de contraste supérieur à 10:1 — conforme WCAG AA et AAA.
  • Aucun attribut aria-* ni role sur le conteneur : ajouter aria-label si le texte animé est le seul contenu accessible de la section.

Compatibilité navigateur

Nécessite CSS3 @keyframes et animation-fill-mode — disponibles dans tous les navigateurs modernes depuis 2013. Zéro dépendance externe, aucun canvas requis.

Chrome 26+✓ Complet
Firefox 16+✓ Complet
Safari 9+✓ Complet
Edge 12+✓ Complet
Mobile iOS✓ Complet
Android Chrome✓ Complet

Si les animations CSS sont désactivées (mode haut contraste sous Windows, navigateur ancien), tous les spans s'affichent à <code>opacity:0</code> par défaut — le texte disparaît. Pour garantir la lisibilité sans animation, ajoutez <code>@media (prefers-reduced-motion: reduce) { .text-word-by-word span { opacity: 1; transform: none; animation: none; } }</code>.

Le code

Structure HTML à coller dans votre page (CSS + JS disponibles avec un compte premium) :

index.html — structure
<div class="demo-preview">
  <span class="demo-text text-word-by-word" id="wordByWordText">
    <span style="animation-delay: 0s">WORD</span>
    <span style="animation-delay: 0.3s">BY</span>
    <span style="animation-delay: 0.6s">WORD</span>
  </span>
  <button class="replay-btn" onclick="replayWordByWord()">Replay</button>
</div>
🔒 Débloquer le code complet — à partir de 2,99 € le 1er mois

HTML + CSS + JS complet, prêt à coller — avec des centaines d'effets premium.

Personnaliser

Options passées à l'API ou attributs data-* :

Option / propriétéDéfautEffet
delay (arg. splitWords) 0.3 Secondes entre l'apparition de deux mots consécutifs. 0,5 s = rythme dramatique ; 0,1 s = cascade rapide.
animation-duration (.text-word-by-word span) 0.6s Durée de l'entrée de chaque mot. 0,9 s = fondu très doux ; 0,25 s = claquement sec.
translateY initial (.text-word-by-word span) 20px Hauteur de départ avant la montée. 0 px = fondu pur sans translation ; 40 px = entrée spectaculaire depuis le bas.
animation-timing-function ease Courbe de l'animation. ease-out pour une décélération naturelle ; cubic-bezier(0.22,1,0.36,1) pour un overshoot élastique.
font-size (.demo-text) 2.5rem Taille du texte. 4–6 rem pour un hero plein écran ; 1,5 rem pour un sous-titre.
font-weight (.demo-text) 800 Graisse. 700 = bold standard ; 900 = black pour une typographie très affirmée.
letter-spacing (.demo-text) -0.02em Espacement des lettres. Valeur positive (0,1 em) pour un style all-caps espacé ; plus négative (−0,05 em) pour un titre très serré.

FAQ

Remplacez la chaîne 'WORD BY WORD' passée à splitWords() dans initWordByWord() : la fonction découpe automatiquement en mots et calcule les animation-delay. Vous pouvez aussi modifier les <span> directement dans le HTML en ajustant les délais par incréments de 0,3 s.
replayWordByWord est définie à l'intérieur de l'IIFE et n'est pas accessible globalement. Exposez-la avant de fermer l'IIFE : window.replayWordByWord = replayWordByWord;. Veillez également à définir splitWords dans la portée globale ou dans l'IIFE avant qu'elle soit appelée.
Donnez un id distinct à chaque .text-word-by-word et appelez splitWords(el, texte, delay) sur chacun. Chaque instance est autonome — elle ne touche que son propre élément et ses propres <span>.