Animated glitch text
Two different jobs get called animated glitch text. One is impossible by definition. The other takes about forty lines of CSS, and the code is on this page.
The part that cannot work
Text you copy from a generator and paste into a bio, a caption or a Discord message is made of Unicode characters. Unicode encodes what a character is, not how it moves. There is no animation channel, no frame data, nothing to attach motion to.
So no generator can hand you copy-and-paste text that moves on Instagram. Anything claiming otherwise is either giving you a video, a GIF, or a still arrangement of marks. The glitch text generator here does the still version, and its Shuffle button rerolls the arrangement, which is as close as characters get to motion.
The part that works: CSS
If you control the page, the classic effect is straightforward. Layer two offset copies of the text, tint one cyan and one magenta, then animate a clip-path on each so horizontal slices jump out of alignment at different rates.
Live, running on this page. Reduce motion in your OS settings and it stops.
The markup
The text is duplicated into a data-text attribute so the pseudo-elements have
something to render. Keep the real text in the element so it stays selectable and readable by
search engines and screen readers.
<span class="glitch" data-text="SIGNAL LOST">SIGNAL LOST</span> The CSS
.glitch {
position: relative;
color: #e8e8f2;
font-weight: 800;
letter-spacing: -0.02em;
}
/* Two offset copies sit behind the real text. */
.glitch::before,
.glitch::after {
content: attr(data-text);
position: absolute;
inset: 0;
background: #08080c;
overflow: hidden;
}
.glitch::before {
left: 2px;
text-shadow: -2px 0 #ff6b9d;
animation: glitch-a 2.5s infinite linear alternate-reverse;
}
.glitch::after {
left: -2px;
text-shadow: 2px 0 #7df9d0;
animation: glitch-b 3.1s infinite linear alternate-reverse;
}
/* Only clip-path animates, so this stays on the compositor. */
@keyframes glitch-a {
0% { clip-path: inset(10% 0 84% 0); }
20% { clip-path: inset(52% 0 30% 0); }
40% { clip-path: inset(78% 0 8% 0); }
60% { clip-path: inset(28% 0 62% 0); }
80% { clip-path: inset(66% 0 22% 0); }
100% { clip-path: inset(40% 0 44% 0); }
}
@keyframes glitch-b {
0% { clip-path: inset(70% 0 16% 0); }
20% { clip-path: inset(18% 0 70% 0); }
40% { clip-path: inset(46% 0 40% 0); }
60% { clip-path: inset(88% 0 4% 0); }
80% { clip-path: inset(34% 0 56% 0); }
100% { clip-path: inset(60% 0 26% 0); }
}
/* Non-negotiable: some people get motion sick. */
@media (prefers-reduced-motion: reduce) {
.glitch::before,
.glitch::after { animation: none; opacity: 0; }
} Two things people get wrong
Animating the wrong properties. Animating clip-path and
transform runs on the compositor and costs almost nothing. Animating
text-shadow, filter or left forces a repaint on every
frame, which is fine on a desktop and visibly janky on a mid-range phone. The snippet above sets
the shadows once and only animates the clip.
Skipping reduced motion. Rapid flickering is a genuine accessibility problem, not
a nice-to-have. The prefers-reduced-motion block at the end of the snippet is the
minimum. If the effect is decorative, turning it off entirely for those users is the right call.
Making an animated glitch GIF
For a caption, a sticker or a video overlay, you need frames rather than characters.
- Generate your text, then hit Shuffle and screenshot after each reroll. Four to six frames is plenty.
- Assemble them in any GIF tool at roughly 100ms per frame.
- Set the loop to infinite and keep the total under about a second, or it stops reading as a glitch.
Honestly, for anything polished a video editor will beat this. An RGB split plus a displacement map on two or three frames gets you a much better result than stacked combining marks ever will, because you control the distortion instead of inheriting it from a font engine.
Which one do you actually need?
| Where it goes | Use |
|---|---|
| Instagram or TikTok bio, Discord name | Unicode text from the generator |
| Your own website or portfolio | The CSS above |
| A caption, story or sticker | A GIF |
| A video intro or thumbnail | A video editor, not text at all |
Animated glitch text questions
Can glitch text be animated?
Not as copy-and-paste text. Unicode has no concept of motion, so anything you paste into a bio or a caption is a still arrangement of characters. Animation has to come from CSS, a video editor, or a GIF.
How do I make animated glitch text for a website?
With CSS. The standard approach layers two offset copies of the text in cyan and magenta using pseudo-elements, then animates a clip-path on each so slices jump out of alignment. There is working code on this page you can copy.
How do I make an animated glitch text GIF?
Generate several frames at different shuffle states, screenshot each one, and assemble them in any GIF tool at around 100ms per frame. For anything more polished, a video editor with a displacement or RGB-split effect will look better than stacked marks.
Does animated glitch text hurt page performance?
It can. Animating clip-path and transform runs on the compositor and stays cheap. Animating text-shadow or filter forces a repaint on every frame and will cost you on mobile. Keep the animation to transform and clip-path, and respect prefers-reduced-motion.
Keep reading
- Glitch text generator The still, pasteable version, with Shuffle for new arrangements.
- Hacked text generator The terminal-failure look this CSS pairs well with.
- How glitch text works Why characters cannot carry motion in the first place.
- Every combining mark Code points, for building your own generator.