font CSS propertyThe 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.
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 fertilized 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;
}This property is a shorthand for the following CSS properties:
/* 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;The value is either a shorthand specifying the various font-related properties or a single <system-font-family-name> keyword:
<'font-style'> OptionalSee the font-style CSS property. Defaults to normal.
<font-variant-css2> OptionalEither the normal or small-caps value of the font-variant property. Defaults to normal.
<'font-weight'> OptionalSee the font-weight CSS property. Defaults to normal.
<font-width-css3> OptionalThe keywords supported by the font-width CSS property. Defaults to normal.
<'font-size'>See the font-size CSS property.
<'line-height'> OptionalSee the line-height CSS property. Defaults to normal.
<'font-family'>See the font-family CSS property. Must be the last value.
<system-font-family-name>A single keyword representing a system font, including:
captionThe system font used for captioned controls (buttons, drop-downs, etc.).
iconThe system font used to label icons.
The system font used in menus (e.g., dropdown menus and menu lists).
message-boxThe system font used in dialog boxes.
small-captionThe system font used for labeling small controls.
status-barThe system font used in window status bars.
There are several non-standard values implemented with prefixes.
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.
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:
-webkit-control, -webkit-small-control, and -webkit-mini-control.-webkit-body, -webkit-pictograph, and -webkit-ruby-text, along with several -apple-system-* prefixed system font names.-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.
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:
font-feature-settingsfont-kerningfont-language-overridefont-optical-sizingfont-size-adjustfont-variant-alternatesfont-variant-capsfont-variant-east-asianfont-variant-emojifont-variant-ligaturesfont-variant-numericfont-variant-positionfont-variation-settingsThe order of some of the longhand values within the shorthand font declaration must follow a few rules:
font-size and font-family components are required (except for system font declarations).font-style, font-variant and font-weight components must precede the font-size value.line-height can only be included if font-size is included. If present, the line-height must immediately follow the font-size, with the two values separated by a forward slash (/), for example: 16px / 3.font-family must be the last value specified.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.
| 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:
|
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
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;
}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;
}This example demonstrates using the font property to set a system font.
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;
}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>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", (e) => {
e.preventDefault();
return false;
});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.
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.
font-stylefont-weight