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.

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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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: 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!
OpenType registers five variation axes that map to standard CSS properties. Custom axes use uppercase tags and ride on the font-variation-settings property.
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.
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.
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");All Variable Fonts version numbers and platform notes in this guide come from these primary sources:
Did you find this page helpful?
More Related Hubs
TestMu AI forEnterprise
Get access to solutions built on Enterprise
grade security, privacy, & compliance