Error: JavaScript is needed to render this site: please enable it.
This page offers information about choosing fonts, including choosing embedded (downloaded) fonts.
Choosing fonts is frustrating, especially for those used to print media, since there are so many limitations: a browser can only use fonts which are installed on a user’s PC, or are embedded; no font is installed on all PCs; few are commonly installed; few come in a good variety of widths and weights; and many don’t look good on PC displays. This severely constrains a designer’s choices.
NB: using embedded fonts adds many more choices; see Choosing Embedded (Downloaded) Fonts for more about using embedded fonts.
When suggesting fonts for a web page, several issues must be considered:
You should choose fonts which come in a good variety of weights and (ideally) widths, preferably with italic faces.
For body fonts, this author prefers fonts which come in normal, semibold, and bold weights, in normal and condensed widths.
For header fonts this author prefers font families which come in bold and black weights — and even better, in extrabold weights — in normal, condensed, and expanded widths, and with small caps. And, of course, the body and header fonts must complement each other.
Unfortunately few installed or free embedded fonts meet these desiderata. Many fonts come in only two weights, normal and bold; and when a regular font comes in more than two weights, any condensed counterparts generally come in fewer weights. And expanded fonts are very, very rare.
$ Many exceptionally flexible fonts may be purchased, including many varieties of fonts common with Windows and MacOS. For example, greatly expanded versions of the standard Windows fonts Arial, Georgia, Times New Roman, and Verdana are available with more widths and weights than available with the Windows versions. Unfortunately, for-pay fonts can be very expensive.
Exceptionally flexible free sans-serif fonts include Argentum Novus, Argentum Sans, Assailand, Avrile Sans, Avrile Sans Condensed, Barlow, Bert Sans, Cabin, Avrile Sans, Cheyenne Sans, Cheyenne Sans Novus, Elaine Sans, Encode Sans, Encode Sans Condensed, Encode Sans Expanded, Encode Sans Semi Condensed, Encode Sans Semi Expanded, Ezarion, Fira Sans, Gothic A1, Grenze, IBM Plex Sans, Inter, Libre Franklin, Linik Sans, Manix Sans HL, Metropolis, Morrison, Noto Sans, Noto Sans Display, Public Sans, Raleway, Readiness, Rising Sun, Robert Sun, Roboto, Rosa Sans, Saira, Saira Condensed, Saira Extra Condensed, Saira Semi Condensed, SF UI Display, Spartan, Squarion, Transpass, Trujillo, Verano Sans, and Zapus Sans
Flexible free serif fonts are rarer, including Avrile Serif, IBM Plex Serif, Oregon LDO, Martel, Noto Serif, Noto Serif Display, Spectral, Taviraj, and Trirong.
Important: you should especially consider the many free Squirrel, Google, and Font Library fonts as embedded fonts.
Some fonts have more characters than others. You should suggest fonts having all the characters you use in sites: many specialized fonts have only a limited range of characters. NB: visitors may have older versions of fonts which lack characters supported by newer versions: e.g. very old versions of Microsoft’s Arial font don’t support the Euro character (€). NB: headers typically need a smaller range of characters than body text, so headers may use fonts not suitable for body text.
Suggest common fonts. For sites used within a company, e.g. in an intranet, consider fonts common to the company’s PCs.
Don’t assume that users have the same fonts as you. If you or your client prefers an uncommon font, you can make it the first in a
font-family list, but you must remember that many won’t have uncommon fonts.
If you use different fonts for different types of text, choose similar fonts unless you have a specific reason not to. E.g. if you use Arial for body text, you might reasonably use Arial Narrow for thin body text: but you shouldn’t also use Trebuchet for body text unless you have a good reason for making its text look quite different.
NB: one way to determine whether fonts are similar is to determine whether the fonts have similar metrics, e.g. similar widths and x-heights. Certain font metrics are reported in Fonts ⮞ Font Metrics.
NB: some fonts that are similar to each other are depicted in Fonts ⮞ Font Sets.
Choosing different fonts for different types of text is hard, because common fonts are not commonly available in large font families. The only common font commonly found with a largish family is Arial, which is available on many Windows PCs as Arial, Arial Narrow, Arial Black, and Arial Rounded MT Bold fonts, and sometimes as Arial Nova and Arial Nova Condensed fonts.
As a result, many sites are restricted to a handful of fonts.
Suggest fonts that are easy to read. The most legible body fonts on PC displays are sans-serif fonts optimized for displays. Many fonts which look good in print may not look good on displays because many display resolutions are too low. Note:
You should create sample lorem ipsum text in each of your candidate fonts, and exclude any fonts which are clearly less readable.
Fonts that are a bit darker tend to be a bit more readable, and different browsers may render text more or less darkly. Safari renders text darkest. Whereas on Windows, Edge, Internet Explorer, and Firefox (57 and later) render text less darkly; and Chrome, Edge, Firefox (56 and earlier), Opera, and Vivaldi least darkly.
Here is an example of Fira Sans 16px text from Internet Explorer 11, Firefox 59, and Chrome 65:
![]()
NB: body fonts should not be coloured in shades of grey, because this makes text less readable, especially with Chrome-based browsers.
Because Chrome-based browsers render text less darkly, you should use a Chrome-based browser to judge which fonts are darkest and therefore most readable:
this is especially important because most people use Chrome-based browsers, so many people suffer with fonts which are too pale.
Alternative: if you use Edge, Internet Explorer, or Firefox (57 and later) you can simulate the paler text of Chrome-based browsers by setting the text colour to 444H;
e.g. <span style="color:#444;">Example of text</span> will display “Example of text” somewhat as it would appear with Chrome-based browsers.
NB: there is some indication that OTF fonts are darker than equivalent TTF fonts, but I have not been able to confirm this.
Fonts may be chosen for headers which are not quite suitable for body text, because headers are bolder and usually bigger, so resolution problems are less acute.
Suggest scalable fonts — e.g. TrueType or OpenType fonts — not non-scalable fonts, which look bad at most font sizes. Examples of non-scalable Windows fonts are the Microsoft version of Courier (not the same as Courier New), as well as MS Serif and MS Sans Serif.
Fonts are more legible at higher resolutions, so more fonts become suitable as more people adopt higher resolution displays. But don’t assume that everyone has the same resolution as you have: designers tend to have more powerful PCs with higher resolution displays.
Microsoft’s core web fonts are optimized for displays. The fonts include: Andale Mono, Arial, Arial Black, Comic Sans MS, Courier New, Georgia, Impact, Times New Roman, Trebuchet MS, and Verdana.
Microsoft’s core web font Verdana is best used for small fonts, and only when Verdana is certain to be installed, or when fall-back fonts have similar metrics: small text which is barely legible in Verdana is illegible in most fonts, as most fonts have smaller widths and aspect values.
Microsoft created six new fonts for Vista which can be installed on Windows 2000+, and these are also optimized for displays. The fonts are: Calibri, Cambria, Candara, Consolas, Constantia, and Corbel.
Unfortunately these fonts are less useful than they could be, because none has a semibold weight.
NB: Candara, Constantia, and Corbel have digits with old style numeric descenders, which can look odd, especially in columns of numbers.
Caution: a problem with these fonts is that they
are notably narrower and shorter than text in more common fonts such as Arial, therefore these fonts are harder to read: indeed, the size of the six new Vista fonts is very close
to the size of the Arial small font, when the size of the small font is as recommended in the proposed CCS4 recommendation.
At one time this site used Calibri as its preferred font, but many people complained that the text was too small to read, so this site had to revert to a larger font.
The difference in sizes is illustrated by the following images, which have ‘a’ and ‘x’
in Arial, in Arial Small, and in each of the six new fonts:![]()
![]()
See the sidebar to compare Arial to the six new Vista fonts.
With Windows 10, optional Pan-European Supplemental Fonts are available: Arial Nova, Arial Nova Condensed, Georgia Pro, Georgia Pro Cond, Gill Sans Nova, Gill Sans Nova Cond, Neue Haas Grotesk Text Pro, Rockwell Nova, Rockwell Nova Condensed, Verdana Pro, and Verdana Pro Cond.
Georgia Pro and Verdana Pro are especially flexible fonts, with light, regular, semibold, and black weights, and with both normal and condensed widths. Arial Nova, Gill Sans Nova, and Rockwell Nova are less flexible: Arial Nova with only light, regular, and bold weights; Gills Sans Nova with light, regular, medium, bold, and ultrabold weights; Rockwell Nova with light, regular, bold, and (in normal widths) extrabold weights. Arial Nova, Gill Sans Nova, and Rockwell Nova all lack semibold weights, but do come in normal and condensed widths.
Note that Arial Nova is not very much like Arial; rather, Arial Nova is similar to Univers.
NB: there are two major differences between Georgia and Georgia Pro: Georgia has old style numeric descenders; and Georgia Pro has taller, more legible numeric characters.
NB: the Arial Nova, Georgia Pro, Rockwell Nova, and Verdana Pro fonts have somewhat different metrics from their parent fonts, Arial, Georgia, Rockwell, and Verdana. For example, Arial Nova text is smaller than Arial text.
See the sidebar to compare some new fonts to their parent fonts.
Serif, italic, and oblique fonts are poorer at lower resolutions, lower weights, and in smaller character sizes; they suffer from severe aliasing and loss of fine detail, so such fonts must be used cautiously. Exception: Microsoft’s core web font, Georgia, is optimized for web pages and is more readable than typical serif fonts; Georgia is common with Windows and available for Macs. Exception: there are a small number of serif fonts — see Fonts ⮞ Font Sets ⮞ Serif Fonts Which Are Candidates for Body Fonts — which have large x-heights and which are therefore suitable as body fonts; most must be embedded to be accessible.
With operating systems that support DirectWrite,
certain fonts named in the CSS font-family list which are narrower, wider, lighter, darker, or styled differently than normal are ignored, just as if the
fonts were not installed. This can happen, for example, with Arial Narrow and Arial Black.
DirectWrite may be used on Windows Vista SP2 (and later) by Chrome 37 (and later), Edge (all versions), Internet Explorer 9 (and later), Firefox 4 (and later), Opera 24 (and later), and Vivaldi (all versions). Legacy versions of browsers may offer options to disable DirectWrite, but modern versions don’t.
DirectWrite issues may appear with certain variants of Arial, Arial Special G1, Arial Special G2, Berlin Sans FB, Calibri, DejaVu Sans, DejaVu Serif, Eras ITC, Franklin Gothic, Garth Graphic ATT, Nadianne ATT, Rockwell, Segoe UI, Shannon ATT, Univers — and many more.
To increase the likelihood that all browsers will render fonts as expected, 1 use the CSS font-family
property to specify both the specific font and its font family (e.g. font-family:'Arial Narrow', Arial;), 2 use the
CSS font-stretch property to specify narrower or wider text (e.g. font-stretch:condensed;), and
3 use the CSS font-weight property to specify lighter or darker text (e.g. font-weight:bold;).
Note, however, that even with correct CSS, some browsers may not render different fonts differently: e.g., this author found that modern versions of
Chrome, Firefox (prior to FF57), Opera, SeaMonkey, and Vivaldi wrongly rendered
Segoe UI Light
and Segoe UI Semilight the same, whereas
Edge, Internet Explorer, and Firefox (starting with FF57) correctly rendered them differently.
NB: to ensure that the CSS works when DirectWrite is not enabled, it’s critical to correctly name
the specific font; for example, in font-family:'Franklin Gothic Medium Cond', 'Franklin Gothic', sans-serif; it’s critical
that the specific font truly is named Franklin Gothic Medium Cond. Getting the name right can be hard, because
Windows offers no clear way to determine the real font name: it often implies false font names, e.g. implies that the name of the Franklin Gothic Medium Condensed font is
Franklin Gothic Cond Medium. This author has found that the easiest
way to ensure that the specific font name is correct is to use the font names in the list of fonts in the usually reliable
Universal Character Map or the dp4 Font Viewer.
NB: this author has found no way to write text onto a <canvas> whose font must be selected by font-stretch.
The context.fillText() method can write text whose font can be selected by a combination of font-style, font-variant, font-weight,
font-size and font-family, but not text whose font must be partly selected by font-stretch.
Following are examples — using the Arial, Berlin Sans FB, Calibri, Eras ITC, Franklin Gothic, Rockwell, and Segoe UI font families (and, for lagniappe, two other Segoe fonts and the related Selawik font!) — showing how to cope with DirectWrite issues. The examples work, of course, only if the fonts are installed.
font-family:'Arial Narrow', Arial, sans-serif; font-stretch:condensed; font-weight:normal;font-family:'Arial Narrow', Arial, sans-serif; font-stretch:condensed; font-weight:bold;font-family:Arial, sans-serif; font-stretch:normal; font-weight:normal;font-family:Arial, sans-serif; font-stretch:normal; font-weight:bold;font-family:'Arial Black', Arial, sans-serif; font-stretch:normal; font-weight:900;font-family:'Berlin Sans FB', sans-serif; font-stretch:normal; font-weight:normal;font-family:'Berlin Sans FB Demi', 'Berlin Sans FB', sans-serif; font-stretch:normal; font-weight:600;font-family:'Berlin Sans FB', sans-serif; font-stretch:normal; font-weight:bold;font-family:'Calibri Light', Calibri, sans-serif; font-stretch:normal; font-weight:100;font-family:Calibri, sans-serif; font-stretch:normal; font-weight:normal;font-family:Calibri, sans-serif; font-stretch:normal; font-weight:bold;font-family:'Eras Light ITC', 'Eras ITC', sans-serif; font-stretch:normal; font-weight:100;font-family:'Eras Medium ITC', 'Eras ITC', sans-serif; font-stretch:normal; font-weight:normal;font-family:'Eras Demi ITC', 'Eras ITC', sans-serif; font-stretch:normal; font-weight:600;font-family:'Eras Bold ITC', 'Eras ITC', sans-serif; font-stretch:normal; font-weight:bold;font-family:'Eras Ultra ITC', 'Eras ITC', sans-serif; font-stretch:normal; font-weight:900;font-family:'Franklin Gothic Medium Cond', 'Franklin Gothic', sans-serif; font-stretch:condensed; font-weight:normal;font-family:'Franklin Gothic Demi Cond', 'Franklin Gothic', sans-serif; font-stretch:condensed; font-weight:600;font-family:'Franklin Gothic Medium', 'Franklin Gothic', sans-serif; font-stretch:normal; font-weight:normal;font-family:font-family:'Franklin Gothic Demi', 'Franklin Gothic', sans-serif; font-stretch:normal; font-weight:600;font-family:'Franklin Gothic Heavy', 'Franklin Gothic', sans-serif; font-stretch:normal; font-weight:900;font-family:'Rockwell Condensed', 'Rockwell', serif; font-stretch:condensed; font-weight:normal;font-family:'Rockwell Condensed', 'Rockwell', serif; font-stretch:condensed; font-weight:bold;font-family:Rockwell, serif; font-stretch:normal; font-weight:normal;font-family:Rockwell, serif; font-stretch:normal; font-weight:bold;font-family:'Rockwell Extra Bold', Rockwell, serif; font-stretch:normal; font-weight:900;font-family:'Segoe UI Light', 'Segoe UI', sans-serif; font-stretch:normal; font-weight:100;font-family:'Segoe UI Semilight', 'Segoe UI', sans-serif; font-stretch:normal; font-weight:300;font-family:'Segoe UI', sans-serif; font-stretch:normal; font-weight:normal;font-family:'Segoe UI Semibold', 'Segoe UI', sans-serif; font-stretch:normal; font-weight:600;font-family:'Segoe UI', 'Segoe UI', sans-serif; font-stretch:normal; font-weight:bold;font-family:'Segoe UI Black', 'Segoe UI', sans-serif; font-stretch:normal; font-weight:900;font-family:'Segoe Print', cursive;font-family:'Segoe Script', cursive;font-family:'Selawik Light', 'Selawik', sans-serif; font-stretch:normal; font-weight:100;font-family:'Selawik Semilight', 'Selawik', sans-serif; font-stretch:normal; font-weight:300;font-family:'Selawik', sans-serif; font-stretch:normal; font-weight:normal;font-family:'Selawik Semibold', 'Selawik', sans-serif; font-stretch:normal; font-weight:600;font-family:'Selawik', 'Selawik', sans-serif; font-stretch:normal; font-weight:bold;Some experimentation may be required,
since browsers may exhibit DirectWrite issues with some fonts, but not with others,
and since different values of font-family, font-stretch, and font-weight may be necessary to get the desired results.
Suggest alternate fonts in a CSS font-family list (alias a font set or font stack) as discussed above. The font stack
should include:
One font which is the client’s corporate font, if the font is a legible body font; if it isn’t a legible body font, use a similar font which is legible, or use the corporate font in banners or headings.
Perhaps one embedded font, e.g. Fira Sans, for which you will need HTML similar to:
A few fonts commonly installed on MacOS, e.g. Helvetica, and likewise a few fonts commonly installed on Windows, e.g. Arial.
A useful reference here is Common Fonts to All Versions of Windows, and Mac Equivalents.
A larger number of fonts commonly installed on Linux, e.g. Liberations Sans and Source Sans Pro. A larger number than in Windows and MacOS is wise because different
editions of Linux have notably different fonts, albeit this may be hidden by font substitution (see sidebar).
One generic font, e.g. sans-serif.
Exception: if you list a proposed generic font, you should also list a standard generic font for any
browsers which don’t support the proposed font.
Hence, for example:
Which, in a bold font weight, produces:
A quick brown fox jumps over the lazy dog
Because Windows Chrome-based browsers display text which is paler — and therefore harder to read — than other browsers, you should give priority to Windows fonts which are darker, and therefore easier to read. Here are samples of common Windows sans-serif fonts, in Chrome and in Firefox, to help you pick darker fonts:

Most sites will require several font stacks: one for header text, a second for normal body text, perhaps a third for narrow body text, perhaps another for menus, perhaps more. This site has 4 font stacks for most text, plus 12 font stacks for very specialized text. Examples of the specialized text include fancy ampersands like ‘ & ’ used in titles, and the cursive ‘e’ used in ‘eBook’. The font stacks are listed in Resources ⮞ Colophon.
Important Note: any glyph you use must be in one of the installed or embedded fonts in the applicable font stack. This especially applies to unusual glyphs, such as the pointing hand at the start of this note, since many fonts lack such glyphs. Exception: the browser may also look for the glyph in fonts not listed in the font stack; e.g. Windows will look for glyphs in the Arial or Times New Roman fonts if Helvetica or Times is in the font stack; e.g. Windows 10 (and probably older versions of Windows) will look for glyphs which are symbols or emoji in special Windows fonts such as Segoe UI Emoji; e.g. the browser may look for glyphs in common fonts such as Times New Roman; but these exceptions cannot be depended on, as such behaviour is user-, browser-, and operating-system-dependent.
Caution: the browser might not use one of the suggested fonts, even if it’s installed. E.g., the user may have set an option to disable styles, to use an alternate stylesheet, or to make the browser more friendly to the disabled.
Caution: don’t list non-scalable fonts, e.g. a raster font. Use scalable fonts — e.g. TTF (TrueType) or OTF (OpenType) fonts — instead. Non-scalable fonts look bad at most font sizes. NB: related to this, don’t list Courier before Courier New; Windows may have a non-scalable Courier font, so listing Courier first can result in ugly text on Windows systems.
Caution: always think about Coping with DirectWrite Issues, and must therefore
be prepared to specify both the specific font (e.g. Arial Black) and the font family (e.g. Arial), as well as suitable combinations of font-stretch and font-weight.
Consider specifying different fonts to be used when your pages are printed: e.g. suggest serif fonts by using CSS such as:
Because print resolution is much higher than display resolution, fonts may be specified for printed text which shouldn’t be used for displayed text. When printing, therefore, you have more fonts from which to choose.
Using embedded fonts greatly expands the choices of fonts which may be used in a website.
NB: to learn more about choosing embedded fonts, read Google Design’s Choosing Web Fonts: A Beginner’s Guide.
NB: to learn how to specify embedded fonts, go here.
Embedded fonts are downloaded from a host the first time they are referenced, which adds to the page load time, but the fonts are usually compressed, which minimizes the added time, and the fonts are cached by the browser, so they need not be downloaded again with subsequent pages.
There are constraints to using embedded fonts:
Browser support of embedded fonts is somewhat uneven. Browsers supporting downloadable fonts, and the font formats they support, are listed here.
Mobile browsers may be more limited. Even if a mobile browser supports embeddable fonts, using such fonts will increase the amount downloaded to mobile devices, which will impair performance and may increase user costs. Recommendation: use media queries to ensure that mobile devices won’t see CSS specifying embeddable fonts.
Because different browsers support different types of font files, it may be necessary to provide embedded fonts in several formats to ensure consistent browser behaviour: this may change if the browser makers agree on a standard format, e.g. WOFF2. For more about this, see Wikipedia: look for the section discussing browser support.
Different font sources offer fonts in different ways. For example, a Google’s font service lets you download its fonts, && lets you use web fonts hosted on its server; b Adobe Edge’s font service doesn’t let you download its fonts, but it does let you use web fonts hosted on its server; and c Font Squirrel lets you download its fonts, and lets you download web fonts which you can host on your own server, but it doesn’t host web fonts on its server.
Sources of embedded fonts do not necessarily have the latest versions of the fonts, nor do they necessarily have all the variants, e.g. style, weights, widths, small-caps, and character sets. A good example is Source Serif Pro, which in Oct 2017 was available in 3 weights (400, 600, and 700) from Google’s font service, but 6 weights (200, 300, 400, 600, 700, and 900) from Adobe’s Edge font service and from Font Squirrel. And Google’s font service had an older version of the fonts than Font Squirrel did. You should examine the alternatives before choosing whose fonts to use.
Note that it’s common for embedded font services to download font files with limited subsets of characters — e.g. a pan-European subset which lacks Greek, Cyrillic, Hebrew, Arabic, Indic, and CJK characters — to minimize download times, unless the fonts are downloaded using options to ensure that desired subsets are included in the downloads.
With some browsers there are problems if some fonts are installed (local) and fonts from the same family are embedded. For example, if Ubuntu and Ubuntu Condensed are installed, and Ubuntu is also embedded, Firefox won’t find the Ubuntu Condensed font unless it’s also embedded. If, therefore, you declare an embedded font, you should also declare all variants of it that you are using.
Fonts are subject to copyright laws: only certain fonts may legally be redistributed (downloaded).
Some tools which create embeddable fonts refuse to create them from certain static fonts, either ignoring the static fonts or reporting that the static fonts are corrupt.
Some fonts which look good when printed will look bad when displayed, especially in the smaller font sizes found in body text, so many embeddable fonts will realistically work well only in header text.
The font files take time to download, especially when the font service is slow, increasing page load times, though browser caching reduces the importance of this.
The time needed to download font files is worse for certain browsers which download all downloadable fonts named in stylesheets, even when not all these fonts are used on a given page.
The time needed to download font files is a more serious problem for mobile browsers, especially for users who must pay for the amount downloaded.
Sources of embedded fonts often give you the choice of selecting a subset of a font which contains fewer characters: for example, a subset which contains only the basic latin characters (i.e. the standard USASCII characters), or a subset which contains the basic latin characters plus the common European accented characters; choosing a subset reduces the sizes of the font files which must be downloaded.
Different browsers render pages differently when font files haven’t yet been downloaded: e.g. some may display blanks for text until the font files are downloaded; some may display text in a default font and change the font after the download is done. Either behaviour can be disconcerting.
When testing a local (off-line) site, with no Internet connection, the browser may timeout trying to establish a connection to the font service, making it impossible to do local testing. This author has found it necessary to create local copies of the fonts, and to create JavaScript to dynamically generate the code that loads the embedded fonts iff the site isn’t local so that he can continue to do site development with no Internet connection. This has the beneficial side-effect of decreasing page load times during local testing.
There might be less need for downloadable fonts if there were a common, free, rich set of fonts which all users had: but this is unlikely.
See Using Embedded Fonts to learn how to specify embedded fonts.