Emphasis Pop
Underline & Decoration · Animated · pure CSS
Native East-Asian emphasis marks crown each glyph from above via text-emphasis — a dot, circle, sesame or triangle, no extra DOM required. Letters and their marks pop into place together in a bouncy, staggered entrance, with the mark's hue carrying the color while the text itself stays theme-neutral.
How it works
Emphasis Pop is an animated underline & decoration 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
Emphasis Pop exposes 3 dedicated controls — Mark Style, Mark Hue and Stagger — 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
/* Emphasis Pop — made with TEXT-FX · https://text-fx.app
* HTML: each character is wrapped in a <span> — see the HTML export.
* Font: 'Recursive', sans-serif (load from Google Fonts).
*/
.text-effect {
font-family: 'Recursive', sans-serif;
font-weight: 700;
letter-spacing: 0px;
text-transform: none;
}
.text-effect {
color: hsl(0 0% 92%);
white-space: pre;
line-height: 2.4;
padding-top: 0.4em;
}
.text-effect .fx-ch {
display: inline-block;
will-change: opacity, transform;
transform-origin: bottom center;
-webkit-text-emphasis: filled dot hsl(48 85% 68%);
text-emphasis: filled dot hsl(48 85% 68%);
-webkit-text-emphasis-position: over right;
text-emphasis-position: over right;
animation: text-effect-pop 0.5s cubic-bezier(.34,1.56,.64,1) both;
animation-delay: calc(var(--i) * 0.09s);
}
.text-effect:hover .fx-ch {
animation-name: text-effect-pop-r;
}
@keyframes text-effect-pop {
0% { opacity: 0; transform: translateY(14px) scale(0.4); }
100% { opacity: 1; transform: translateY(0) scale(1); }
}
@keyframes text-effect-pop-r {
0% { opacity: 0; transform: translateY(14px) scale(0.4); }
100% { opacity: 1; transform: translateY(0) scale(1); }
}
HTML
This effect needs the markup below (per-letter spans, SVG defs, or a data-text attribute).
<!-- Made with TEXT-FX · https://text-fx.app -->
<style>
.text-effect {
font-family: 'Recursive', sans-serif;
font-weight: 700;
letter-spacing: 0px;
text-transform: none;
}
.text-effect {
color: hsl(0 0% 92%);
white-space: pre;
line-height: 2.4;
padding-top: 0.4em;
}
.text-effect .fx-ch {
display: inline-block;
will-change: opacity, transform;
transform-origin: bottom center;
-webkit-text-emphasis: filled dot hsl(48 85% 68%);
text-emphasis: filled dot hsl(48 85% 68%);
-webkit-text-emphasis-position: over right;
text-emphasis-position: over right;
animation: text-effect-pop 0.5s cubic-bezier(.34,1.56,.64,1) both;
animation-delay: calc(var(--i) * 0.09s);
}
.text-effect:hover .fx-ch {
animation-name: text-effect-pop-r;
}
@keyframes text-effect-pop {
0% { opacity: 0; transform: translateY(14px) scale(0.4); }
100% { opacity: 1; transform: translateY(0) scale(1); }
}
@keyframes text-effect-pop-r {
0% { opacity: 0; transform: translateY(14px) scale(0.4); }
100% { opacity: 1; transform: translateY(0) scale(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
- Underline & Decoration
- Type
- Animated
- Browser support
- text-emphasis (Chromium, Firefox, Safari)
- Capabilities
- perLetter