After publishing The Comprehensive Guide to Font Loading Strategies, I had a few requests to define a few terms used there. This document is a response to those requests. If something is missing below, please let me know on Twitter @zachleat or in the comments.
- @font-face Descriptors
- Descriptors are key-value pairs inside of the
font-faceblock. Often incorrectly referred to as properties (properties are on the DOM elements themselves). Examples include
font-style, and a few others.
- Font Matching Algorithm
- How the browser matches a
font-familyCSS property on an element to an appropriate
@font-faceblock. Not all the properties have to match exactly to descriptors—just the
font-family. The rest are fuzzy-matched. If there isn’t an exact match, this may result in font synthesis. Read more at Lazy Loading Web Fonts is Probably Not What You Want and the W3C specification.
- Font Synthesis, also Faux-bold and Faux-italic
- Controls how bold and italic variations of a roman web font are rendered, if independent web fonts for these variations don’t have appropriately matched @font-face blocks. Also known as Faux-bold or Faux-italic rendering. Use the Faux-pas project to highlight when this happens on your site. A few browsers support the
font-synthesisCSS property to control this (see the MDN Browser Compatibility for
font-synthesis). Read more at the W3C Specification.
- System Fonts
- Fonts that are available locally on an operating system without making any network requests. Think Helvetica or Arial, Times or Times New Roman. Availability varies by operating system. Search fontfamily.io for compatibility information.
- Modifying the font file to include only a small portion of the original glyphs and features, typically used to optimize a font file for a single language on the web. This can be dangerous because no language is an island—proper nouns can crop up in many different places! This results in smaller font files but may also violate your font’s license agreement. Use with the
unicode-rangedescriptor for even better results. The glyphhanger tool can help you diagnose what characters you need on a statically generated site to better subset your web font files.
- Roman font
- Traditionally lowercased, roman is used to mean non-italic but in my experience (while perhaps not pedantically correct) it’s usually extended to non-bold as well. The “regular” font. Read a Non-italicized FAQ on Stack Exchange or Emphasis on Wikipedia.
- Flash of Invisible Text: Default browser behavior to render text invisible while the web font is loading. In modern browsers, FOIT lasts a maximum of three seconds. Sometimes when I’m being incredibly accurate (pedantic), I’ll differentiate between FOIT ∞ and FOIT 3s by including the timeout as a suffix. When people say that web fonts are blocking resources, they are likely referring to FOIT. FOIT is our enemy.
- Flash of Unstyled Text: Default behavior to render text with the fallback system font while the web font has loaded. Fallback text renders after the FOIT timeout has passed—usually three seconds. Internet Explorer and Edge don’t wait—they render fallback text immediately ❤️. FOUT is preferable to FOIT but care must be taken to minimize its reflow effect.
- Flash of Faux Text: A font loading strategy to render a roman web font first, and then use
font-synthesisto render bold and italic variations immediately while the remaining true bold and true italic web font variations continue to load.