The font
property is a shorthand property for setting longhand properties: font-style
, font-variant
, font-weight
, font-stretch
, font-size
, line-height
, font-family
at the same place in the style sheet.
If any of the above longhand properties is omitted from the shorthand property, then the omitted longhand property’s value is set to its individual initial value. Whatever property value declared in the font
shorthand property (even if its the initial value) overrides any value declared before the shorthand property declaration.
Regarding font-size-adjust
: The definition of the font-size-adjust
property makes sure that it is backwards compatible (see the property entry for details). In order to preserve the backwards compatibility of the property, it is not possible to set it inside the font
shorthand; instead, you should use the individual property.
Regarding font-stretch
: Since the font-stretch
property was not defined in CSS 2.1, when using it in the font
shorthand you should also include an extra version of the font
declaration that is compatible with older browsers that don’t support the font-stretch
property. For example:
p { font: 80% sans-serif; /* for older browsers */ font: condensed 80% sans-serif; /* includes `condensed` font-stretch value */ }
Using font
For Setting System Fonts
The font
property is also a way to set an element’s font to a system font, using predefined keywords.
The keywords used for setting system fonts on an element are: caption
, icon
, menu
, message-box
, small-caption
, and status-bar
.
Each of these keywords represents a system font category. Using any of these keywords will set the font of the element to the font used by the operating system for that certain category. For example, font: menu
will apply the same font to the element as the font used for menus in the operating system.
System fonts can only be set using the font
property, and not using the font-family
property.
Moreover, system fonts may only be set as a whole; that is, the font family, size, weight, style, etc. are all set at the same time. These values may then be altered individually if desired. If no font with the indicated characteristics exists on a given platform, the browser should either intelligently substitute (e.g., a smaller version of the ‘caption’ font might be used for the ‘small-caption’ font), or use a browser-default font.
.element { font: status-bar; }
These keywords are not to be used in conjunction with other properties that can be set in the font
shorthand property; they are always used on their own and set the font declaration as a whole. If you want to change the font size, weight, style, etc. of the system font you chose, you will need to do that using the individual font properties, and not inside the font
property.
Note that the keywords used for the system fonts listed above are only treated as keywords when they occur in the initial position, in other positions the same string is treated as part of the font family name:
font: menu; /* use the font settings for system menus */ font: large menu; /* use a font family named "menu" */
Trivia and Notes
As you can see, the font
property is more than just a shorthand property, as it can do more than what the individual properties combined can do.
It is important to note that there are certain gotchas to keep in mind when using the font
shorthand property.
-
The
font-size
andfont-family
values are mandatory. Omitting any of these two values makes thefont
shorthand declaration invalid and hence it will be ignored by the browser. -
The value of the
font-family
property must come at the end of thefont
property declaration, otherwise, again, the declaration is considered invalid. -
If you set the values of the
font-style
,font-variant
, andfont-weight
properties, their values must come before the value of thefont-size
property, otherwise they will be ignored and may also cause mandatory values (see above) to be ignored as well. Their values can be placed in any order as long as they come before thefont-size
property. -
If you set the
line-height
property value in thefont
shorthand, its value must come directly after the value of thefont-size
property, and they must be separated by a mandatory slash (‘/’) character. If theline-height
property is omitted, the slash character must be omitted too, otherwise the entirefont
declaration will be ignored. -
Even though the values of the
font-stretch
,font-size-adjust
, andfont-kerning
properties are not directly set in thefont
property, their values are reset to their initial values when thefont
shorthand property is used.
Official Syntax
-
Syntax:
font: [ [ <'font-style'> || <'font-variant'> || <'font-weight'> || <'font-stretch'> ]? <'font-size'> [ / <'line-height'> ]? <'font-family'> ] | caption | icon | menu | message-box | small-caption | status-bar
- Initial: see individual property entries
- Applies To: all elements
- Animatable: see individual property entries
Notes
Values of the font-variant
property in the shorthand font
property can only include those supported in CSS Level 2.1. None of the values added in CSS Level 3 can be used in the shorthand font
property. So, the only two values of font-variant
property allowed here are normal
and small-caps
.
Values
When the font
property is used as a shorthand property for the individual font-related properties, its unofficial syntax looks like the following:
font: [font-stretch] [font-style] [font-variant] [font-weight] [font-size]/[line-height] [font-family];
The font-size and line-height values must be separated with a slash (‘/’) character.
- <‘font-style’>
- See the font-style property entry for a list of possible values.
- <‘font-variant’>
- See the font-variant property entry for a list of possible values.
- <‘font-weight’>
- See the font-weight property entry for a list of possible values.
- <‘font-stretch’>
- See the font-stretch property entry for a list of possible values.
- <‘font-size’>
- See the font-size property entry for a list of possible values.
- <‘line-height’>
- See the line-height property entry for a list of possible values.
- <‘font-family’>
- See the font-family property entry for a list of possible values.
- caption
- The font used for captioned controls (e.g., buttons, drop-downs, etc.).
- icon
- The font used to label icons.
- menu
- The font used in menus (e.g., dropdown menus and menu lists).
- message-box
- The font used in dialog boxes.
- small-caption
- The font used for labeling small controls.
- status-bar
- The font used in window status bars.
When the font
property is used to set a system font, its syntax looks like the following:
font: caption | icon | menu | message-box | small-caption | status-bar
Examples
Using the font
property as a shorthand property for the font-related properties:
p { font: 12pt/14pt sans-serif } p { font: 80% sans-serif } p { font: x-large/110% "new century schoolbook", serif } p { font: bold italic large Palatino, serif } p { font: normal small-caps 120%/120% fantasy } p { font: condensed oblique 12pt "Helvetica Neue", serif; }
In the second rule, the font size percentage value (80%
) refers to the computed font-size
of the parent element. In the third rule, the line height percentage (110%
) refers to the font size of the element itself.
The first three rules do not specify the font-variant
and font-weight
explicitly, so these properties receive their initial values (normal
). Notice that the font family name “new century schoolbook”, which contains spaces, is enclosed in quotes. The fourth rule sets the font-weight
to bold
, the font-style
to italic
, and implicitly sets font-variant
to normal
.
The fifth rule sets the font-variant
(small-caps
), the font-size
(120% of the parent’s font size), the line-height
(120% of the font size) and the font-family
(fantasy
). It follows that the keyword normal
applies to the two remaining properties: font-style
and font-weight
.
The sixth rule sets the font-style
, font-stretch
, font-size
, and font-family
, the other font properties being set to their initial values.
Using the font
property to set a system font:
button { font: 300 italic 1.3em/1.7em "FB Armada", sans-serif } button p { font: menu } button p em { font-weight: bolder }
If the font used for dropdown menus on a particular system happened to be, for example, “9-point Charcoal”, with a weight of “600”, then <p> elements that were descendants of <button> would be displayed as if this rule were in effect:
button p { font: 600 9pt Charcoal }
Because the font
shorthand resets to its initial value any property not explicitly given a value, this has the same effect as this declaration:
button p { font-style: normal; font-variant: normal; font-weight: 600; font-size: 9pt; line-height: normal; font-family: Charcoal }
Browser Support
The font
property is supported in all major browsers: Chrome, Firefox, Safari, Opera, Internet Explorer, and on Android and iOS.