@font-face 3dh5k
The @font-face CSS at-rule allows you to define and use your own custom fonts, thus allowing you to extend the limited set of standard system fonts that are installed by default on a computer, and that browsers can access and use. 1w4d31
The @font-face
rule allows for linking to fonts that are automatically fetched and activated when needed. This allows you to select a font that closely matches the design goals for a given page rather than limiting the font choice to a set of fonts available on a given platform.
The @font-face rule consists of the @font-face
at-keyword followed by a block of font descriptor declarations.
@font-face { /* font-descriptor declarations */ }
The font descriptor declarations include information in a form similar to the property:value pair form, and that provide a description of the font face being defined. You can describe the font face’s font-family, font-variant, font-weight, font-stretch, font-style, source (src
, which indicates the source of the font face that you’re fetching into the page), and unicode range.
An example of a @font-face
declaration may look like this:
@font-face { font-family: "Graublau Web"; src: url("GraublauWeb.eot?") format("eot"), url("GraublauWeb.woff") format("woff"), url("GraublauWeb.ttf") format("truetype"); }
The font-family
property specifies the font family name that you will be able to use throughout the document. For example:
body { font-family: "Grablau Web", sans-serif; }
The src
property specifies the source of the font that the browser will use to fetch the font from. It takes a list of comma-separated url()
functions, each containing a URI of the font. This is usually a local set of file formats (see notes section below for more information), or a URI to a location that allows you to the font from.
@font-face { font-family: Gentium; src: url(http://example.com/fonts/Gentium.woff); }
Inside an @font-face
, and in addition to the two main font descriptors font-family
and src
, you can specify more information about the font face in use. For example, if you want to define and use a font family that has different font variations and weights, you would define the different font faces like this:
@font-face { font-family: "Open Sans"; font-style: normal; font-weight: 400; src: local("Open Sans"), local("OpenSans"), url(http://themes.googlecontent.com/static/fonts/opensans/v8/cJZKeOuBrn4kERxqtaUH3T8E0i7KZn-EPnyo3HZu7kw.woff) format("woff"); } @font-face { font-family: "Open Sans"; font-style: normal; font-weight: 700; src: local("Open Sans Bold"), local("OpenSans-Bold"), url(http://themes.googlecontent.com/static/fonts/opensans/v8/k3k702ZOKiLJc3WVjuplzHhCUOGz7vYGh680lGh-uXM.woff) format("woff"); } @font-face { font-family: "Open Sans"; font-style: italic; font-weight: 400; src: local("Open Sans Italic"), local("OpenSans-Italic"), url(http://themes.googlecontent.com/static/fonts/opensans/v8/xjAJXh38I15wypJXxuGMBobN6UDyHWBl620a-IRfuBk.woff) format("woff"); } @font-face { font-family: "Open Sans"; font-style: italic; font-weight: 700; src: local("Open Sans Bold Italic"), local("OpenSans-BoldItalic"), url(http://themes.googlecontent.com/static/fonts/opensans/v8/PRmiXeptR36kaC0GEAetxjqR_3kx9_hJXbbyU8S6IN0.woff) format("woff"); }
The above example sets the font style and weight for every individual face; this makes it possible to use the font in its different styles and weight throughout the page:
h1 { font: 700 italic "Open Sans", sans-serif; } p { font-family: "Open Sans", sans-serif; } p .note { font-style: italic; }
Also, the local
function indicates that the ’s local copy of “Open Sans” is used; if the does not have that font installed (two different names are tried), then the able font (http://themes.googlecontent.com/static/fonts/opensans/v8/cJZKeOuBrn4kERxqtaUH3T8E0i7KZn-EPnyo3HZu7kw.woff
) is used instead.
All the font faces will load and be displayed because they are defined in the @font-face
rules above. If you use a font face weight or style that is not defined in the @font-face
, the browser will create its own version, which is almost always not desirable.
A given set of @font-face
rules define a set of fonts available for use within the documents that contain these rules. Defined fonts are only available to documents that reference them. When font matching is done, fonts defined using these rules are considered before other available fonts on a system.
Font Face Formats 3h2x6k
The @font-face
rule has good browser , but different browsers want you to use different font file types. There are four main font formats used:
- WOFF (the Web Open Font Format): A web font format developed by Mozilla. According to the spec
this format was designed to provide lightweight, easy-to-implement compression of font data, suitable for use with CSS
This format seems to be the best of all formats and seems to be the one all browsers are headed towards.@font-face
rules. Any properly licensed TrueType/OpenType/Open Font Format file can be packaged in WOFF format for Web use. The WOFF format is not intended to replace other formats such as TrueType/OpenType/Open Font Format or SVG fonts, but provides an alternative solution for use cases where these formats may be less optimal, or where licensing considerations make their use less acceptable. The WOFF format also allows additional metadata to be attached to the file; this can be used by font designers or vendors to include licensing or other information, beyond that present in the original font. Such metadata does not affect the rendering of the font in any way, but may be displayed to the on request. - EOT (the Embedded Open Type): It was developed by Microsoft. According to the spec: it was developed
to enable TrueType and OpenType fonts to be linked to web pages for to render the web page with the font the author desired.
It’s the only format that IE8 and below will recognize when using @font-face. - OTF/TTF (OpenType Font and TrueType Font): OpenType is a cross-platform type format that includes expert layout features to provide richer linguistic and advanced typographic control. OTF is a more recent format than TTF, so OTF has some features that TTF doesn’t. These two formats can easily be copied and used illegally. The WOFF format is intended to be used as an alternative solution for use cases where these formats may be less optimal, or where licensing considerations make their use less acceptable, as mentioned above.
- SVG/SVGZ (Scalable Vector Graphics): SVG is a vector re-creation of the font. It was not meant to concur with other formats like PostScript or OTF, but as a simple means of embedding glyph information for rendering engines. SVG fonts usually have smaller file sizes, thus allowing for better performance on mobile devices.
Browser for the different format differs, so you will most likely find all font formats linked inside an @font-face
rule in the src
descriptor. However, there is no need to do that anymore. Paul Irish has written an excellent article about a bulletproof @font-face syntax that is sure to work cross-browser, and that syntax is the one we will be using throughout the examples in the entry. You can read more about the why’s of the syntax in his detailed article.
You can also always refer to a font face kit generator to generate the @font-face
rules for you. Read the “Tools” section below for more information.
Font Services 2z4s3h
There are several web font services online that provide a long list of web fonts that are so versatile that you’ll definitely find a great font to match your design needs. These services provide access to legal fonts, and deal with the font delivery for you. Among these services we mention the following popular ones:
If you want a quick overview of these font embedding services and a comparison between them, this comparative article on Smashing Magazine is an excellent starting point.
@font-face Generator z124i
FontSquirrel’s generator is an indispensable tool when implementing @font-face
.

Some of the font services above allow you to a font as one format, not as a complete font kit. A font kit would contain all font formats you need including woff
, eot
, svg
, and ttf
. For example, you can a free font from FontSquirrel itself, but the ed font usually only comes in one format (mostly ttf
or otf
).

Using the FontSquirrel’s generator you can that one font format and, as long as the font is legally eligible for web embedding, it will generate a complete font face kit for you to , with a demo page and a style sheet that allows you to copy-paste the @font-face
rules into your own style sheet and start using them directly.
You can learn more about creating a complete @font-face
kit in one of these resources:
@font-face Performance and Bugs 5v4r5m
Rendering fonts on a web page differs from one browser to another. As mentioned on MDN, When Gecko displays a page that uses web fonts, it initially displays text using the best CSS fallback font available on the ’s computer while it waits for the web font to finish ing. As each web font finishes ing, Gecko updates the text that uses that font. This allows the to read the text on the page more quickly.
There are also some performance issues resulting from loading custom fonts using @font-face
because, after all, you will be loading additional large resources to your page, and that usually comes with a cost. Steve Souders has written a long and extensive article about the performance issues. There are also some useful tips for optimizing web font rendering, that you may be interested in checking out.
Official Syntax 4j1l4a
@font-face { [font-family: <family-name>;]? [src: [ <uri> [format(<string>#)]? | <font-face-name> ]#;]? [unicode-range: <urange>#;]? [font-variant: <font-variant>;]? [font-feature-settings: normal|<feature-tag-value>#;]? [font-stretch: <font-stretch>;]? [font-weight: <weight>]; [font-style: <style>]; }
Values 4w6m73
The following are the possible descriptor values you can use in an @font-face
rule:
- font-family
-
This descriptor defines the font family name that will be used in all CSS font family name matchings. It is required for the
@font-face
rule to be valid. It overrides the font family names contained in the underlying font data. If the font family name is the same as a font family available in a given ’s environment, it effectively hides the underlying font for documents that use the stylesheet. This allows you to freely choose font-family names without worrying about conflicts with font family names present in a given ’s environment. Likewise, platform substitutions for a given font family name must not be used.Font family names other than generic families must either be given quoted as strings, or unquoted as a sequence of one or more identifiers. See the
font-family
property entry for more information. - src
-
[ <string> #)]? | <font-face-name> ] #
This descriptor specifies the resource containing font data. It is required for the
@font-face
rule to be valid. Its value is a prioritized, comma-separated list of external references or locally-installed font face names. When a font is needed the agent iterates over the set of references listed, using the first one it can successfully activate. Fonts containing invalid data or local font faces that are not found are ignored and the agent loads the next font in the list.As with other URLs in CSS, the URL may be relative, in which case it is resolved relative to the location of the style sheet containing the
@font-face
rule. In the case of SVG fonts, the URL points to an element within a document containing SVG font definitions. If the element reference is omitted, a reference to the first defined font is implied. - font-style
-
See the
font-style
property entry for more information. - font-weight
-
See the
font-weight
property entry for more information. - font-stretch
-
See the
font-stretch
property entry for more information. - unicode-range
- This descriptor defines the set of Unicode codepoints that may be ed by the font face for which it is declared.
Examples 3y6d6i
In the following example, we’re using the @font-face
rule to define the “Lora” web font family. The font family, as seen on Google Web Fonts, has four faces, a normal and bold face each with an italic style variation. The four faces are defined as the following:
@font-face { font-family: "Lora"; font-style: normal; font-weight: 400; src: local("Lora"), local("Lora-Regular"), url(http://themes.googlecontent.com/static/fonts/lora/v7/5-AYViExptypIdFoLKAxTA.woff) format("woff"); } @font-face { font-family: "Lora"; font-style: normal; font-weight: 700; src: local("Lora Bold"), local("Lora-Bold"), url(http://themes.googlecontent.com/static/fonts/lora/v7/XpaepWHcooQHSRnzoohUng.woff) format("woff"); } @font-face { font-family: "Lora"; font-style: italic; font-weight: 400; src: local("Lora Italic"), local("Lora-Italic"), url(http://themes.googlecontent.com/static/fonts/lora/v7/wXeMvRh7Gui36p_I04Ex6g.woff) format("woff"); } @font-face { font-family: "Lora"; font-style: italic; font-weight: 700; src: local("Lora Bold Italic"), local("Lora-BoldItalic"), url(http://themes.googlecontent.com/static/fonts/lora/v7/_IxjUs2lbQSu0MyFEAfa7T8E0i7KZn-EPnyo3HZu7kw.woff) format("woff"); }
The font family can be used throughout a style sheet:
body { font-family: "Lora", serif; } h1 { /* inherits the font family name from the body */ font-style: italic; } blockquote { font-style: italic; font-weight: 400; }
The above set of @font-face
rules can be copy-pasted from the Google Web Fonts source by visiting the URL of the font that is generated once you select the font faces you want. (See the outlined link in the image below.)

You can either use the links as provided by the service, or, you can copy the @font-face
declarations you get when you visit the provided link above. This makes it sometimes easier to generate the @font-face
rules for a font available on Google Web Fonts.

Live Demo 176n59
The following demo loads the “Lora” font family as we have seen in the Examples section above. The four font faces are used.
View this demo on the Codrops PlaygroundThe font faces should look like the following:

Browser s162l
table for the @font-face
at-rule:
@font-face Web fonts 1w563
Method of displaying fonts ed from websites
W3C Candidate Recommendation
ed from the following versions:
Desktop 1i5h4c
- 4
- 3.5
- 9
- 10
- 3.2
Mobile / Tablet 1u2r2g
- 4.2
- 4
- No
- 66
- 60
table for the ttf
font format:
TTF/OTF - TrueType and OpenType font 29l2a
for the TrueType (.ttf) and OpenType (.otf) outline font formats in @font-face.
Non-W3C, but Reputable
ed from the following versions:
Desktop 1i5h4c
- 4
- 3.5
- 9
- 10
- 3.1
Mobile / Tablet 1u2r2g
- 4.2
- 2.2
- No
- 66
- 60
table for the eot
font format:
EOT - Embedded OpenType fonts 2l6rb
Type of font that can be derived from a regular font, allowing small files and legal use of high-quality fonts. Usage is restricted by the file being tied to the website
Unofficial or W3C "Note"
ed from the following versions:
Desktop 1i5h4c
- No
- No
- 6
- No
- No
Mobile / Tablet 1u2r2g
- No
- No
- No
- No
- No
table for the woff
font format:
WOFF - Web Open Font Format 44r6
Compressed TrueType/OpenType font that contains information about the font's source.
W3C Recommendation
ed from the following versions:
Desktop 1i5h4c
- 5
- 3.6
- 9
- 11
- 5.1
Mobile / Tablet 1u2r2g
- 5.0
- 4.4
- No
- 66
- 60
table for the svg
font format:
SVG fonts 51656
Method of using fonts defined as SVG shapes. Removed from [SVG 2.0](https://www.w3.org/TR/SVG2/changes.html#fonts) and considered as a deprecated feature with being removed from browsers.
Unofficial or W3C "Note"
ed from the following versions:
Desktop 1i5h4c
- No
- No
- No
- No
- 3.2
Mobile / Tablet 1u2r2g
- 3.2
- No
- No
- No
- No