Hover Ripple
Interactive & Advanced · Animated · pure CSS
Hovering sends a wave of lift and color rippling through the letters via per-letter delays, with a resting twinkle. Interactive, no JavaScript.
How it works
Hover Ripple is an animated interactive & advanced text effect rendered entirely in CSS. Each character is wrapped in its own span so it can animate independently — the HTML and JSX exports include that per-letter markup.
Controls
Hover Ripple exposes 3 dedicated controls — Hue, Lift and Twinkle — 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
/* Hover Ripple — generated with TEXT-FX
* HTML: each character is wrapped in a <span> — see the HTML export.
* Font: 'Space Grotesk', sans-serif (load from Google Fonts).
*/
.text-effect {
font-family: 'Space Grotesk', sans-serif;
font-weight: 700;
letter-spacing: -2px;
text-transform: none;
}
.text-effect {
color: hsl(73 45% 78%);
white-space: pre;
cursor: pointer;
}
.text-effect .fx-ch {
display: inline-block;
transition: transform 0.35s cubic-bezier(0.2, 0.8, 0.3, 1.4), color 0.35s ease;
transition-delay: calc(var(--i) * 0.045s);
animation: text-effect-twinkle 3.5s ease-in-out infinite;
animation-delay: calc(var(--i) * -0.15s);
}
.text-effect:hover .fx-ch {
transform: translateY(-13px);
color: hsl(73 55% 64%);
}
@keyframes text-effect-twinkle {
0%, 100% { opacity: 0.9; }
50% { opacity: 1; }
}
HTML
This effect needs the markup below (per-letter spans, SVG defs, or a data-text attribute).
<style>
.text-effect {
font-family: 'Space Grotesk', sans-serif;
font-weight: 700;
letter-spacing: -2px;
text-transform: none;
}
.text-effect {
color: hsl(73 45% 78%);
white-space: pre;
cursor: pointer;
}
.text-effect .fx-ch {
display: inline-block;
transition: transform 0.35s cubic-bezier(0.2, 0.8, 0.3, 1.4), color 0.35s ease;
transition-delay: calc(var(--i) * 0.045s);
animation: text-effect-twinkle 3.5s ease-in-out infinite;
animation-delay: calc(var(--i) * -0.15s);
}
.text-effect:hover .fx-ch {
transform: translateY(-13px);
color: hsl(73 55% 64%);
}
@keyframes text-effect-twinkle {
0%, 100% { opacity: 0.9; }
50% { opacity: 1; }
}
</style>
<div class="text-effect">
<span class="fx-ch" style="--i:0;--n:9;--rev:8;--mid:4">Y</span>
<span class="fx-ch" style="--i:1;--n:9;--rev:7;--mid:4">o</span>
<span class="fx-ch" style="--i:2;--n:9;--rev:6;--mid:4">u</span>
<span class="fx-ch" style="--i:3;--n:9;--rev:5;--mid:4">r</span>
<span class="fx-ch" style="--i:4;--n:9;--rev:4;--mid:4"> </span>
<span class="fx-ch" style="--i:5;--n:9;--rev:3;--mid:4">t</span>
<span class="fx-ch" style="--i:6;--n:9;--rev:2;--mid:4">e</span>
<span class="fx-ch" style="--i:7;--n:9;--rev:1;--mid:4">x</span>
<span class="fx-ch" style="--i:8;--n:9;--rev:0;--mid:4">t</span>
</div>
- Category
- Interactive & Advanced
- Type
- Animated
- Browser support
- Ripples on :hover via per-letter transition-delay — resting twinkle in preview.
- Capabilities
- perLetter