GLITCH

HTML Output

<div class="glitch-wrapper">
  <div class="glitch" data-glitch="GLITCH">GLITCH</div>
</div>

CSS Output

:root {
  --glitch-color: #fff;
  --glitch-duration: 0.3s;
  --glitch-intensity: 3;
  --glitch-offset: 1.5px;
  --glitch-blur: 0.3px;
  --glitch-opacity: 0.66;
  --glitch-bg-color: #121212;
  --glitch-effect-color1: #ff0059;
  --glitch-effect-color2: #00ffd0;
}

.glitch-wrapper {
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  width: 100%;
  height: 100%;
  background-color: var(--glitch-bg-color);
}

.glitch {
  position: relative;
  z-index: 1;
  font-size: var(--glitch-font-size);
  font-weight: 700;
  line-height: 1;
  letter-spacing: 0.125rem;
  color: var(--glitch-color);
}

.glitch::before,
.glitch::after {
  display: block;
  content: attr(data-glitch);
  position: absolute;
  top: 0;
  left: 0;
  opacity: var(--glitch-opacity);
}

.glitch::before {
  animation: glitch-classic var(--glitch-duration) cubic-bezier(0.25, 0.46, 0.45, 0.94) both infinite;
  color: var(--glitch-effect-color1);
  z-index: -1;
  filter: blur(var(--glitch-blur));
}

.glitch::after {
  animation: glitch-classic var(--glitch-duration) cubic-bezier(0.25, 0.46, 0.45, 0.94) reverse both infinite;
  color: var(--glitch-effect-color2);
  z-index: -2;
  filter: blur(var(--glitch-blur));
}

@keyframes glitch-classic {
  0% {
    transform: translate(0);
  }
  20% {
    transform: translate(calc(-1 * var(--glitch-offset)), var(--glitch-offset));
  }
  40% {
    transform: translate(calc(-1 * var(--glitch-offset)), calc(-1 * var(--glitch-offset)));
  }
  60% {
    transform: translate(var(--glitch-offset), var(--glitch-offset));
  }
  80% {
    transform: translate(var(--glitch-offset), calc(-1 * var(--glitch-offset)));
  }
  to {
    transform: translate(0);
  }
}