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

css
/* 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-style CSS property. Defaults to normal.

<font-variant-css2> Optional

Either the normal or small-caps value of the font-variant property. Defaults to normal.

<'font-weight'> Optional

See the font-weight CSS property. Defaults to normal.

<font-width-css3> Optional

The keywords supported by the font-width CSS property. Defaults to normal.

<'font-size'>

See the font-size CSS property.

<'line-height'> Optional

See 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:

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:

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-size and font-family components are required (except for system font declarations).
  • The font-style, font-variant and font-weight components must precede the font-size value.
  • A 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.
  • The font-family must 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 valueas each of the properties of the shorthand:
Applies toall elements and text. It also applies to ::first-letter and ::first-line.
Inheritedyes
Percentagesas each of the properties of the shorthand:
  • font-size: refer to the parent element's font size
  • line-height: refer to the font size of the element itself
Computed valueas each of the properties of the shorthand:
Animation typeas 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.

css
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.

css
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.

css
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.

html
<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.

js
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