Previously, each weight (Light, Regular, Bold…) meant a separate font file. A variable font instead ships one file with master outlines at the extremes of a "weight axis" (wght) and interpolates any value between them in real time. In CSS, `font-variation-settings: "wght" 650` accepts any number, and `font-weight: 650` works too.
Beyond weight, fonts can expose width (wdth), slant (slnt), optical size (opsz — see "Optical size"), and custom axes. Animating an axis on scroll or hover gives otherwise-static text a sense of expression.
One file replacing several weight files also cuts total download size. Not every font ships as variable, though, and axis names and ranges differ per font — check what a specific font actually supports before relying on it.
This demo can't load an external font, so it approximates the idea by interpolating the system font's `font-weight` alone — real variable fonts interpolate more smoothly across more axes.
When to use
Use to smoothly tie heading weight to scroll or hover, or on multilingual sites where downloading several separate weight files is costly.