Equalizer Bars

Fill & Texture · Animated · pure CSS

Each glyph is filled with a bank of neon columns whose heights bounce independently on their own timers, like a music visualizer's bar meter poured into your letters. It's pure CSS rhythm with a dark in-glyph base and a faint neon outline — no audio involved, it just looks like it's dancing to a track.

Equalizer Bars

How it works

Equalizer Bars is an animated fill & texture text effect rendered entirely in CSS. It animates a registered CSS @property, which keeps the motion smooth and GPU-friendly.

Controls

Equalizer Bars exposes 6 dedicated controls — Hue, Color, Spectrum Spread, Bars, Bar Width and Bounce — on top of the shared type controls (font, weight, letter-spacing and case). Open it in the generator to tune every value live, then copy the updated CSS.

CSS

/* Equalizer Bars — made with TEXT-FX · https://text-fx.app
 * HTML: just put the class on any element.
 * Font: 'Archivo Black', sans-serif (load from Google Fonts).
 */

@property --text-effect-h0 {
  syntax: "<percentage>";
  inherits: false;
  initial-value: 36%;
}

@property --text-effect-h1 {
  syntax: "<percentage>";
  inherits: false;
  initial-value: 65%;
}

@property --text-effect-h2 {
  syntax: "<percentage>";
  inherits: false;
  initial-value: 89%;
}

@property --text-effect-h3 {
  syntax: "<percentage>";
  inherits: false;
  initial-value: 88%;
}

@property --text-effect-h4 {
  syntax: "<percentage>";
  inherits: false;
  initial-value: 34%;
}

@property --text-effect-h5 {
  syntax: "<percentage>";
  inherits: false;
  initial-value: 37%;
}

@property --text-effect-h6 {
  syntax: "<percentage>";
  inherits: false;
  initial-value: 63%;
}

@property --text-effect-h7 {
  syntax: "<percentage>";
  inherits: false;
  initial-value: 34%;
}

@property --text-effect-h8 {
  syntax: "<percentage>";
  inherits: false;
  initial-value: 52%;
}

@property --text-effect-h9 {
  syntax: "<percentage>";
  inherits: false;
  initial-value: 33%;
}

.text-effect {
  font-family: 'Archivo Black', sans-serif;
  font-weight: 700;
  letter-spacing: -1px;
  text-transform: none;
}

.text-effect {
  --text-effect-h0: 36%;
  --text-effect-h1: 65%;
  --text-effect-h2: 89%;
  --text-effect-h3: 88%;
  --text-effect-h4: 34%;
  --text-effect-h5: 37%;
  --text-effect-h6: 63%;
  --text-effect-h7: 34%;
  --text-effect-h8: 52%;
  --text-effect-h9: 33%;
  background:
    linear-gradient(90deg, transparent 0 1.6%, hsl(106 92% 60%) 1.6% 8.4%, transparent 8.4%) center bottom / 100% var(--text-effect-h0) no-repeat,
    linear-gradient(90deg, transparent 0 11.6%, hsl(137 92% 60%) 11.6% 18.4%, transparent 18.4%) center bottom / 100% var(--text-effect-h1) no-repeat,
    linear-gradient(90deg, transparent 0 21.6%, hsl(168 92% 60%) 21.6% 28.4%, transparent 28.4%) center bottom / 100% var(--text-effect-h2) no-repeat,
    linear-gradient(90deg, transparent 0 31.6%, hsl(199 92% 60%) 31.6% 38.4%, transparent 38.4%) center bottom / 100% var(--text-effect-h3) no-repeat,
    linear-gradient(90deg, transparent 0 41.6%, hsl(230 92% 60%) 41.6% 48.4%, transparent 48.4%) center bottom / 100% var(--text-effect-h4) no-repeat,
    linear-gradient(90deg, transparent 0 51.6%, hsl(261 92% 60%) 51.6% 58.4%, transparent 58.4%) center bottom / 100% var(--text-effect-h5) no-repeat,
    linear-gradient(90deg, transparent 0 61.6%, hsl(292 92% 60%) 61.6% 68.4%, transparent 68.4%) center bottom / 100% var(--text-effect-h6) no-repeat,
    linear-gradient(90deg, transparent 0 71.6%, hsl(323 92% 60%) 71.6% 78.4%, transparent 78.4%) center bottom / 100% var(--text-effect-h7) no-repeat,
    linear-gradient(90deg, transparent 0 81.6%, hsl(354 92% 60%) 81.6% 88.4%, transparent 88.4%) center bottom / 100% var(--text-effect-h8) no-repeat,
    linear-gradient(90deg, transparent 0 91.6%, hsl(25 92% 60%) 91.6% 98.4%, transparent 98.4%) center bottom / 100% var(--text-effect-h9) no-repeat;
  background-color: hsl(106 48% 15%);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  color: transparent;
  -webkit-text-stroke: 0.75px hsl(106 55% 55% / 0.5);
  filter: drop-shadow(0 0 5px hsl(106 95% 60% / 0.35));
  animation: text-effect-b0 1.81s ease-in-out -1.02s infinite, text-effect-b1 1.95s ease-in-out -0.24s infinite, text-effect-b2 1.13s ease-in-out -0.96s infinite, text-effect-b3 1.32s ease-in-out -0.05s infinite, text-effect-b4 1.81s ease-in-out -1.02s infinite, text-effect-b5 1.42s ease-in-out -0.08s infinite, text-effect-b6 1.92s ease-in-out -1.69s infinite, text-effect-b7 1.07s ease-in-out -0.15s infinite, text-effect-b8 2.1s ease-in-out -1.44s infinite, text-effect-b9 2.14s ease-in-out -1.61s infinite;
}

@keyframes text-effect-b0 {
  0%, 100% { --text-effect-h0: 36%; }
  20% { --text-effect-h0: 81%; }
  40% { --text-effect-h0: 67%; }
  60% { --text-effect-h0: 80%; }
  80% { --text-effect-h0: 93%; }
}

@keyframes text-effect-b1 {
  0%, 100% { --text-effect-h1: 65%; }
  20% { --text-effect-h1: 89%; }
  40% { --text-effect-h1: 82%; }
  60% { --text-effect-h1: 91%; }
  80% { --text-effect-h1: 69%; }
}

@keyframes text-effect-b2 {
  0%, 100% { --text-effect-h2: 89%; }
  20% { --text-effect-h2: 42%; }
  40% { --text-effect-h2: 90%; }
  60% { --text-effect-h2: 38%; }
  80% { --text-effect-h2: 36%; }
}

@keyframes text-effect-b3 {
  0%, 100% { --text-effect-h3: 88%; }
  20% { --text-effect-h3: 32%; }
  40% { --text-effect-h3: 91%; }
  60% { --text-effect-h3: 43%; }
  80% { --text-effect-h3: 31%; }
}

@keyframes text-effect-b4 {
  0%, 100% { --text-effect-h4: 34%; }
  20% { --text-effect-h4: 54%; }
  40% { --text-effect-h4: 84%; }
  60% { --text-effect-h4: 45%; }
  80% { --text-effect-h4: 65%; }
}

@keyframes text-effect-b5 {
  0%, 100% { --text-effect-h5: 37%; }
  20% { --text-effect-h5: 60%; }
  40% { --text-effect-h5: 24%; }
  60% { --text-effect-h5: 34%; }
  80% { --text-effect-h5: 68%; }
}

@keyframes text-effect-b6 {
  0%, 100% { --text-effect-h6: 63%; }
  20% { --text-effect-h6: 31%; }
  40% { --text-effect-h6: 47%; }
  60% { --text-effect-h6: 78%; }
  80% { --text-effect-h6: 93%; }
}

@keyframes text-effect-b7 {
  0%, 100% { --text-effect-h7: 34%; }
  20% { --text-effect-h7: 31%; }
  40% { --text-effect-h7: 43%; }
  60% { --text-effect-h7: 87%; }
  80% { --text-effect-h7: 63%; }
}

@keyframes text-effect-b8 {
  0%, 100% { --text-effect-h8: 52%; }
  20% { --text-effect-h8: 47%; }
  40% { --text-effect-h8: 62%; }
  60% { --text-effect-h8: 60%; }
  80% { --text-effect-h8: 69%; }
}

@keyframes text-effect-b9 {
  0%, 100% { --text-effect-h9: 33%; }
  20% { --text-effect-h9: 58%; }
  40% { --text-effect-h9: 37%; }
  60% { --text-effect-h9: 69%; }
  80% { --text-effect-h9: 57%; }
}

Pure CSS — just add the .text-effect class to any element.

Category
Fill & Texture
Type
Animated
Browser support
background-clip:text + animated @property <percentage> bar heights
Capabilities
pure, property

Related Fill & Texture effects