Texte✨ Premium

Flip Characters

Chaque caractère se retourne sur son axe horizontal au survol — l'effet cascade de lettre en lettre grâce à un délai CSS échelonné, calculé par le JS à l'initialisation.

CSSHover3D

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

Headline de studio — Identité typographique animée — Flip Characters exemple 1

① Headline de studio — Identité typographique animée

QuandLa page d'accueil d'un studio créatif, d'une agence ou d'un portfolio présente son nom ou son slogan en gros titre interactif.
PourquoiSur une grande surface et avec une police lourde, la cascade de retournements lettre par lettre renforce l'identité de marque et signale immédiatement l'interactivité — l'effet exploite au maximum le stagger sur un titre long.
Réglagesfont-size 5–7 rem, font-weight 900, animation-delay increment 0,04 s/char pour que la cascade reste rapide sur un mot long, lettre-spacing -0,03em.
Navigation principale — Items de menu qui se retournent — Flip Characters exemple 2

② Navigation principale — Items de menu qui se retournent

QuandLa barre de navigation d'un site contient 4 à 6 liens courts (Accueil, Projets, À propos, Contact). Chaque libellé flip au survol.
PourquoiLes mots courts (3–7 lettres) donnent une cascade ultra-rapide et précise — la micro-interaction est élégante sans jamais gêner la lecture. L'effet reste accessible : le texte est toujours lisible et la cible de clic ne change pas.
Réglagesfont-size 1,1 rem, font-weight 600, animation duration 0,4 s, stagger 0,03 s/char, couleur text primaire de la charte.
Carte projet ou catégorie — Label dont chaque lettre se retourne — Flip Characters exemple 3

③ Carte projet ou catégorie — Label dont chaque lettre se retourne

QuandUne grille de projets, de produits ou d'articles affiche des noms ou des catégories courtes. Survoler la carte révèle l'animation sur le titre.
PourquoiLe flip sur un mot ou un chiffre court (ex. « DESIGN », « 2025 ») produit un effet propre et mémorable sans surcharger le contenu. Il fonctionne aussi bien en monochrome qu'en couleur, sur fond sombre ou clair.
Réglagesfont-size 2–3 rem, font-weight 800, stagger 0,05 s/char (défaut), combiner avec un léger opacity 0,7 → 1 sur la carte au survol pour coordonner l'entrée.

Comment ça marche

Au chargement, le script cible l'élément portant id="flipText", lit son contenu texte et réinjecte chaque caractère dans un <span> individuel via innerHTML. Chaque span reçoit un style="animation-delay: Ns" calculé à 0,05 s × index — c'est la seule responsabilité du JS ; le reste est purement CSS.

L'animation flipChar tourne le span autour de l'axe X (rotateX) : 0° → 90° → 0°. À 90°, le caractère est vu de tranche et disparaît visuellement, puis revient à plat — l'œil perçoit un « retournement ». La propriété display: inline-block sur chaque span est indispensable : sans elle, transform n'a aucun effet sur les éléments inline.

Le déclencheur est .text-flip:hover span : au survol du conteneur parent, tous les spans reçoivent l'animation en même temps, mais les délais échelonnés créent la cascade visuelle lettre par lettre. La durée totale de la cascade est approximativement (n − 1) × 0,05 s + 0,6 s, où n est le nombre de caractères.

La propriété transition: transform 0,3 s sur chaque span gère le retour à l'état repos quand la souris quitte le conteneur — les lettres reviennent en douceur sans l'animation complète.

Accessibilité

  • prefers-reduced-motion absent : le code ne contient aucune media query prefers-reduced-motion. L'animation flipChar se déclenche même si l'utilisateur a activé la réduction de mouvement dans son OS — à ajouter manuellement si nécessaire : @media (prefers-reduced-motion: reduce) { .text-flip:hover span { animation: none; } }.
  • Le texte reste du texte DOM natif enveloppé dans des spans — les lecteurs d'écran lisent le contenu original sans perturbation, contrairement à un canvas ou une image.
  • Clavier uniquement : l'effet est déclenché par :hover, pas :focus-within. Les utilisateurs naviguant au clavier (Tab) ne voient pas l'animation. Ajouter .text-flip:focus-within span dans la règle d'animation pour corriger.
  • Contraste : l'effet ne définit aucune couleur — le ratio de contraste dépend entièrement de l'implémentation. Vérifier WCAG AA (≥ 4,5:1) selon le fond choisi.
  • L'animation dure 0,6 s et ne boucle pas (iteration-count: 1, fill-mode: forwards) — elle ne constitue pas un contenu animé automatique au sens WCAG 2.2.2 (aucune lecture en boucle sans interaction).

Compatibilité navigateur

Nécessite CSS 3D transforms et CSS animations — supportés depuis Chrome 36, Firefox 16, Safari 9. Zéro dépendance externe.

Chrome 80+✓ Complet
Firefox 72+✓ Complet
Safari 13+✓ Complet
Edge 80+✓ Complet
Mobile iOS✓ Hover inactif (touch)
Android Chrome✓ Hover inactif (touch)

Sans support <code>rotateX</code>, les lettres restent plates — le texte est parfaitement lisible. Sur mobile (pas de hover), les caractères sont affichés normalement, sans animation.

Le code

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

index.html — structure
<div class="demo-preview">
  <!-- Le JS découpe le textContent en spans avec animation-delay au chargement -->
  <span class="demo-text text-flip" id="flipText">VOTRE TEXTE</span>
  <!-- Après init JS, devient : -->
  <!-- <span class="demo-text text-flip" id="flipText">
    <span style="animation-delay: 0s">V</span>
    <span style="animation-delay: 0.05s">O</span>
    ...
  </span> -->
</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
font-size sur .demo-text 2,5 rem Taille des caractères — augmentez à 4–7 rem pour un titre hero, réduisez à 1 rem pour la navigation.
font-weight sur .demo-text 800 Graisse du texte. 900 accentue le retournement (caractère plus large) ; 400 donne un flip plus fin.
animation-delay : ${0.05 × t}s dans le JS (ligne calcul) 0,05 s/car. Incrément du stagger entre chaque lettre. Réduire à 0,03 s pour une cascade rapide sur les mots longs ; monter à 0,08 s pour un effet lent et dramatique.
durée dans .text-flip:hover span (animation: .6s) 0,6 s Durée du retournement d'un seul caractère. 0,3 s = vif et sec ; 1 s = lent et cinématique.
transition dans .text-flip span (transition: transform .3s) 0,3 s Vitesse de retour au repos quand la souris quitte l'élément. Réduire à 0,1 s pour un snap immédiat.
rotateX dans @keyframes flipChar à 50% rotateX(90deg) Axe de retournement. Remplacez par rotateY(90deg) pour un flip latéral (gauche–droite) au lieu d'un flip vertical.
perspective sur .text-flip (à ajouter) aucune Ajouter perspective: 300px sur le parent .text-flip ajoute un effet de profondeur 3D prononcé au retournement.
letter-spacing sur .demo-text -0,02 em Espacement des lettres. Augmenter à 0,1–0,2 em aère la cascade et rend chaque flip plus distinct visuellement.

FAQ

Le script cible getElementById('flipText') — un seul élément par page. Pour plusieurs instances, dupliquez la logique de découpage dans un querySelectorAll('.text-flip') et itérez : document.querySelectorAll('.text-flip').forEach(el => { el.innerHTML = el.textContent.split('').map((c, i) => `<span style="animation-delay:${i*.05}s">${c}</span>`).join(''); }).
Non nativement — le déclencheur :hover ne s'active pas sur les appareils tactiles sans pointeur. Pour une interaction touch, ajoutez un listener touchstart qui pose une classe .flipping sur l'élément et déclenchez l'animation via cette classe plutôt que :hover.
Ajoutez la règle : @media (prefers-reduced-motion: reduce) { .text-flip:hover span { animation: none; } }. Le texte reste lisible et interactif sans animation de retournement.