
Font loading can make or break perceived performance. Done right, text renders quickly and layouts remain stable. Done poorly, users see flashes, reflows, and long delays. This guide provides concrete strategies to deliver fonts fast with minimal jank.
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preload" as="font" href="/fonts/Inter-roman.var.woff2" type="font/woff2" crossorigin>
swap for text UIs; optional for ultra‑performance.@font-face {
font-family: "Inter";
src: url("/fonts/Inter-roman.var.woff2") format("woff2");
font-display: swap; /* or optional */
font-weight: 100 900;
}
@font-face {
font-family: "Inter Subset Latin";
src: url("/fonts/InterLatin.var.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
size-adjust: Align fallback metrics to reduce CLS.@font-face {
font-family: "Inter Fallback";
src: local("Arial");
size-adjust: 107%;
ascent-override: 90%;
descent-override: 22%;
line-gap-override: 0%;
}
swap or optional.html { font-synthesis-weight: none; font-synthesis-style: none; }
display=swap params.swap or optionalunicode-rangesize-adjust and metric overridesThere is no single perfect strategy, but combining preload, swap, subsetting, and metric tuning yields a fast, stable experience that scales.