Texte✨ Premium

Glitch Effect

Deux pseudo-éléments CSS découpés par clip-path en bandes horizontales et colorés en magenta/cyan créent une distorsion numérique cyberpunk — pur CSS, sans canvas ni JavaScript.

CSSGlitchRetro

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

Landing cyberpunk — Titre hero sombre pleine largeur — Glitch Effect exemple 1

① Landing cyberpunk — Titre hero sombre pleine largeur

QuandUne landing page à thème dark/neon présente un produit tech, un studio de dev ou un jeu sur fond quasi-noir avec accents néon.
PourquoiUn glitch en grand format (4–6 rem) sur fond très sombre exploite toute la surface disponible : l'aberration chromatique et les bandes décalées créent une accroche visuelle forte sans image ni canvas. Le texte reste parfaitement lisible entre les frames de glitch.
Réglagesfont-size 4 rem, font-weight 800, ::before #ff00ff et ::after #00ffff, durées 2 s / 3 s, clip 35 % / 65 %.
Page d'erreur — Écran 404 façon terminal corrompu — Glitch Effect exemple 2

② Page d'erreur — Écran 404 façon terminal corrompu

QuandLa page 404 ou une page de maintenance affiche un message façon terminal dégradé — le contexte de « bug système » rend le glitch sémantiquement cohérent.
PourquoiLe glitch renforce la métaphore d'un signal corrompu : l'état d'erreur est perçu visuellement avant même la lecture. À utiliser sur le titre principal (« ERREUR », « 404 », « SYSTÈME HORS LIGNE »).
Réglagesfont-size 5 rem, couleurs #ff4444 / #ff8800 pour renforcer le signal d'alerte, durées raccourcies 1 s / 1,5 s pour une agitation plus intense.
Interface jeu — Titre de menu ou écran GAME OVER — Glitch Effect exemple 3

③ Interface jeu — Titre de menu ou écran GAME OVER

QuandUn jeu web (arcade, roguelike, cyberpunk) affiche son titre principal, un menu ou un écran de fin de partie sur fond sombre.
PourquoiLe glitch CSS est natif dans la grammaire visuelle des jeux rétro et cyberpunk. Il s'intègre sans canvas ni librairie externe — zéro impact sur le budget de rendu du jeu.
Réglagesfont-family monospace ou pixel font, font-size 3,5 rem, durées longues 4 s / 5 s pour un glitch lent et lancinant plutôt qu'agité.

Comment ça marche

L'effet repose sur deux pseudo-éléments ::before et ::after qui dupliquent le texte via content: attr(data-text). Positionnés en absolute sur l'élément parent (position: relative), ils se superposent exactement au texte original. Chacun est ensuite découpé par un clip-path: polygon(…) : ::before expose uniquement la tranche supérieure (0–35 % de hauteur), ::after uniquement la tranche inférieure (65–100 %).

Chaque copie reçoit une couleur de chromatic aberration distincte : magenta (#f0f) pour le haut, cyan (#0ff) pour le bas. Deux jeux de @keyframesglitch1 et glitch2 — appliquent des translations XY de ±3 px en cinq étapes irrégulières. Le déplacement horizontal simule le tearing d'un signal vidéo corrompu, les sauts verticaux amplifient l'impression de perte de synchronisation.

Les deux animations tournent à des vitesses délibérément différentes (2 s pour glitch1, 3 s pour glitch2) et en mode alternate-reverse, ce qui les désynchronise en permanence. Ce déphasage naturel évite tout effet de répétition mécanique : la distorsion paraît aléatoire sans aucune ligne de JavaScript.

Le texte source (blanc, .text-glitch lui-même) reste immobile — seules les copies colorées bougent, ce qui garantit une lisibilité permanente entre les frames de glitch. La classe .demo-text fixe la typographie de base (taille, graisse, espacement) indépendamment de l'effet, ce qui permet d'appliquer .text-glitch à tout élément texte existant en ajoutant simplement l'attribut data-text.

Accessibilité

  • Pas de prefers-reduced-motion dans ce code : les animations tournent en continu quelle que soit la préférence système. Pour un déploiement accessible, ajoutez @media (prefers-reduced-motion: reduce) { .text-glitch::before, .text-glitch::after { animation: none; } }.
  • Les pseudo-éléments utilisent content: attr(data-text) : certains lecteurs d'écran (NVDA, JAWS) liront le texte deux ou trois fois. Ajoutez aria-hidden="true" sur l'élément .text-glitch et un <span class="sr-only"> séparé pour le texte accessible.
  • Contraste du texte principal : blanc (#fff) sur fond #0a0a0f — ratio > 15:1, bien au-delà de WCAG AA (4,5:1) et AAA (7:1).
  • L'effet est purement décoratif : aucune interaction, aucun focus, aucun élément clavier à gérer.
  • Compatible avec les couleurs forcées (forced-colors: active) : les couleurs des pseudo-éléments sont remplacées par la couleur système — le texte blanc d'origine reste lisible.

Compatibilité navigateur

Nécessite clip-path polygon et CSS animations — disponibles dans tous les navigateurs modernes depuis 2018.

Chrome 55+✓ Complet
Firefox 54+✓ Complet
Safari 13.1+✓ Complet
Edge 79+✓ Complet
Mobile iOS✓ Complet
Android Chrome✓ Complet

Sans support <code>clip-path</code> (IE 11, vieux Android &lt; 5), les pseudo-éléments s'affichent sans découpe — le texte magenta et cyan apparaît superposé sans animation de glitch. Le texte blanc d'origine reste lisible en toutes circonstances.

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-glitch" data-text="VOTRE TEXTE">VOTRE TEXTE</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
data-text="…" GLITCH Texte affiché par les pseudo-éléments — doit correspondre exactement au textContent de l'élément pour aligner les trois couches.
.text-glitch::before { color } #f0f Couleur de la bande supérieure (chromatic aberration haut). Remplacez par n'importe quelle couleur néon ou brand.
.text-glitch::after { color } #0ff Couleur de la bande inférieure. En général complémentaire du ::before pour l'effet d'aberration chromatique.
clip-path ::before polygon(0 0, 100% 0, 100% 35%, 0 35%) Hauteur de la bande supérieure. Augmentez 35 % à 45–50 % pour une bande plus large, ou réduisez à 20 % pour une fine ligne de tearing.
clip-path ::after polygon(0 65%, 100% 65%, 100% 100%, 0 100%) Point de départ de la bande inférieure. Le gap 35–65 % est la zone sans glitch — réduisez-le pour un glitch plus agressif (ex. 45/55 %).
animation-duration ::before 2s Vitesse du glitch supérieur. 0,5–1 s = nerveux, 4–6 s = lent et onirique.
animation-duration ::after 3s Vitesse du glitch inférieur. L'écart de durée entre ::before et ::after est clé : plus il est grand, plus le déphasage paraît aléatoire.
translate dans @keyframes glitch1/2 ±3px Amplitude du décalage XY en pixels. 1–2 px = subtil, 5–8 px = glitch extrême façon corruption vidéo.
.demo-text { font-size } 2.5rem Taille du texte. L'effet est plus spectaculaire à partir de 3–4 rem sur fond sombre pleine largeur.

FAQ

Les @keyframes appliquent transform: translate() uniquement sur les pseudo-éléments ::before et ::after, jamais sur l'élément parent. Le texte blanc d'origine (.text-glitch lui-même) reste parfaitement fixe — seules les copies colorées bougent, créant l'illusion de déchirure sans affecter le flux ni le layout.
Oui, sans modification du CSS ni de JS. Ajoutez la classe text-glitch à autant d'éléments que voulu. Chaque élément doit porter un attribut data-text avec le même texte que son textContent — c'est ce que lit content: attr(data-text). Les animations CSS s'appliquent automatiquement à toutes les instances, sans aucune initialisation JavaScript.
Partiellement. Les clip-path en pourcentages (35 % / 65 %) s'appliquent à la hauteur totale de l'élément. Sur un bloc multiligne, les bandes couvrent les premières et dernières lignes mais laissent les lignes intermédiaires sans glitch. Pour un rendu optimal, appliquez .text-glitch à un <span> sur une seule ligne, ou découpez le texte en plusieurs éléments séparés.