Guides

    Variable Fonts in a Brand System: Axes and Optical Size

    One variable font file replaces a shelf of static weight cuts — and its optical size axis does something no weight dropdown can ever reproduce.

    Versely Team9 min read

    A typical brand type system ships as a pile of files pretending to be one font: Regular, Medium, SemiBold, Bold, Black, each its own asset, each hand-picked for a specific use, none of them actually related to each other as far as the computer is concerned. Swap "SemiBold" for "the weight that's 62% of the way to Bold" and there's no such file — you're stuck with whichever discrete cuts the foundry happened to ship. A variable font replaces the whole shelf with one file that can produce any point along that range, on demand. That's the pitch everyone's heard. The part that gets skipped is that weight is the least interesting axis in the format — optical size does something a stack of static weights structurally cannot.

    Flat lay of a workspace with color swatches, a notebook and a tablet showing layout sketches

    Five registered axes, not one

    The variable font specification defines five registered axes: weight, width, optical size, slant, and italics. "Registered" is doing real work in that sentence — these five have standardized meanings across every variable font that implements them, which is why a design tool can offer one weight slider that works correctly regardless of which registered variable font is loaded. A font can define its own custom axes beyond these five — x-height, stroke contrast, whatever a type designer wants — but those aren't portable in the same way; a custom axis means something only within that specific font family.

    Weight and width are the two most people already understand — thin-to-black, condensed-to-expanded. Slant and italics are related but distinct: slant is a mechanical shear applied to upright letterforms, while italics (where present as its own axis) swaps in genuinely different, cursive-influenced letter shapes, not just a tilted version of the same glyphs. Optical size is the one worth slowing down on, because it isn't a stylistic choice in the way the other four are. It's a correction.

    What optical size actually corrects

    At small point sizes, thin strokes and tight counters simply disappear — ink traps close up, hairlines drop out at low resolution, the letterform reads as mush before it reads as a word. Type designers have always known this, which is why a well-made display face and its "text" companion were traditionally drawn as separate typefaces by hand, not just scaled copies of each other. The optical size axis automates that correction inside one file. At small sizes, the design responds with looser spacing and thicker strokes; at large sizes, it shifts toward thinner strokes and more rendered detail — the same underlying letterform, adjusted for the size it's actually being read at.

    This is the specific thing a weight dropdown cannot reproduce, because weight and optical size are correcting for different variables. Weight is a stylistic choice — how much visual mass a brand wants. Optical size is a legibility correction tied to how big the text will actually render, which has nothing to do with brand voice and everything to do with physics: a caption at 14px and a headline at 96px are not well served by the same stroke thickness and spacing, no matter which weight you picked for either one. Nine static weight files give you nine points on the weight axis and zero points on the optical size axis — the correction simply doesn't exist unless the font was drawn with it in mind.

    How a brand system actually calls this

    In practice, this isn't a design-tool-only concept — it's callable directly. Google Fonts' v2 CSS API fully supports variable fonts, and axis ranges are requested by joining two values with .. in the family parameter: family=Crimson+Pro:wght@200..900 pulls the full weight range from thin to black in one file, and combining axes — family=Crimson+Pro:ital,wght@1,200..900 — layers italics on top of a weight range in the same request. That's the practical shape of "one file instead of nine": a single network request carrying the entire usable range, resolved to a specific point on the axis wherever the CSS actually sets it, rather than a build step choosing which discrete cuts make the cut for the file list.

    What this looks like without true axes yet

    Not every system that ships fonts today is built on variable files, and it's worth seeing what the alternative costs concretely rather than abstractly. Versely's own caption and overlay font library is a deliberately curated set of fixed weight cuts, not a variable-axis system — each font ships as one or two specific static weights chosen for on-video legibility, with the reasoning behind that choice written out per font rather than left implicit. Montserrat's entry is a clean example: its authored guidance notes that at light weights it thins out over busy footage, and recommends staying at 600-weight or heavier for captions layered over motion. That's the optical-size problem in miniature, solved by editorial judgment instead of an axis — a human decided, once, which static cut survives a specific hard viewing condition, rather than a continuous control adjusting to it automatically.

    The static-cut cost shows up structurally, too. Poppins and its bold cut aren't one font with a weight range in this system — they're two separate catalog entries, poppins and poppins-bold, each its own loaded asset, each maintained as if it were an unrelated typeface. That's the exact brittleness a single variable file with a weight axis exists to eliminate: instead of one file serving the full range, the system carries two full assets to cover two points on what would otherwise be a continuous line. It's a completely reasonable design for a curated caption-and-overlay use case, where "pick the right pre-vetted weight for this format" is genuinely simpler than exposing a slider — but it's the same tradeoff a brand's full type system faces at larger scale, just visible here in miniature and worth recognizing for what it is.

    Building the axis decision into a brand kit

    However the underlying files work, the brand-facing rule belongs in one place rather than being re-decided per document. A brand kit is exactly that: the saved set of fonts, colors and defaults a system is expected to apply without being reminded each time, and font choice inside it is deterministic wherever it governs overlay or caption text — a font is that font, not a suggestion the way a color can be inside a generated image. That makes the type-system decision worth getting right once: if the working files are true variable fonts, the kit can specify axis ranges rather than a fixed list of named weights, keeping headline, subhead and caption sizes each on their own correctly-corrected point along weight and optical size instead of sharing one compromise cut across all three.

    For live-rendered text on video specifically — captions, hook lines, overlay copy — Versely's caption style previews are where the actual rendered weight-in-context question gets answered before a decision goes into the brand kit: what a font looks like burned into motion footage at caption size is a different question than what it looks like in a static mockup, and it's worth checking there rather than assuming a weight that reads well in a design file will read the same way over video.

    FAQ

    What's the practical difference between weight and optical size?

    Weight is a stylistic choice about visual mass — how thin or bold a brand wants its type to read. Optical size is a legibility correction tied to the actual rendered size of the text — smaller sizes need thicker strokes and looser spacing to stay legible, larger sizes can carry thinner strokes and finer detail. They solve different problems and a font needs a dedicated optical size axis to handle the second one automatically.

    Can I get the same result as optical size by just picking a heavier weight for small text?

    Not fully. A heavier static weight adds mass uniformly, but optical size also adjusts spacing, aperture and proportion in ways a simple weight bump doesn't reproduce — it's a size-specific correction, not just "more ink." Without a dedicated axis, the closest available fix is manual: pick a heavier static cut for small sizes and accept it's an approximation.

    Are all five registered variable font axes present in every variable font?

    No. Registered means the five have a standardized meaning when a font does implement them, not that every variable font implements all five. Many variable fonts only expose a weight axis; optical size and the others are added at the type designer's discretion.

    Do I need special software to use variable font axes on the web?

    No — axis ranges can be requested directly through a font API's URL parameters, such as Google Fonts' v2 CSS API, which accepts axis ranges like a weight span joined by two dots in the family request. No design-tool-specific plugin is required to serve or render the range.

    Why does a curated set of static font weights still make sense for some use cases?

    Because the tradeoff runs the other way for a narrow, high-scrutiny use case: fewer, pre-vetted options reduce decision overhead and guarantee a legible result in a hard viewing context, like captions over busy video motion. A continuous axis is more flexible; a curated static set is more foolproof — which one wins depends on whether the person choosing needs the flexibility or needs the guardrail.

    Check how a font actually renders in motion before it goes into your brand kit: preview weight and style live in Versely's caption styles, then browse the full font library for the reasoning behind each recommended cut.