Swash Bloom
Interactive & Advanced · Static · pure CSS
Resting, the word is clean upright Goudy roman; hover it and a stacked italic copy — OpenType swashes, ligatures and stylistic alternates switched on — crossfades in over a springy scale settle, so the letterforms bloom into calligraphic flourishes. Sorts Mill Goudy's italic carries the flowing swash and ligature forms, with an optional warm accent tinting the ornamental copy.
How it works
Swash Bloom is a static interactive & advanced text effect rendered entirely in CSS. A data-text attribute mirrors the word into ::before/::after layers, so copy that attribute together with the CSS.
Controls
Swash Bloom exposes 3 dedicated controls — Ink Hue, Bloom Speed and Flourish Accent — 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
/* Swash Bloom — made with TEXT-FX · https://text-fx.app
* HTML: the element needs a data-text attribute equal to its text.
* Font: 'Sorts Mill Goudy', serif (load from Google Fonts).
*/
.text-effect {
font-family: 'Sorts Mill Goudy', serif;
font-weight: 700;
letter-spacing: 8px;
text-transform: none;
}
.text-effect {
position: relative;
display: inline-block;
color: hsl(35 28% 82%);
cursor: pointer;
transition: color 0.64s ease;
}
.text-effect:hover {
color: hsl(35 28% 82% / 0);
}
.text-effect::before {
content: attr(data-text);
position: absolute;
inset: 0;
color: hsl(35 28% 82%);
font-style: italic;
font-feature-settings: "swsh" 1, "dlig" 1, "hlig" 1, "liga" 1, "calt" 1, "salt" 1;
opacity: 0;
transform: scale(0.94);
transform-origin: center;
transition: opacity 0.64s ease, transform 0.77s cubic-bezier(0.34, 1.4, 0.4, 1);
pointer-events: none;
}
.text-effect:hover::before {
opacity: 1;
transform: 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: 'Sorts Mill Goudy', serif;
font-weight: 700;
letter-spacing: 8px;
text-transform: none;
}
.text-effect {
position: relative;
display: inline-block;
color: hsl(35 28% 82%);
cursor: pointer;
transition: color 0.64s ease;
}
.text-effect:hover {
color: hsl(35 28% 82% / 0);
}
.text-effect::before {
content: attr(data-text);
position: absolute;
inset: 0;
color: hsl(35 28% 82%);
font-style: italic;
font-feature-settings: "swsh" 1, "dlig" 1, "hlig" 1, "liga" 1, "calt" 1, "salt" 1;
opacity: 0;
transform: scale(0.94);
transform-origin: center;
transition: opacity 0.64s ease, transform 0.77s cubic-bezier(0.34, 1.4, 0.4, 1);
pointer-events: none;
}
.text-effect:hover::before {
opacity: 1;
transform: scale(1);
}
</style>
<div data-text="Your text" class="text-effect">Your text</div>
- Category
- Interactive & Advanced
- Type
- Static
- Browser support
- Crossfades an italic swash/ligature copy in on :hover via a data-text overlay (OpenType font-feature-settings); resting state is a clean roman serif.
- Capabilities
- pure, dataText