📝 Effet Machine à Écrire en CSS et JavaScript : Tutoriel Facile et Dynamique

Tim
March 17th, 2025
image description

✍ Effet Machine Ă  Écrire : Simple CSS ou Magie JavaScript ?

Vous voulez donner vie Ă  votre texte avec un effet de machine Ă  Ă©crire ? Bonne nouvelle, c’est super facile Ă  faire, et vous avez deux options :

  • ⚡ Une version ultra-lĂ©gĂšre en CSS

  • đŸ”„ Une version plus dynamique avec JavaScript

Suivez le guide !

đŸ–‹ïž Étape 1 : La Version CSS Seule

Objectif : Simuler une frappe de machine à écrire uniquement avec du CSS.

🎯 Pourquoi choisir cette solution ?

  • ✅ Facile Ă  mettre en place

  • ✅ Pas besoin de JavaScript

  • ✅ IdĂ©al pour de simples animations statiques

🧠 Comment fonctionne l’algorithme ?

L’idĂ©e est simple : nous allons simuler un effet de frappe et d’effacement, comme si quelqu’un tapait Ă  la machine Ă  Ă©crire. Voici la logique que nous allons suivre :

1ïžâƒŁ Afficher une lettre Ă  la fois

  • On commence avec une phrase vide.

  • À intervalles rĂ©guliers, on ajoute une lettre de la phrase en cours.

  • Une fois que toute la phrase est affichĂ©e, on attend un moment avant de passer Ă  l’étape suivante.

2ïžâƒŁ Effacer la phrase progressivement

  • Au bout d’un certain temps, on commence Ă  supprimer les lettres une par une.

  • On continue jusqu'Ă  ce que le texte disparaisse complĂštement.

3ïžâƒŁ Passer Ă  la phrase suivante

  • Une fois la phrase effacĂ©e, on passe Ă  la suivante dans notre liste.

  • Si on arrive Ă  la derniĂšre phrase, on recommence depuis le dĂ©but pour un effet infini.

4ïžâƒŁ GĂ©rer la vitesse et le timing

  • La vitesse d’ajout et d’effacement des lettres peut ĂȘtre ajustĂ©e pour un effet plus naturel.

  • On ajoute un petit dĂ©lai avant d’effacer pour laisser le temps aux utilisateurs de lire.

En suivant cette logique, on obtient un effet fluide et naturel qui capte l’attention sans nĂ©cessiter d’animations complexes. Maintenant, passons au code ! 🚀

📝 Code :

html
<div class="typewriter">
  <p>Bonjour, je suis un texte animé !</p>
</div>
css
.typewriter p {
  font-family: 'Courier New', Courier, monospace;
  font-size: 24px;
  display: inline-block;
  border-right: 2px solid;
  white-space: nowrap;
  overflow: hidden;
  animation: typing 3s steps(30) infinite, blink 0.5s step-end infinite;
}

@keyframes typing {
  from {
    width: 0;
  }
  to {
    width: 100%;
  }
}

@keyframes blink {
  50% {
    border-color: transparent;
  }
}

Comment ça marche ?

  • @keyframes typing → Simule la frappe en augmentant progressivement la largeur du texte.

  • steps(30) → DĂ©finit le nombre de "sauts" pour un effet plus rĂ©aliste.

  • @keyframes blink → Fait clignoter le curseur comme une vraie machine Ă  Ă©crire.

Quand l'utiliser ?

Parfait si vous voulez une animation simple et statique. Mais
 ce n'est pas dynamique : une fois l'animation jouĂ©e, le texte ne change pas. 😱

⚡ Étape 2 : Version Dynamique avec JavaScript

Et si on voulait un effet plus interactif, avec plusieurs phrases qui s’enchaĂźnent ? đŸŽ©âœš
C’est là que le JavaScript entre en scùne !

Pourquoi passer au JS ?

  • ✅ Afficher plusieurs phrases Ă  la suite

  • ✅ ContrĂŽler la vitesse et les dĂ©lais

  • ✅ Rendre l'effet plus dynamique et interactif

📝 Code :

html
<div class="typewriter">
  <p id="typewriter-text"></p>
</div>
css
.typewriter p {
  font-family: 'Courier New', Courier, monospace;
  font-size: 24px;
  display: inline-block;
  border-right: 2px solid;
  white-space: nowrap;
  overflow: hidden;
  animation: blink 0.5s step-end infinite;
}

@keyframes blink {
  50% {
    border-color: transparent;
  }
}
javascript
const phrases = [
  "Bonjour, je suis un texte animé !",
  "Apprenez Ă  coder avec nous.",
  "Découvrez de nouvelles astuces chaque jour !"
];

let phraseIndex = 0; // Index pour suivre la phrase en cours
const typingSpeed = 100; // Vitesse de frappe en millisecondes
const erasingSpeed = 50; // Vitesse d'effacement en millisecondes

const typewriterText = document.getElementById('typewriter-text');

/**
 * Fonction qui simule la frappe d'une phrase
 */
function type() {
  const currentPhrase = phrases[phraseIndex]; // RécupÚre la phrase actuelle
  const currentLength = typewriterText.textContent.length; // Longueur du texte affiché

  if (currentLength < currentPhrase.length) {
    // Ajoute une lettre Ă  la fois
    typewriterText.textContent += currentPhrase.charAt(currentLength);
    setTimeout(type, typingSpeed); // Continue aprÚs un délai
  } else {
    // Une fois la phrase complĂšte, on attend avant d'effacer
    setTimeout(erase, 1500);
  }
}

/**
 * Fonction qui efface progressivement la phrase affichée
 */
function erase() {
  const currentLength = typewriterText.textContent.length;

  if (currentLength > 0) {
    // Supprime une lettre Ă  la fois
    typewriterText.textContent = phrases[phraseIndex].substring(0, currentLength - 1);
    setTimeout(erase, erasingSpeed); // Continue aprÚs un délai
  } else {
    // Passe à la phrase suivante une fois le texte complÚtement effacé
    phraseIndex = (phraseIndex + 1) % phrases.length; // Boucle sur les phrases
    setTimeout(type, typingSpeed); // Relance la frappe
  }
}

// Lance l'animation une fois la page chargée
document.addEventListener('DOMContentLoaded', () => {
  setTimeout(type, 1000); // Petit délai avant de démarrer
});

Décryptons le code

  • phrases → Tableau contenant plusieurs messages Ă  afficher.

  • type() → Ajoute une lettre aprĂšs l’autre.

  • erase() → Efface le texte pour passer au suivant.

  • typingSpeed & erasingSpeed → GĂšrent la vitesse de frappe et d’effacement.

Quand l'utiliser ?

Si vous voulez un effet plus vivant, qui affiche plusieurs phrases à la suite. C’est un excellent moyen d’ajouter du dynamisme à une page web !

🎹 Alors, CSS ou JavaScript ?

Si vous cherchez une animation simple, CSS suffit. Mais pour une interaction plus fluide et réaliste, JavaScript est votre meilleur allié !

👉 Bonus : Vous pouvez mĂȘme combiner les deux pour encore plus d'effets !

Alors, prĂȘt(e) Ă  donner vie Ă  vos textes ? Essayez et partagez vos crĂ©ations ! 😎