âïž 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 !
Objectif : Simuler une frappe de machine à écrire uniquement avec du CSS.
â Facile Ă mettre en place
â Pas besoin de JavaScript
â IdĂ©al pour de simples animations statiques
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 ! đ
<div class="typewriter">
<p>Bonjour, je suis un texte animé !</p>
</div>
.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;
}
}
@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.
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. đą
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 !
â Afficher plusieurs phrases Ă la suite
â ContrĂŽler la vitesse et les dĂ©lais
â Rendre l'effet plus dynamique et interactif
<div class="typewriter">
<p id="typewriter-text"></p>
</div>
.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;
}
}
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
});
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.
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 !
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 ! đ