font CSS property
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
The font CSS shorthand property sets all the different properties of an element's font. Alternatively, it sets an element's font to a system font.
Try it
font:
1.2rem "Fira Sans",
sans-serif;
font:
italic 1.2rem "Fira Sans",
serif;
font: italic small-caps bold 16px/2 cursive;
font: small-caps bold 24px/1 sans-serif;
font: caption;
<section id="default-example">
<q id="example-element">
Prejudices, it is well known, are most difficult to eradicate from the heart
whose soil has never been loosened or fertilised by education: they grow
there, firm as weeds among stones.
</q>
</section>
@font-face {
font-family: "Fira Sans";
src:
local("FiraSans-Regular"),
url("/shared-assets/fonts/FiraSans-Regular.woff2") format("woff2");
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: "Fira Sans";
src:
local("FiraSans-Italic"),
url("/shared-assets/fonts/FiraSans-Italic.woff2") format("woff2");
font-weight: normal;
font-style: italic;
}
section {
margin-top: 10px;
font-size: 1.1em;
}
Constituent properties
This property is a shorthand for the following CSS properties:
Syntax
/* font-size font-family */
font: 1.2em sans-serif;
/* font-size/line-height font-family */
font: 1.2em/2 "Fira Sans", sans-serif;
/* font-style font-weight font-size font-family */
font: italic bold 1.2em monospace;
/* font-width font-variant font-size font-family */
font: ultra-condensed small-caps 1.2em Montserrat, Helvetica, sans-serif;
/* system font */
font: caption;
Values
The value is either a shorthand specifying the various font-related properties or a single <system-font-family-name> keyword:
<'font-style'>Optional-
See the
font-styleCSS property. Defaults tonormal. <font-variant-css2>Optional-
Either the
normalorsmall-capsvalue of thefont-variantproperty. Defaults tonormal. <'font-weight'>Optional-
See the
font-weightCSS property. Defaults tonormal. <font-width-css3>Optional-
The keywords supported by the
font-widthCSS property. Defaults tonormal. <'font-size'>-
See the
font-sizeCSS property. <'line-height'>Optional-
See the
line-heightCSS property. Defaults tonormal. <'font-family'>-
See the
font-familyCSS property. Must be the last value. <system-font-family-name>-
A single keyword representing a system font, including:
caption-
The system font used for captioned controls (buttons, drop-downs, etc.).
icon-
The system font used to label icons.
-
The system font used in menus (e.g., dropdown menus and menu lists).
message-box-
The system font used in dialog boxes.
small-caption-
The system font used for labeling small controls.
status-bar-
The system font used in window status bars.
There are several non-standard values implemented with prefixes.
Description
The font property value is either a single keyword representing a system-font-family-name or multiple longhand property values used to set all the different properties of an element's font.
System font declarations
If font is specified as a <system-font-family-name> keyword, the full property value must be set to that single, case-insensitive keyword. Valid values include caption, icon, menu, message-box, small-caption, or status-bar.
Browsers also support non-standard prefixed values:
- Chromium implements
-webkit-control,-webkit-small-control, and-webkit-mini-control. - Webkit includes the Chromium values, and adds
-webkit-body,-webkit-pictograph, and-webkit-ruby-text, along with several-apple-system-*prefixed system font names. - Gecko implements
-moz-window,-moz-document,-moz-desktop,-moz-info,-moz-dialog,-moz-button,-moz-pull-down-menu,-moz-list, and-moz-field.
The system font, or <system-font-family-name>, can only be set with the font property. Defining a single keyword value, such as font: icon, sets the font's family, size, weight, style, etc., to the values the browser defines for the named system font. These values can all be changed with longhand declarations placed after the font declaration.
Including any font longhand components after the <system-font-family-name> keyword within a font property value invalidates the declaration. For example, font: icon small is invalid.
If a <system-font-family-name> keyword appears anywhere in the value other than as the first component, the keyword is treated as an <ident> representing a standard font-family name. For example, the declaration font: small icon sets the font-family to a font named icon, a non-system font which may or may not exist. This declaration also sets the font-size to small and resets all the other shorthand component properties to their initial values.
Shorthand font declarations
If font is specified as a shorthand for several font-related properties, then:
-
it must include values for:
-
it may optionally include values for:
As with any shorthand property, any of the longhand component properties not specified are set to their initial values, possibly overriding values previously set using non-shorthand properties. In addition, the shorthand resets the following properties to their initial values. The shorthand cannot explicitly set them:
Shorthand property order
The order of some of the longhand values within the shorthand font declaration must follow a few rules:
- Both the
font-sizeandfont-familycomponents are required (except for system font declarations). - The
font-style,font-variantandfont-weightcomponents must precede thefont-sizevalue. - A
line-heightcan only be included iffont-sizeis included. If present, theline-heightmust immediately follow thefont-size, with the two values separated by a forward slash (/), for example:16px / 3. - The
font-familymust be the last value specified.
Components with limited values
For backward compatibility, the valid values of the font-variant and font-width components do not include all the valid values or the longhand equivalents.
The valid values for the font-variant component are limited to normal or small-caps. While no other values are supported, the shorthand font declaration resets all the font-variant-* longhand properties to normal, including font-variation-settings, font-variant-position, font-variant-emoji, font-variant-caps, font-variant-ligatures, font-variant-numeric, font-variant-east-asian, and font-variant-alternates.
The valid values for the font-width component are limited to keyword values: normal, ultra-condensed, extra-condensed, condensed, semi-condensed, semi-expanded, expanded, extra-expanded, ultra-expanded. The font-width longhand property also supports <percentage> values, but they are not valid within the shorthand.
Formal definition
| Initial value | as each of the properties of the shorthand:
|
|---|---|
| Applies to | all elements and text. It also applies to ::first-letter and ::first-line. |
| Inherited | yes |
| Percentages | as each of the properties of the shorthand:
|
| Computed value | as each of the properties of the shorthand:
|
| Animation type | as each of the properties of the shorthand:
|
Formal syntax
font =
[ [ <'font-style'> || <font-variant-css2> || <'font-weight'> || <font-width-css3> ]? <'font-size'> [ / <'line-height'> ]? <'font-family'># ] |
<system-font-family-name>
<font-style> =
normal |
italic |
left |
right |
oblique <angle [-90deg,90deg]>?
<font-variant-css2> =
normal |
small-caps
<font-weight> =
<font-weight-absolute> |
bolder |
lighter
<font-width-css3> =
normal |
ultra-condensed |
extra-condensed |
condensed |
semi-condensed |
semi-expanded |
expanded |
extra-expanded |
ultra-expanded
<font-size> =
<absolute-size> |
<relative-size> |
<length-percentage [0,∞]> |
math
<line-height> =
normal |
<number [0,∞]> |
<length-percentage [0,∞]>
<font-family> =
[ <font-family-name> | <generic-font-family> ]#
<system-font-family-name> =
caption |
icon |
menu |
message-box |
small-caption |
status-bar
<font-weight-absolute> =
normal |
bold |
<number [1,1000]>
<absolute-size> =
xx-small |
x-small |
small |
medium |
large |
x-large |
xx-large |
xxx-large
<relative-size> =
larger |
smaller
<length-percentage> =
<length> |
<percentage>
<font-family-name> =
<string> |
<custom-ident>+
<generic-font-family> =
<generic-font-script-specific> |
<generic-font-complete> |
<generic-font-incomplete>
<generic-font-script-specific> =
generic( fangsong ) |
generic( kai ) |
generic( khmer-mul ) |
generic( nastaliq )
<generic-font-complete> =
serif |
sans-serif |
system-ui |
cursive |
fantasy |
math |
monospace
<generic-font-incomplete> =
ui-serif |
ui-sans-serif |
ui-monospace |
ui-rounded
Examples
>Basic usage
This example defines the font for all <p> elements. We set the font-size to 12px and the line-height to 14px, separating them with a forward slash (/). The declaration also sets the font-family to sans-serif.
p {
font: 12px / 14px sans-serif;
}
Multiple properties
In this example, we set the font-weight to bold, the font-style to italic, the font-size to large, the line-height to 1.6, and the font-family to serif.
p {
font: bold italic large / 1.6 serif;
}
System font
This example demonstrates using the font property to set a system font.
CSS
We set the paragraph's font to have the same font-family, line-height, font-size, etc., as the status bar of the window, then we set the line-height to 1.6.
p {
font: status-bar;
line-height: 1.6;
}
HTML
Our HTML includes a paragraph (<p>) containing a link (<a>) with a convoluted href attribute value. When you hover or focus the rendered link, your browser's status bar should display the value of the href attribute.
<p>
<a
href="/%20The%20font%20should%20be%20the%20same%20
family%20and%20size%20and%20the%20text%20in%20the%20example."
>Hover or focus this text. The font should be the same family and size and
the text in your status bar.</a
>
</p>
JavaScript
As the URL in our HTML link is not good practice, we include a script that prevents the document from redirecting to a non-existent page when the link is clicked.
const aElem = document.querySelector("a");
aElem.addEventListener("click", function (e) {
e.preventDefault();
return false;
});
Result
Hover or focus the link. The font should be the same family and size as the text in your status bar at the bottom of your browser window.
Shorthand declaration creator
In this live demonstration, you can select different radio buttons to generate different shorthand values, while visualizing the effects of the shorthand declarations you create.
Specifications
| Specification |
|---|
| CSS Fonts Module Level 4> # font-prop> |
Browser compatibility
See also
font-stylefont-weight- System font stack on CSS-Tricks (2017)