Dégustation à l'aveugle · jeudi soir
Le vin n° 4 était…
Toutes les 3 s, le mot affiché se brouille en caractères tirés au hasard puis se recompose de gauche à droite, une lettre fixée toutes les 100 ms, jusqu'au mot suivant : un décodage façon « déchiffrement », en dégradé indigo-rose. CSS et 1,9 Ko de JavaScript, sans modèle d'IA, liste de mots dans le HTML, changement direct si l'utilisateur réduit les animations.
Mis à jour le
Cet effet est gratuit — la catégorie Liquid en contient 31 au total, dont 6 gratuits. Effect.Labs regroupe 840 effets vanilla. Découvrir la catégorie →
Dégustation à l'aveugle · jeudi soir
Le vin n° 4 était…
Réseau Wi-Fi TIERS-LIEU · code du jour :
Le code change chaque matin à 8 h · demandez au comptoir au besoin
| Heure | Indicatif | Bande | Signal |
|---|---|---|---|
| 14:27 | OZ1QRV | 20 m | −18 dB |
| 14:19 | I2WXQ | 20 m | −09 dB |
| 14:06 | LA9ZQK | 40 m | −21 dB |
Le mot est un <div class="ai-typo-word"> centré dans .ai-typo-morph : 2,5rem, graisse 800, 2 px d'espace entre les lettres, peint d'un dégradé indigo, violet, rose (#6366f1 → #a855f7 → #ec4899) découpé à la forme des lettres (background-clip: text). La liste des mots est dans son attribut data-words, séparés par des virgules ; le premier est écrit dans le HTML, donc visible sans script.
Toutes les 3 s, le script relit data-words, prend le mot suivant et lance le décodage : toutes les 50 ms, il réécrit le texte en entier. La lettre de rang i est fixée dès que le compteur de passages dépasse 2 × i : une lettre de plus devient juste toutes les 100 ms, de gauche à droite ; les autres sont tirées au hasard parmi 66 caractères (A à Z, a à z, 0 à 9, @ # $ %), les espaces restent des espaces. Au bout de longueur × 2 + 5 passages, le mot exact est posé : 0,85 s pour un mot de 6 lettres, 1,35 s pour « CHINON 2019 ». Le seul hasard est ce tirage de caractères (Math.random) : le nom « AI » du catalogue ne recouvre aucun modèle ni aucune intelligence artificielle.
Le script traite chaque .ai-typo-word de la page, chacun avec sa liste et son minuteur, et ne fait rien quand le mot est hors de l'écran (IntersectionObserver) ou l'onglet masqué. Comme la liste est relue à chaque changement, on peut la modifier depuis la page : une liste d'un seul mot arrête le défilement sur ce mot. Les caractères tirés n'ont pas la même largeur que les lettres finales : dans une police proportionnelle, le mot respire un peu pendant le décodage ; une police à chasse fixe (monospace) garde la ligne immobile, utile pour un code ou un indicatif. Mesuré dans Chromium 151, Firefox 153 et WebKit 26 : DESIGN, CRÉER, FORMER, RÊVER, dans l'ordre, chaque décodage terminé avant le suivant.
prefers-reduced-motion: reduce, le mot change d'un coup toutes les 3 s, sans aucun caractère brouillé. Mesuré dans les trois moteurs : sur 7 s, seuls les mots complets apparaissent (DESIGN, CRÉER, FORMER, RÊVER).aria-live, donc rien n'est annoncé ; mais un lecteur d'écran qui le lit à cet instant entend du charabia. Si le mot porte une information (un code, un nom à révéler), mettez aria-hidden="true" sur l'élément animé et écrivez le mot final dans un texte masqué visuellement, mis à jour une fois le décodage fini.CSS (background-clip: text) + 1,9 Ko de JavaScript (setInterval, IntersectionObserver, matchMedia), aucune dépendance. Mesuré dans Chromium 151, Firefox 153 et WebKit 26 : même ordre des mots, même rythme d'une lettre toutes les 100 ms, même changement direct sous mouvement réduit ; pause hors écran vérifiée dans Chromium et Firefox.
Sans JavaScript, le premier mot écrit dans le HTML reste affiché, en dégradé. Sans IntersectionObserver, le défilement continue hors écran. Sans background-clip: text (cas rare), le mot s'affiche sur un pavé de dégradé : retirez alors -webkit-text-fill-color et donnez une couleur au texte.
Copiez les trois blocs dans votre page. Aucune dépendance.
<div class="fx-0419-root">
<div class="ai-typo-morph">
<div class="ai-typo-word" data-words="DESIGN, CRÉER, FORMER, RÊVER, BÂTIR">DESIGN</div>
</div>
</div>
.fx-0419-root,
.fx-0419-root *,
.fx-0419-root *::before,
.fx-0419-root *::after {
box-sizing: border-box
}
.fx-0419-root {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 250px;
overflow: hidden;
position: relative;
background: rgb(26, 26, 36);
color: rgb(255, 255, 255);
font-family: sans-serif;
}
.ai-typo-morph {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
.ai-typo-word {
font-size: 2.5rem;
font-weight: 800;
background: linear-gradient(135deg, #6366f1, #a855f7, #ec4899);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
letter-spacing: 2px;
}
(function() {
// AI Typo Morph : le mot se brouille puis se recompose lettre par lettre
// Mots : attribut data-words, séparés par des virgules (relu à chaque changement)
var reduce = window.matchMedia('(prefers-reduced-motion: reduce)');
var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@#$%';
document.querySelectorAll('.ai-typo-word').forEach(function(wordEl) {
function readWords() {
return (wordEl.getAttribute('data-words') || '').split(',')
.map(function(w) { return w.trim(); })
.filter(Boolean);
}
var currentWord = 0;
var scramble = 0;
var onScreen = true;
if (!wordEl.textContent.trim()) wordEl.textContent = readWords()[0] || '';
function morphTo(target) {
clearInterval(scramble);
// Mouvement réduit : le mot change d'un coup, sans brouillage
if (reduce.matches) {
wordEl.textContent = target;
return;
}
var iterations = 0;
scramble = setInterval(function() {
var result = '';
for (var i = 0; i < target.length; i++) {
if (iterations > i * 2 || target[i] === ' ') {
result += target[i];
} else {
result += chars[Math.floor(Math.random() * chars.length)];
}
}
wordEl.textContent = result;
iterations++;
if (iterations > target.length * 2 + 5) {
clearInterval(scramble);
wordEl.textContent = target;
}
}, 50);
}
// Pause quand le bloc est hors écran
if ('IntersectionObserver' in window) {
new IntersectionObserver(function(entries) {
onScreen = entries[0].isIntersecting;
}).observe(wordEl);
}
setInterval(function() {
var words = readWords();
if (!onScreen || document.hidden || words.length < 2) return;
currentWord = (currentWord + 1) % words.length;
morphTo(words[currentWord]);
}, 3000);
});
})();
Options passées à l'API ou attributs data-* :
| Option / propriété | Défaut | Effet |
|---|---|---|
Mots (HTML — data-words sur .ai-typo-word) |
DESIGN, CRÉER, FORMER, RÊVER, BÂTIR |
Mots, codes ou groupes de mots séparés par des virgules ; écrivez le premier dans l'élément. Relue à chaque changement : une liste d'un seul mot fige l'affichage sur ce mot. |
Cadence (JS — 3000 dans setInterval) |
3 s entre deux mots | Gardez-la au-dessus de la durée du décodage (longueur × 100 ms + 250 ms) : 2 s suffit pour des mots de 6 lettres, 5 s laisse le temps de lire un code. |
Vitesse du décodage (JS — 50 ms et i * 2) |
une lettre fixée toutes les 100 ms | i * 4 fixe une lettre toutes les 200 ms, pour un suspense plus long ; i * 1 toutes les 50 ms, pour un décodage éclair. |
Caractères tirés (JS — chars) |
A–Z, a–z, 0–9, @ # $ % | '0123456789' pour un compteur ou un code chiffré, '01' pour un effet binaire, des symboles ('░▒▓█') pour un brouillage plus graphique. |
Police et dégradé (CSS — .ai-typo-word) |
police du site, 2,5rem, graisse 800, dégradé indigo-violet-rose | font-family: monospace évite que le mot change de largeur pendant le brouillage ; le dégradé se remplace par n'importe quelle couleur ou dégradé. |
Non. Le nom vient du catalogue, mais le script ne fait que tirer des caractères au hasard (Math.random) puis fixer les lettres du mot visé une à une, de gauche à droite. Aucun modèle, aucun appel réseau : le mot final est toujours celui écrit dans data-words.
Écrivez deux mots dans la liste, le texte d'attente puis le mot à révéler (data-words="VIN N° 4, CHINON 2019"). Après le premier décodage, remplacez la liste par le seul mot révélé (el.dataset.words = 'CHINON 2019') : avec un seul mot, le script ne change plus rien. Pour déclencher la révélation au clic plutôt qu'au bout de 3 s, laissez au départ un seul mot dans la liste et ajoutez le second au clic.
Text Morph passe d'un mot à l'autre par un fondu flou : on ne voit jamais que des mots entiers, lisibles à tout instant. AI Typo Morph montre le passage : le mot se brouille en caractères au hasard puis se reconstruit lettre par lettre. Choisissez AI Typo Morph pour un code, un nom à révéler ou une ambiance « signal » ; Text Morph pour des mots qui doivent rester lisibles (langues, métiers, produits).