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.

Swash Bloom

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

Related Interactive & Advanced effects