Testing

Variable Fonts: Browser Support, Axes, Known Issues

Variable fonts work in Chrome 66+, Edge 17+, Firefox 62+, Safari 11+, Opera 53+, Samsung Internet 8.2+, and Android Browser 67+. Learn axes, CSS, and quirks.

Author

Prince Dewani

May 6, 2026

Variable fonts are an OpenType font format that stores many weights, widths, and styles in a single file using a continuous range of design axes. They work in Chrome 66+, Edge 17+, Firefox 62+, Safari 11+ on macOS and iOS, Opera 53+, Samsung Internet 8.2+, and Android Browser 67+, while Internet Explorer never added support.

This guide covers what variable fonts are, the browsers that support them, the registered axes, how to use them in CSS, and the known issues to plan around.

What are variable fonts?

Variable fonts are an extension of the OpenType 1.8 font specification, jointly developed by Microsoft, Adobe, Apple, and Google. A single variable font file stores a continuous range of weights, widths, slants, and other design axes, so one file can replace dozens of static font files. CSS reads the file through @font-face and selects any point along each axis.

Which browsers does Variable Fonts support?

Variable fonts work in every modern browser. Chrome, Edge, Firefox, Safari, Opera, Samsung Internet, and the Android Browser all support them, while Internet Explorer never added support.

Loading browser compatibility data...

Variable fonts compatibility in Chrome

Chrome supports variable fonts from Chrome 66 on desktop and Chrome for Android 66 on mobile. Chrome 62 to 65 had partial support that left out OpenType-CFF2 and COLR variable fonts; Chrome 59 to 61 had the feature behind a flag and disabled by default; Chrome 4 to 58 did not support variable fonts at all.

Variable fonts compatibility in Edge

Edge supports variable fonts from Edge 17 on Windows. Edge 12 to 16, the legacy EdgeHTML build, did not support them. The Chromium-based Edge from version 79 onwards inherits full variable font support from Chrome on Windows, macOS, Linux, and Android.

Variable fonts compatibility in Firefox

Firefox supports variable fonts from Firefox 62 on Windows, macOS, Linux, and Android. Firefox needs macOS 10.13 High Sierra or later, or Windows 10 Fall Creators Update (build 1709) or later, to drive the platform text stack. Firefox does not yet support OpenType-CFF2 variable fonts, so PostScript-flavoured variable files render with the static fallback.

Variable fonts compatibility in Safari

Safari was the first browser to ship variable fonts. Desktop Safari 11 on macOS and iOS Safari 11 on iPhone and iPad both support the format, including OpenType-CFF2 files and the font-optical-sizing CSS property. iPadOS Safari follows the iOS Safari versioning, so iPadOS 13+ inherits the same support.

Variable fonts compatibility in Opera

Opera supports variable fonts from Opera 53 on desktop and Opera Mobile 73 on Android. Opera 49 to 52 had partial support without OpenType-CFF2; Opera 4 to 48 did not support variable fonts. Opera Mini, which uses a server-side rendering pipeline, does not support variable fonts.

Variable fonts compatibility in Samsung Internet

Samsung Internet supports variable fonts from Samsung Internet 8.2 on Android. Older Samsung Internet builds rely on the Chromium WebView shipped with the device, so any Galaxy phone or tablet on a current Android release has full variable font support.

Variable fonts compatibility in Android Browser

The stock Android Browser supports variable fonts from version 67 onwards. Older Android Browser builds tied to Android 4.x and 5.x do not support variable fonts and need a static font fallback.

Variable fonts compatibility in Internet Explorer

Internet Explorer does not support variable fonts. Microsoft has retired Internet Explorer, and any user still on IE 11 will see the static font listed in the @font-face src descriptor or the next entry in the CSS font-family stack.

Note

Note: Variable fonts render differently across Chrome, Firefox, and Safari, especially around CFF2 files and optical sizing. Test them on real browsers and OS with TestMu AI. Try TestMu AI free!

What are the registered axes in variable fonts?

OpenType registers five variation axes that map to standard CSS properties. Custom axes use uppercase tags and ride on the font-variation-settings property.

  • wght (Weight): Sets thickness from 1 to 1000. Maps to the CSS font-weight property, so font-weight: 750 picks a value between 700 and 800.
  • wdth (Width): Sets condensed to extended, typically 75 to 125. Maps to font-stretch, so font-stretch: 110% widens the letterforms.
  • slnt (Slant): Sets the angle of upright letters from -90 to 90 degrees. Maps to font-style: oblique with an angle, e.g., font-style: oblique 12deg.
  • ital (Italic): Toggles italic letterforms with the values 0 or 1. Maps to font-style: italic, switching to true italic glyphs when the font ships them.
  • opsz (Optical size): Tunes stroke contrast and detail to the rendered point size. Maps to font-optical-sizing: auto, which lets the browser pick the right value for the current font-size.
  • Custom axes: Type designers can ship axes such as GRAD (grade), MONO (monospace), CASL (casual), or XOPQ (x-opaque). Custom axes use uppercase 4-letter tags and are set through font-variation-settings: "GRAD" 100.

How do you use variable fonts in CSS?

Load the variable font through @font-face, declare the supported ranges on the descriptor, and drive the axes through standard CSS properties wherever they exist. Reach for font-variation-settings only for axes that have no CSS shortcut, since standard properties cascade and animate more cleanly.

@font-face {
  font-family: "Recursive";
  src: url("Recursive-VF.woff2") format("woff2-variations"),
       url("Recursive-VF.woff2") format("woff2");
  font-weight: 300 1000;
  font-stretch: 75% 125%;
  font-style: oblique 0deg 15deg;
}

h1 {
  font-family: "Recursive", sans-serif;
  font-weight: 750;
  font-stretch: 110%;
  font-optical-sizing: auto;
  font-variation-settings: "GRAD" 100, "MONO" 0.4;
}

@supports not (font-variation-settings: "wght" 400) {
  h1 { font-family: "Recursive Static Bold", sans-serif; }
}

The format() hint format("woff2-variations") tells Chrome 66 to 70 and Safari 11 to 13 that the file is a variable font. Newer browsers accept plain format("woff2"), so list both for the widest reach. Wrap legacy fallbacks in an @supports negative block so older browsers swap to a static font without parsing the variable rules.

...

What are the known issues with variable fonts?

Variable fonts ship across every modern browser, but the rendering details still diverge. Plan for these issues before you commit a single variable file to production.

  • Firefox skips OpenType-CFF2: Firefox renders TrueType-flavoured variable fonts but not the CFF2 (PostScript) variant. A PostScript variable file from Adobe Fonts falls back to the static face on Firefox and works fine on Chrome and Safari.
  • Animation cost on long pages: Animating font-variation-settings forces the layout engine to rasterise glyphs on every frame. On long articles or large heading blocks the cost shows up as dropped frames; throttle the animation or scope it to a viewport-bound element.
  • FOUT and FOIT during font load: A variable font is one big file (often 200-500 KB), so the browser may flash the fallback (FOUT) or hide the text (FOIT) before the variable file lands. Use font-display: swap and a numerically close fallback in font-family.
  • font-variation-settings does not cascade: Setting one axis through font-variation-settings overwrites every other axis on the element. Reach for font-weight, font-stretch, and font-style first; use font-variation-settings only for custom axes.
  • Internet Explorer and older Android: IE and Android Browser before 67 do not support variable fonts. Ship a static font fallback through the @font-face src list, or detect with @supports and serve the static stylesheet.

In my experience, the rendering gap that surprises teams most is the optical-sizing axis, since Safari turns it on automatically when the font ships an opsz axis but Chrome and Firefox only honour it when font-optical-sizing: auto is explicitly set on the element. Audit the value across browsers before shipping a font that uses opsz heavily.

Use the snippet below in any browser console to check whether the current browser supports variable fonts, axis ranges, and optical sizing.

// Run in the DevTools console of any browser to test variable font support.
const supportsVF = CSS.supports("font-variation-settings", '"wght" 400');
console.log("font-variation-settings:", supportsVF ? "yes" : "no");

// Probe individual registered axes via @font-face descriptors.
const supportsRange = CSS.supports("font-weight", "100 900");
console.log("variable font-weight range:", supportsRange ? "yes" : "no");

// Optical sizing is a separate switch that not every variable font ships with.
const supportsOpsz = CSS.supports("font-optical-sizing", "auto");
console.log("font-optical-sizing:", supportsOpsz ? "yes" : "no");
...

Citations

All Variable Fonts version numbers and platform notes in this guide come from these primary sources:

Author

Prince Dewani is a Community Contributor at TestMu AI, where he manages content strategies around software testing, QA, and test automation. He is certified in Selenium, Cypress, Playwright, Appium, Automation Testing, and KaneAI. Prince has also presented academic research at the international conference PBCON-01. He further specializes in on-page SEO, bridging marketing with core testing technologies. On LinkedIn, he is followed by 4,300+ QA engineers, developers, DevOps experts, tech leaders, and AI-focused practitioners in the global testing community.

Open in ChatGPT Icon

Open in ChatGPT

Open in Claude Icon

Open in Claude

Open in Perplexity Icon

Open in Perplexity

Open in Grok Icon

Open in Grok

Open in Gemini AI Icon

Open in Gemini AI

Copied to Clipboard!
...

3000+ Browsers. One Platform.

See exactly how your site performs everywhere.

Try it free
...

Write Tests in Plain English with KaneAI

Create, debug, and evolve tests using natural language.

Try for free

Frequently asked questions

Did you find this page helpful?

More Related Hubs

TestMu AI forEnterprise

Get access to solutions built on Enterprise
grade security, privacy, & compliance

  • Advanced access controls
  • Advanced data retention rules
  • Advanced Local Testing
  • Premium Support options
  • Early access to beta features
  • Private Slack Channel
  • Unlimited Manual Accessibility DevTools Tests