One of the downsides of using web fonts is that if a font is not available on a user’s device, it must be downloaded. This means that before the font becomes available the browser has to decide how to handle the display of any block of text that uses that font. And it needs to do so in a way that doesn’t significantly impact the user experience and perceived performance.
In the course of time, browsers have adopted several strategies to mitigate this problem. But they do this in different ways and out of the control of developers, who have had to devise several techniques and workarounds to overcome these issues.
Enter the font-display descriptor for the
@font-face at-rule. This CSS feature introduces a way to standardize these behaviors and provide more control to developers.
Before looking in detail at the various features offered by
font-display, let’s briefly consider how you might use the feature in your CSS.
First of all,
font-display is not a CSS property but, as mentioned in the intro, it is a descriptor for the
@font-face at-rule. This means that it must be used inside a
@font-face rule, as showed in the following code:
font-family: ‘Saira Condensed’;
src: url(fonts/sairacondensed.woff2) format(‘woff2’);
In this snippet I’m defining a
swap value for the font
The keywords for all the available values are:
The initial value for
In later sections I’ll go over each of these values in detail. But first, let’s look at the time period that the browser uses to determine the font to be rendered. When discussing each of the values, I’ll explain the different aspects of the timeline and how these behave for each value.
At the core of this feature is the concept of the font-display timeline. The font loading time, starting from its request and ending with its successful loading or failure, can be divided into three consecutive periods that dictate how a browser should render the text. These three periods are as follows:
- The block period. During this period, the browser renders the text with an invisible fallback font. If the requested font successfully loads, the text is re-rendered with that requested font. The invisible fallback font acts as a blank placeholder for the text. This reduces layout shifting when the re-rendering is performed.
- The swap period. If the desired font is not yet available, the fallback font is used, but this time the text is visible. Again, if the loading font comes in, it is used.
- The failure period. If the font does not become available, the browser doesn’t wait for it, and the text will be displayed with the fallback font on the duration of the current page visit. Note that this doesn’t necessarily mean that the font loading is aborted; instead, the browser can decide to continue it, so that the font will be ready for use on successive page visits by the same user.
Continue reading %CSS font-display: The Future of Font Rendering on the Web%