CSS Text Glitch Effect Generator

Create animated glitch text effects with live preview and copyable CSS

Settings

Retro VHS tape distortion

6px
3x
Live Preview
GLITCH
Generated Code
.glitch {
  position: relative;
  font-size: 4rem;
  font-weight: 900;
  letter-spacing: 0.05em;
  text-transform: uppercase;
}

.glitch::before,
.glitch::after {
  content: attr(data-text);
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}

.glitch::before {
  animation: glitch-before 0.33s infinite linear alternate-reverse;
  mix-blend-mode: screen;
}

.glitch::after {
  animation: glitch-after 0.33s infinite linear alternate-reverse;
  animation-delay: 0.17s;
  mix-blend-mode: screen;
}

@keyframes glitch-before {
  0% { clip-path: inset(0 0 95% 0); transform: translate(6px, 0); color: #ff0000; }
    5% { clip-path: inset(10% 0 80% 0); transform: translate(-6px, 0); color: #0000ff; }
    10% { clip-path: inset(20% 0 70% 0); transform: translate(4px, 0); color: #ff0000; }
    15% { clip-path: inset(30% 0 60% 0); transform: translate(-3px, 0); }
    20% { clip-path: inset(40% 0 50% 0); transform: translate(6px, 0); color: #0000ff; }
    25% { clip-path: inset(50% 0 40% 0); transform: translate(-6px, 0); }
    30% { clip-path: inset(60% 0 30% 0); transform: translate(2px, 0); color: #ff0000; }
    35% { clip-path: inset(70% 0 20% 0); transform: translate(-5px, 0); }
    40% { clip-path: inset(80% 0 10% 0); transform: translate(6px, 0); color: #0000ff; }
    45% { clip-path: inset(90% 0 5% 0); transform: translate(-2px, 0); }
    50%, 100% { clip-path: inset(0 0 0 0); transform: translate(0); color: inherit; }
}

@keyframes glitch-after {
  0% { clip-path: inset(50% 0 30% 0); transform: translate(-6px, 0); color: #0000ff; }
  10% { clip-path: inset(20% 0 60% 0); transform: translate(6px, 0); color: #ff0000; }
  20% { clip-path: inset(70% 0 10% 0); transform: translate(-4px, 0); }
  30% { clip-path: inset(40% 0 45% 0); transform: translate(5px, 0); color: #0000ff; }
  40% { clip-path: inset(10% 0 75% 0); transform: translate(-6px, 0); }
  50%, 100% { clip-path: inset(0 0 0 0); transform: translate(0); color: inherit; }
}