Overview
Variable typography lets a single font file expose continuous axes — wght (weight), wdth (width), slnt (slant). Animating font-variation-settings across these axes morphs the glyph shape live without layout shift (because the track reserves the heaviest / widest frame ahead of time).
When to use it
Reach for variable-font morph on hero headlines, animated logos, and editorial pull-quotes that want type-design personality. Skip it for body copy — the morph reads as noise at reading sizes. Skip it for content that ships without the matching variable font — the morph silently degrades to nothing.
How it works
Set the variable font as a CSS @font-face with font-variation-settings: "wght" 400 as base. Animate via a @keyframes rule that transitions font-variation-settings: "wght" 100 through "wght" 900 and back. The browser interpolates the axis value continuously; the font binary contains every intermediate weight as part of a single file. The track reserves layout for the heaviest weight ahead of time via font-synthesis-weight: none and a generous letter-spacing buffer.
Production gotchas
Browsers still cannot interpolate font-variation-settings by individual axis name — you must list all animated axes in every keyframe, in the same order, or the interpolation breaks and the font snaps. Variable fonts can be 2–3x larger than a static cut; subset aggressively for production. Layout shift between weights is the silent killer: the heaviest weight is wider, so without explicit width reservation the line reflows mid-animation. Use font-variation-settings: "wght" 900 as your reservation baseline.
Accessibility
The morph is purely visual — screen readers see unchanged text. Under prefers-reduced-motion: reduce drop the animation and pin the font to a mid-axis value (e.g. weight 500). Some readers with custom typography (e.g. OpenDyslexic) override the font entirely; the morph silently disappears, which is the correct behavior — do not fight reader customization.
References
Implementation depth
Variable font morphing is strongest when it changes emphasis without changing layout. Animate font-variation-settings across wght or wdth axes while reserving enough inline space for the widest state.
Do not assume every font exposes the same axes. Feature-detect the chosen family, avoid swapping fonts mid-animation, and use reduced motion to pin the most readable weight rather than the most dramatic one.