16 CSS Glitch Text Effects10 / 16
Neon Glow Glitch Text
Vivid hot-pink synthwave lettering with a broad multi-layer text-shadow bloom that pulses between heavy and light glow states, punctuated by a single-frame snap to a crisp thin-blue channel before returning to maximum neon intensity.
Published
The code
<div class="gt-10"> <div class="gt-10__neon" data-text="SYNTHWAVE">SYNTHWAVE</div> <div class="gt-10__neon-2">▸ open late — never closed ◂</div> <div class="gt-10__sub">Est. 2084 · Neon District</div> </div>
<div class="gt-10">
<div class="gt-10__neon" data-text="SYNTHWAVE">SYNTHWAVE</div>
<div class="gt-10__neon-2">▸ open late — never closed ◂</div>
<div class="gt-10__sub">Est. 2084 · Neon District</div>
</div>.gt-10,
.gt-10 *,
.gt-10 *::before,
.gt-10 *::after {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.gt-10 ::selection {
background: #ff006e;
color: #fff;
}
.gt-10 {
--hot-pink: #ff006e;
--hot-pink-glow: rgba(255,0,110,0.6);
--cyan-snap: #00f0ff;
--synthwave-bg: #0a0010;
--purple-mid: #6b21a8;
min-height: 100vh;
background: var(--synthwave-bg);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 20px;
padding: 48px 20px;
font-family: 'Orbitron', 'Rajdhani', 'Share Tech Mono', monospace;
position: relative;
overflow: hidden;
}
/* Synthwave horizon gradient */
.gt-10::before {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 35%;
background: linear-gradient(0deg,
rgba(107,33,168,0.4) 0%,
transparent 100%
);
pointer-events: none;
}
/* Grid floor lines */
.gt-10::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 30%;
background-image: linear-gradient(0deg, rgba(255,0,110,0.15) 1px, transparent 1px), linear-gradient(90deg, rgba(255,0,110,0.08) 1px, transparent 1px);
background-size: 40px 20px, 40px 20px;
perspective: 200px;
pointer-events: none;
}
/* The big glowing neon text */
.gt-10__neon {
position: relative;
font-size: clamp(40px, 9vw, 88px);
font-weight: 900;
letter-spacing: 8px;
text-transform: uppercase;
color: var(--hot-pink);
text-shadow: 0 0 7px #fff, 0 0 15px var(--hot-pink), 0 0 35px var(--hot-pink), 0 0 70px var(--hot-pink-glow), 0 0 120px rgba(255,0,110,0.3);
animation: gt-10-glow-pulse 2.5s ease-in-out infinite alternate;
}
@keyframes gt-10-glow-pulse {
from {
text-shadow: 0 0 7px #fff, 0 0 15px var(--hot-pink), 0 0 35px var(--hot-pink), 0 0 70px var(--hot-pink-glow), 0 0 120px rgba(255,0,110,0.3);
}
to {
text-shadow: 0 0 4px #fff, 0 0 10px var(--hot-pink), 0 0 20px var(--hot-pink), 0 0 50px var(--hot-pink-glow), 0 0 90px rgba(255,0,110,0.2);
}
}
/* Snap-to-thin-blue override */
.gt-10__neon::before {
content: attr(data-text);
position: absolute;
inset: 0;
font: inherit;
letter-spacing: inherit;
color: var(--cyan-snap);
text-shadow: 0 0 4px var(--cyan-snap), 0 0 10px rgba(0,240,255,0.5);
opacity: 0;
animation: gt-10-snap 3s steps(1) infinite;
}
@keyframes gt-10-snap {
0%,
88%,
90%,
100% {
opacity: 0;
}
89% {
opacity: 1;
}
}
.gt-10__sub {
font-size: 11px;
letter-spacing: 10px;
color: rgba(255,0,110,0.4);
text-transform: uppercase;
}
/* Flickering tube letters — neon sign imperfection */
.gt-10__neon-2 {
font-size: clamp(14px, 2vw, 20px);
letter-spacing: 6px;
color: var(--cyan-snap);
text-shadow: 0 0 8px var(--cyan-snap), 0 0 20px rgba(0,240,255,0.4);
animation: gt-10-tube-flicker 6s steps(1) infinite;
text-transform: uppercase;
}
@keyframes gt-10-tube-flicker {
0%,
60%,
62%,
64%,
70%,
100% {
opacity: 1;
}
61%,
63% {
opacity: 0.2;
}
65%,
69% {
opacity: 0.6;
}
}
@media (prefers-reduced-motion: reduce) {
.gt-10__neon,
.gt-10__neon::before,
.gt-10__neon-2 {
animation: none;
}
.gt-10__neon::before {
opacity: 0;
}
}.gt-10,
.gt-10 *,
.gt-10 *::before,
.gt-10 *::after {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.gt-10 ::selection {
background: #ff006e;
color: #fff;
}
.gt-10 {
--hot-pink: #ff006e;
--hot-pink-glow: rgba(255,0,110,0.6);
--cyan-snap: #00f0ff;
--synthwave-bg: #0a0010;
--purple-mid: #6b21a8;
min-height: 100vh;
background: var(--synthwave-bg);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 20px;
padding: 48px 20px;
font-family: 'Orbitron', 'Rajdhani', 'Share Tech Mono', monospace;
position: relative;
overflow: hidden;
}
/* Synthwave horizon gradient */
.gt-10::before {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 35%;
background: linear-gradient(0deg,
rgba(107,33,168,0.4) 0%,
transparent 100%
);
pointer-events: none;
}
/* Grid floor lines */
.gt-10::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 30%;
background-image: linear-gradient(0deg, rgba(255,0,110,0.15) 1px, transparent 1px), linear-gradient(90deg, rgba(255,0,110,0.08) 1px, transparent 1px);
background-size: 40px 20px, 40px 20px;
perspective: 200px;
pointer-events: none;
}
/* The big glowing neon text */
.gt-10__neon {
position: relative;
font-size: clamp(40px, 9vw, 88px);
font-weight: 900;
letter-spacing: 8px;
text-transform: uppercase;
color: var(--hot-pink);
text-shadow: 0 0 7px #fff, 0 0 15px var(--hot-pink), 0 0 35px var(--hot-pink), 0 0 70px var(--hot-pink-glow), 0 0 120px rgba(255,0,110,0.3);
animation: gt-10-glow-pulse 2.5s ease-in-out infinite alternate;
}
@keyframes gt-10-glow-pulse {
from {
text-shadow: 0 0 7px #fff, 0 0 15px var(--hot-pink), 0 0 35px var(--hot-pink), 0 0 70px var(--hot-pink-glow), 0 0 120px rgba(255,0,110,0.3);
}
to {
text-shadow: 0 0 4px #fff, 0 0 10px var(--hot-pink), 0 0 20px var(--hot-pink), 0 0 50px var(--hot-pink-glow), 0 0 90px rgba(255,0,110,0.2);
}
}
/* Snap-to-thin-blue override */
.gt-10__neon::before {
content: attr(data-text);
position: absolute;
inset: 0;
font: inherit;
letter-spacing: inherit;
color: var(--cyan-snap);
text-shadow: 0 0 4px var(--cyan-snap), 0 0 10px rgba(0,240,255,0.5);
opacity: 0;
animation: gt-10-snap 3s steps(1) infinite;
}
@keyframes gt-10-snap {
0%,
88%,
90%,
100% {
opacity: 0;
}
89% {
opacity: 1;
}
}
.gt-10__sub {
font-size: 11px;
letter-spacing: 10px;
color: rgba(255,0,110,0.4);
text-transform: uppercase;
}
/* Flickering tube letters — neon sign imperfection */
.gt-10__neon-2 {
font-size: clamp(14px, 2vw, 20px);
letter-spacing: 6px;
color: var(--cyan-snap);
text-shadow: 0 0 8px var(--cyan-snap), 0 0 20px rgba(0,240,255,0.4);
animation: gt-10-tube-flicker 6s steps(1) infinite;
text-transform: uppercase;
}
@keyframes gt-10-tube-flicker {
0%,
60%,
62%,
64%,
70%,
100% {
opacity: 1;
}
61%,
63% {
opacity: 0.2;
}
65%,
69% {
opacity: 0.6;
}
}
@media (prefers-reduced-motion: reduce) {
.gt-10__neon,
.gt-10__neon::before,
.gt-10__neon-2 {
animation: none;
}
.gt-10__neon::before {
opacity: 0;
}
}Here's a working CSS Glitch Text Effect from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: Neon Glow Glitch Text
Source: https://codefronts.com/motion/css-glitch-text-effect/neon-glow-glitch-text/
Vivid hot-pink synthwave lettering with a broad multi-layer text-shadow bloom that pulses between heavy and light glow states, punctuated by a single-frame snap to a crisp thin-blue channel before returning to maximum neon intensity.
## HTML
```html
<div class="gt-10">
<div class="gt-10__neon" data-text="SYNTHWAVE">SYNTHWAVE</div>
<div class="gt-10__neon-2">▸ open late — never closed ◂</div>
<div class="gt-10__sub">Est. 2084 · Neon District</div>
</div>
```
## CSS
```css
.gt-10,
.gt-10 *,
.gt-10 *::before,
.gt-10 *::after {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.gt-10 ::selection {
background: #ff006e;
color: #fff;
}
.gt-10 {
--hot-pink: #ff006e;
--hot-pink-glow: rgba(255,0,110,0.6);
--cyan-snap: #00f0ff;
--synthwave-bg: #0a0010;
--purple-mid: #6b21a8;
min-height: 100vh;
background: var(--synthwave-bg);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 20px;
padding: 48px 20px;
font-family: 'Orbitron', 'Rajdhani', 'Share Tech Mono', monospace;
position: relative;
overflow: hidden;
}
/* Synthwave horizon gradient */
.gt-10::before {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 35%;
background: linear-gradient(0deg,
rgba(107,33,168,0.4) 0%,
transparent 100%
);
pointer-events: none;
}
/* Grid floor lines */
.gt-10::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 30%;
background-image: linear-gradient(0deg, rgba(255,0,110,0.15) 1px, transparent 1px), linear-gradient(90deg, rgba(255,0,110,0.08) 1px, transparent 1px);
background-size: 40px 20px, 40px 20px;
perspective: 200px;
pointer-events: none;
}
/* The big glowing neon text */
.gt-10__neon {
position: relative;
font-size: clamp(40px, 9vw, 88px);
font-weight: 900;
letter-spacing: 8px;
text-transform: uppercase;
color: var(--hot-pink);
text-shadow: 0 0 7px #fff, 0 0 15px var(--hot-pink), 0 0 35px var(--hot-pink), 0 0 70px var(--hot-pink-glow), 0 0 120px rgba(255,0,110,0.3);
animation: gt-10-glow-pulse 2.5s ease-in-out infinite alternate;
}
@keyframes gt-10-glow-pulse {
from {
text-shadow: 0 0 7px #fff, 0 0 15px var(--hot-pink), 0 0 35px var(--hot-pink), 0 0 70px var(--hot-pink-glow), 0 0 120px rgba(255,0,110,0.3);
}
to {
text-shadow: 0 0 4px #fff, 0 0 10px var(--hot-pink), 0 0 20px var(--hot-pink), 0 0 50px var(--hot-pink-glow), 0 0 90px rgba(255,0,110,0.2);
}
}
/* Snap-to-thin-blue override */
.gt-10__neon::before {
content: attr(data-text);
position: absolute;
inset: 0;
font: inherit;
letter-spacing: inherit;
color: var(--cyan-snap);
text-shadow: 0 0 4px var(--cyan-snap), 0 0 10px rgba(0,240,255,0.5);
opacity: 0;
animation: gt-10-snap 3s steps(1) infinite;
}
@keyframes gt-10-snap {
0%,
88%,
90%,
100% {
opacity: 0;
}
89% {
opacity: 1;
}
}
.gt-10__sub {
font-size: 11px;
letter-spacing: 10px;
color: rgba(255,0,110,0.4);
text-transform: uppercase;
}
/* Flickering tube letters — neon sign imperfection */
.gt-10__neon-2 {
font-size: clamp(14px, 2vw, 20px);
letter-spacing: 6px;
color: var(--cyan-snap);
text-shadow: 0 0 8px var(--cyan-snap), 0 0 20px rgba(0,240,255,0.4);
animation: gt-10-tube-flicker 6s steps(1) infinite;
text-transform: uppercase;
}
@keyframes gt-10-tube-flicker {
0%,
60%,
62%,
64%,
70%,
100% {
opacity: 1;
}
61%,
63% {
opacity: 0.2;
}
65%,
69% {
opacity: 0.6;
}
}
@media (prefers-reduced-motion: reduce) {
.gt-10__neon,
.gt-10__neon::before,
.gt-10__neon-2 {
animation: none;
}
.gt-10__neon::before {
opacity: 0;
}
}
```Here's a working CSS Glitch Text Effect from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: Neon Glow Glitch Text
Source: https://codefronts.com/motion/css-glitch-text-effect/neon-glow-glitch-text/
Vivid hot-pink synthwave lettering with a broad multi-layer text-shadow bloom that pulses between heavy and light glow states, punctuated by a single-frame snap to a crisp thin-blue channel before returning to maximum neon intensity.
## HTML
```html
<div class="gt-10">
<div class="gt-10__neon" data-text="SYNTHWAVE">SYNTHWAVE</div>
<div class="gt-10__neon-2">▸ open late — never closed ◂</div>
<div class="gt-10__sub">Est. 2084 · Neon District</div>
</div>
```
## CSS
```css
.gt-10,
.gt-10 *,
.gt-10 *::before,
.gt-10 *::after {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.gt-10 ::selection {
background: #ff006e;
color: #fff;
}
.gt-10 {
--hot-pink: #ff006e;
--hot-pink-glow: rgba(255,0,110,0.6);
--cyan-snap: #00f0ff;
--synthwave-bg: #0a0010;
--purple-mid: #6b21a8;
min-height: 100vh;
background: var(--synthwave-bg);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 20px;
padding: 48px 20px;
font-family: 'Orbitron', 'Rajdhani', 'Share Tech Mono', monospace;
position: relative;
overflow: hidden;
}
/* Synthwave horizon gradient */
.gt-10::before {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 35%;
background: linear-gradient(0deg,
rgba(107,33,168,0.4) 0%,
transparent 100%
);
pointer-events: none;
}
/* Grid floor lines */
.gt-10::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 30%;
background-image: linear-gradient(0deg, rgba(255,0,110,0.15) 1px, transparent 1px), linear-gradient(90deg, rgba(255,0,110,0.08) 1px, transparent 1px);
background-size: 40px 20px, 40px 20px;
perspective: 200px;
pointer-events: none;
}
/* The big glowing neon text */
.gt-10__neon {
position: relative;
font-size: clamp(40px, 9vw, 88px);
font-weight: 900;
letter-spacing: 8px;
text-transform: uppercase;
color: var(--hot-pink);
text-shadow: 0 0 7px #fff, 0 0 15px var(--hot-pink), 0 0 35px var(--hot-pink), 0 0 70px var(--hot-pink-glow), 0 0 120px rgba(255,0,110,0.3);
animation: gt-10-glow-pulse 2.5s ease-in-out infinite alternate;
}
@keyframes gt-10-glow-pulse {
from {
text-shadow: 0 0 7px #fff, 0 0 15px var(--hot-pink), 0 0 35px var(--hot-pink), 0 0 70px var(--hot-pink-glow), 0 0 120px rgba(255,0,110,0.3);
}
to {
text-shadow: 0 0 4px #fff, 0 0 10px var(--hot-pink), 0 0 20px var(--hot-pink), 0 0 50px var(--hot-pink-glow), 0 0 90px rgba(255,0,110,0.2);
}
}
/* Snap-to-thin-blue override */
.gt-10__neon::before {
content: attr(data-text);
position: absolute;
inset: 0;
font: inherit;
letter-spacing: inherit;
color: var(--cyan-snap);
text-shadow: 0 0 4px var(--cyan-snap), 0 0 10px rgba(0,240,255,0.5);
opacity: 0;
animation: gt-10-snap 3s steps(1) infinite;
}
@keyframes gt-10-snap {
0%,
88%,
90%,
100% {
opacity: 0;
}
89% {
opacity: 1;
}
}
.gt-10__sub {
font-size: 11px;
letter-spacing: 10px;
color: rgba(255,0,110,0.4);
text-transform: uppercase;
}
/* Flickering tube letters — neon sign imperfection */
.gt-10__neon-2 {
font-size: clamp(14px, 2vw, 20px);
letter-spacing: 6px;
color: var(--cyan-snap);
text-shadow: 0 0 8px var(--cyan-snap), 0 0 20px rgba(0,240,255,0.4);
animation: gt-10-tube-flicker 6s steps(1) infinite;
text-transform: uppercase;
}
@keyframes gt-10-tube-flicker {
0%,
60%,
62%,
64%,
70%,
100% {
opacity: 1;
}
61%,
63% {
opacity: 0.2;
}
65%,
69% {
opacity: 0.6;
}
}
@media (prefers-reduced-motion: reduce) {
.gt-10__neon,
.gt-10__neon::before,
.gt-10__neon-2 {
animation: none;
}
.gt-10__neon::before {
opacity: 0;
}
}
```How this works
The neon bloom uses five stacked text-shadow layers: a white core (0 0 7px #fff), two pink mid-blooms, and two wide diffuse halos. An alternate keyframe oscillates these radii between fully charged and dimmed states over 2.5 seconds, giving the impression of neon gas fluorescing at its natural resonance frequency. The oscillation uses ease-in-out timing so the glow dwells at both extremes, mimicking the physical property of gas discharge tubes.
The single-frame cyan snap is handled by a ::before pseudo-element coloured #00f0ff, hidden at opacity: 0 and briefly set to opacity: 1 at the 89% step of a 3-second steps(1) keyframe. The 1-frame exposure at steps(1) timing lasts approximately 33ms -- long enough to register visually but short enough to appear as a phosphor-burn frame. A secondary flicker animation on the subtitle fires at irregular step positions to simulate a physically-failing tube.
Make it yours
- Change
--hot-pinkto#00ff9d(emerald) for a green laser neon sign, and update--synthwave-bgto#001a0ato match. - Increase the glow intensity by adding a sixth shadow layer:
0 0 150px rgba(255,0,110,0.15)for cinema-scale glow. - Control the snap frequency by moving the
89%stop to94%on a5sduration for a rarer flash. - Add a second neon word with
animation-delay: -1.2son its glow pulse so the two lines breathe out of phase. - Replace the grid floor with a
perspective()transform to make the lines vanish to a horizon point for a retrowave landscape effect.
Gotchas — read before shipping
- Five-layer
text-shadowwith large blur radii (up to 120px) on large font sizes is one of the most GPU-expensive text effects; benchmark on target devices and cap at three layers on mobile. - If you add
mix-blend-modeto create a neon-on-texture look, be aware that any parent withoverflow: hiddenor afiltercreates a new stacking context that breaksmix-blend-mode: screen. - Safari may render the broadest shadow layer noticeably softer; compensate by increasing the alpha of the outer shadow from
0.3to0.5in Safari-targeted styles.
Browser support
| Chrome | Safari | Firefox | Edge |
|---|---|---|---|
| 80+ | 14+ | 78+ | 80+ |
Multi-layer text-shadow is universally supported; no cutting-edge APIs required.