Variable Fonts
One file containing a continuous range of weights and widths, usually smaller than the static weights it replaces.
Definition
A variable font is a single font file that contains a continuous design space along one or more axes, such as weight, width and optical size. Any instance along an axis can be rendered without loading an additional file.
Craft convention. True because the industry converged on it. Breaking it costs familiarity, not correctness.
On this plate
Reach for this when
- Choosing between static and variable font delivery.
- Optimising font loading performance.
- Building fluid responsive typography.
- The product needs several weights, or optical sizing across a wide range of type sizes.
Common mistakes
- Exposing the full axis range in a design system.
- Assuming variable is always smaller. Verify against the weights you actually use.
- Forgetting a static fallback for environments that need one.
Common axes
| Axis | Tag | What it controls |
|---|---|---|
| Weight | wght | Stroke thickness, typically 100 to 900. |
| Width | wdth | Horizontal proportion, useful for fitting text into constrained space. |
| Optical size | opsz | Adjusts contrast and spacing for the intended rendering size. |
| Slant | slnt | Angle of oblique, as a continuous value. |
| Italic | ital | Switches to true italic letterforms, which is not the same as slant. |
Practical benefits
- Usually a smaller total payload than three or four static weights, and one request instead of several.
- Fluid weight interpolation in responsive typography, so heading weight can scale with viewport.
- Optical size support, where available, genuinely improves rendering at both small and large sizes.
- Fine-grained weight tuning for dark mode without shipping extra files.
Using them without losing control
Do
- Expose named instances as tokens, so components cannot invent weights.
- Subset aggressively. A variable font that ships every script is not lighter than static cuts.
- Use the optical size axis where the typeface has one. It is the axis with the most visible benefit.
- Provide a static fallback for anything that must render before the font loads.
Do not
- Animate a weight axis on scroll and call it motion design.
- Let arbitrary axis values appear in component styles.
- Assume one variable file always beats two static weights on total bytes.
In practice
- i.
Weight that responds to viewport
Responsive typographySlightly reducing heading weight as the viewport narrows keeps optical weight consistent when the type also shrinks. Doing this with static fonts would require additional files.
- ii.
Constraining the axes
Why tokens still matterA continuous weight axis means any of nine hundred values is available, which in practice means eleven turn up across a codebase. Naming four and forbidding the rest is what keeps the system a system.
Local chart
FND·037 · Region II · Grid D1
This entry and the entries it is stated to connect with. Each line is labelled with what the connection means.
Sources
Where a source establishes something narrower than the popular reading of it, the note says so.
- [1]
MDN Web Docs
Continue from here
Each link says what the connection is, so you can tell a principle from an alternative from a thing people mix this up with.
Short definition
The one-paragraph version, for when that is all you need.
- Variable FontTERM·064 · Term
Related concept
Connected closely enough to change how you apply this.
- Design TokensSYS·001 · Design system
- Font SelectionFND·030 · UI foundation
- Font WeightFND·033 · UI foundation
- Performance as User ExperienceFND·054 · UI foundation
- Responsive TypographyFND·038 · UI foundation
- Type ScaleFND·031 · UI foundation