Свойство CSS `font`
Базовая поддержка Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и во многих версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
font — CSS-сокращённое свойство, задающее все различные свойства шрифта элемента. Также оно позволяет задать для элемента системный шрифт.
Попробуйте
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;
}
Составные свойства
Это свойство является сокращённой записью следующих свойств 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;
Значения
Значением может быть сокращённая запись, задающая различные свойства шрифта, или одно ключевое слово <system-font-family-name>:
-
<'font-style'>Необязательно - См. свойство CSS
font-style. По умолчанию —normal. -
<font-variant-css2>Необязательно - Значение
normalилиsmall-capsсвойстваfont-variant. По умолчанию —normal. -
<'font-weight'>Необязательно - См. свойство CSS
font-weight. По умолчанию —normal. -
<font-width-css3>Необязательно - Ключевые слова, поддерживаемые свойством CSS
font-width. По умолчанию —normal. -
<'font-size'> - См. свойство CSS
font-size. -
<'line-height'>Необязательно - См. свойство CSS
line-height. По умолчанию —normal. -
<'font-family'> - См. свойство CSS
font-family. Должно быть последним значением. -
<system-font-family-name> - Одно ключевое слово, обозначающее системный шрифт, например:
-
caption - Системный шрифт для элементов управления с подписями (кнопок, раскрывающихся списков и т. д.).
-
icon - Системный шрифт для подписей к значкам.
- Системный шрифт для меню (например, раскрывающихся меню и списков меню).
-
message-box - Системный шрифт для диалоговых окон.
-
small-caption - Системный шрифт для подписей к небольшим элементам управления.
-
status-bar - Системный шрифт для строк состояния окон.
Существует несколько нестандартных значений с префиксами.
-
Описание
Значение свойства font — это либо одно ключевое слово, обозначающее имя семейства системных шрифтов, либо несколько значений отдельных свойств, задающих все различные свойства шрифта элемента.
Объявления системных шрифтов
Если font задано как ключевое слово <system-font-family-name>, полное значение свойства должно состоять из этого единственного ключевого слова без учёта регистра. Допустимые значения: caption, icon, menu, message-box, small-caption или status-bar.
Браузеры также поддерживают нестандартные значения с префиксами:
- Chromium реализует
-webkit-control,-webkit-small-controlи-webkit-mini-control. - WebKit включает значения Chromium, а также добавляет
-webkit-body,-webkit-pictographи-webkit-ruby-text, а также несколько имён системных шрифтов с префиксом-apple-system-*. - Gecko реализует
-moz-window,-moz-document,-moz-desktop,-moz-info,-moz-dialog,-moz-button,-moz-pull-down-menu,-moz-listи-moz-field.
Системный шрифт, или <system-font-family-name>, можно задать только с помощью свойства font. Указание одного ключевого слова, например font: icon, задаёт семейство, размер, насыщенность, стиль и другие параметры шрифта в соответствии со значениями, определёнными браузером для указанного системного шрифта. Все эти значения можно изменить с помощью отдельных объявлений, размещённых после объявления font.
Добавление любых отдельных компонентов font после ключевого слова <system-font-family-name> в значении свойства font делает объявление недействительным. Например, font: icon small недействительно.
Если ключевое слово <system-font-family-name> находится в значении не на первом месте, оно считается <ident>, обозначающим стандартное имя font-family. Например, объявление font: small icon задаёт для font-family шрифт с именем icon, который не является системным и может существовать или не существовать. Это объявление также задаёт для font-size значение small и сбрасывает остальные свойства-компоненты сокращённой записи до их начальных значений.
Объявления с сокращённой записью шрифта
Если font задано как сокращённая запись нескольких свойств, связанных со шрифтом, то:
- оно должно включать значения для:
- оно может дополнительно включать значения для:
Как и в случае с любым сокращённым свойством, неуказанные свойства-компоненты задаются начальными значениями, что может переопределить значения, ранее заданные с помощью отдельных свойств. Кроме того, сокращённая запись сбрасывает следующие свойства до их начальных значений. Явно задать их с помощью сокращённой записи нельзя:
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-settings
Порядок компонентов в сокращённом свойстве
Порядок некоторых отдельных значений в объявлении сокращённого свойства font должен соответствовать нескольким правилам:
- Обязательны компоненты
font-sizeиfont-family(кроме объявлений системных шрифтов). - Компоненты
font-style,font-variantиfont-weightдолжны предшествовать значениюfont-size. - Компонент
line-heightможно включить только при наличииfont-size. Если он присутствует,line-heightдолжен непосредственно следовать заfont-size, а два значения должны разделяться косой чертой (/), например:16px / 3. font-familyдолжно быть последним указанным значением.
Компоненты с ограниченным набором значений
Для обеспечения обратной совместимости допустимые значения компонентов font-variant и font-width не включают все допустимые значения соответствующих отдельных свойств.
Допустимые значения компонента font-variant ограничены значениями normal или small-caps. Другие значения не поддерживаются, однако объявление сокращённого свойства font сбрасывает все отдельные свойства font-variant-* до значения normal, включая font-variation-settings, font-variant-position, font-variant-emoji, font-variant-caps, font-variant-ligatures, font-variant-numeric, font-variant-east-asian и font-variant-alternates.
Допустимые значения компонента font-width ограничены ключевыми словами: normal, ultra-condensed, extra-condensed, condensed, semi-condensed, semi-expanded, expanded, extra-expanded, ultra-expanded. Отдельное свойство font-width также поддерживает значения <percentage>, но их нельзя использовать в сокращённой записи.
Формальное определение
| Начальное значение | для каждого свойства, входящего в сокращённую запись: |
|---|---|
| Применяется к | всем элементам и тексту |
| Наследуется | да |
| Проценты | для каждого свойства, входящего в сокращённую запись: |
| Вычисленное значение | для каждого свойства, входящего в сокращённую запись: |
| Тип анимации | для каждого свойства, входящего в сокращённую запись: |
Формальный синтаксис
font = [ [ <'font-style'> || <font-variant-css2> || <'font-weight'> || <font-width-css3> ]? <'font-size'> [ / <'line-height'> ]? <'font-family'># ] | <system-family-name> <font-variant-css2> = normal | small-caps <font-width-css3> = normal | ultra-condensed | extra-condensed | condensed | semi-condensed | semi-expanded | expanded | extra-expanded | ultra-expanded <system-family-name> = caption | icon | menu | message-box | small-caption | status-bar
Примеры
Основное использование
В этом примере задаётся font для всех элементов <p>. Мы задаём font-size значение 12px, а line-height — значение 14px, разделяя их косой чертой (/). Это объявление также задаёт font-family значение sans-serif.
p {
font: 12px / 14px sans-serif;
}
<p> This is a paragraph of sans-serif text. The font-size is small, at just 12px. If this text wraps, the line height is pretty tight at 14px, so this may be difficult to read. </p>
Несколько свойств
В этом примере мы задаём font-weight значение bold, font-style — значение italic, font-size — значение large, line-height — значение 1.6, а font-family — значение serif.
p {
font: bold italic large / 1.6 serif;
}
<p> 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.
CSS
Мы задаём для шрифта абзаца те же font-family, line-height, font-size и другие параметры, что и у строки состояния окна, а затем задаём line-height значение 1.6.
p {
font: status-bar;
line-height: 1.6;
}
HTML
В нашем HTML есть абзац (<p>) со ссылкой (<a>), значение атрибута href которой намеренно усложнено. При наведении указателя на отрисованную ссылку или перемещении на неё фокуса в строке состояния браузера должно отображаться значение атрибута href.
<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
Поскольку URL нашей HTML-ссылки задан не лучшим образом, мы добавляем скрипт, который не позволяет документу перенаправлять пользователя на несуществующую страницу при нажатии на ссылку.
const aElem = document.querySelector("a");
aElem.addEventListener("click", (e) => {
e.preventDefault();
return false;
});
Результат
Наведите указатель на ссылку или переведите на неё фокус. Семейство и размер шрифта должны совпадать с текстом в строке состояния в нижней части окна браузера.
Создание сокращённого объявления
В этой интерактивной демонстрации можно выбирать разные переключатели, чтобы создавать различные сокращённые значения и одновременно видеть эффект созданных объявлений.
<p>
Change the radio buttons below to see the generated shorthand and its effect.
</p>
<form action="createShortHand()">
<div class="cf">
<div class="setPropCont">
font-style<br />
<input
type="radio"
id="font-style-none"
name="font_style"
checked
value="" />
<label for="font-style-none">omit value</label><br />
<input
type="radio"
id="font-style-normal"
name="font_style"
value="normal" />
<label for="font-style-normal">normal</label><br />
<input
type="radio"
id="font-style-italic"
name="font_style"
value="italic" />
<label for="font-style-italic">italic</label><br />
<input
type="radio"
id="font-style-oblique"
name="font_style"
value="oblique" />
<label for="font-style-oblique">oblique</label>
</div>
<div class="setPropCont">
font-variant<br />
<input
type="radio"
id="font-variant-none"
name="font_variant"
checked
value=" " />
<label for="font-variant-none">omit value</label><br />
<input
type="radio"
id="font-variant-normal"
name="font_variant"
value="normal" />
<label for="font-variant-normal">normal</label><br />
<input
type="radio"
id="font-variant-small-caps"
name="font_variant"
value="small-caps" />
<label for="font-variant-small-caps">small-caps</label>
</div>
<div class="setPropCont">
font-weight<br />
<input type="radio" id="font-weight-none" name="font_weight" value="" />
<label for="font-weight-none">omit value</label><br />
<input
type="radio"
id="font-weight-normal"
checked
name="font_weight"
value="400" />
<label for="font-weight-normal">normal</label><br />
<input
type="radio"
id="font-weight-bold"
name="font_weight"
value="700" />
<label for="font-weight-bold">bold</label>
</div>
<div class="setPropCont">
font-size<br />
<input type="radio" id="font-size-12px" name="font_size" value="12px" />
<label for="font-size-12px">12px</label><br />
<input
type="radio"
id="font-size-16px"
name="font_size"
value="16px"
checked />
<label for="font-size-16px">16px</label><br />
<input type="radio" id="font-size-24px" name="font_size" value="24px" />
<label for="font-size-24px">24px</label>
</div>
<div class="setPropCont">
line-height<br />
<input
type="radio"
id="line-height-none"
name="line_height"
checked
value="" />
<label for="line-height-none">omit value</label><br />
<input
type="radio"
id="line-height-1-2"
name="line_height"
value="/1.2" />
<label for="line-height-1-2">1.2</label><br />
<input type="radio" id="line-height-3" name="line_height" value="/3" />
<label for="line-height-3">3</label>
</div>
<br />
<div class="setPropCont fontfamily">
font-family<br />
<input
type="radio"
id="font-family-courier"
name="font_family"
checked
value="courier" />
<label for="font-family-courier">courier</label><br />
<input
type="radio"
id="font-family-serif"
name="font_family"
value="serif" />
<label for="font-family-serif">serif</label><br />
<input
type="radio"
id="font-family-sans-serif"
name="font_family"
value="sans-serif" />
<label for="font-family-sans-serif">sans-serif</label><br />
<input
type="radio"
id="font-family-arial"
name="font_family"
value="arial" />
<label for="font-family-arial">Arial</label><br />
<input
type="radio"
id="font-family-monospace"
name="font_family"
value="monospace" />
<label for="font-family-monospace">monospace</label><br />
<input
type="radio"
id="font-family-cursive"
name="font_family"
value="cursive" />
<label for="font-family-cursive">cursive</label><br />
<input
type="radio"
id="font-family-fantasy"
name="font_family"
value="fantasy" />
<label for="font-family-fantasy">fantasy</label><br />
<input
type="radio"
id="font-family-system-ui"
name="font_family"
value="system-ui" />
<label for="font-family-system-ui">system-ui</label><br />
</div>
</div>
<div class="cf propInputs">
<div class="propInputCont tar">font :</div>
<div class="propInputCont">
<input type="text" class="curCss" id="input_font_style" /><br />
font-style <br />
optional
</div>
<div class="propInputCont">
<input type="text" class="curCss" id="input_font_variant" /> <br />
font-variant <br />
optional
</div>
<div class="propInputCont">
<input type="text" class="curCss" id="input_font_weight" /> <br />
font-weight <br />
optional
</div>
<div class="propInputCont">
<input type="text" class="curCss mandatory" id="input_font_size" /> <br />
font-size <br />
mandatory
</div>
<div class="propInputCont">
<input type="text" class="curCss" id="input_line_height" /> <br />
line-height <br />
optional
</div>
<div class="propInputCont">
<input type="text" class="curCss mandatory" id="input_font_family" />
<br />
font-family <br />
mandatory
</div>
</div>
</form>
<div class="fontShortHand">
This is some sample text.<br />
This is some more sample text.
</div>
body,
input {
font: 14px "Arial";
overflow: hidden;
}
.propInputCont {
float: left;
text-align: center;
margin-right: 5px;
width: 80px;
}
.setPropCont {
float: left;
margin-right: 5px;
width: 120px;
}
.propInputs,
.setPropCont {
margin-bottom: 1em;
}
.curCss {
border: none;
border-bottom: 1px solid black;
text-align: center;
width: 80px;
}
.mandatory {
border-bottom-color: red;
}
.cf::before,
.cf::after {
content: " ";
display: table;
}
.cf::after {
clear: both;
}
.tar {
width: 40px;
text-align: right;
}
.fontfamily {
display: inline-block;
}
const textAreas = document.getElementsByClassName("curCss");
function getProperties() {
return (
`${getCheckedValue("font_style")} ` +
`${getCheckedValue("font_variant")} ` +
`${getCheckedValue("font_weight")} ` +
`${getCheckedValue("font_size")}` +
`${getCheckedValue("line_height")} ` +
`${getCheckedValue("font_family")}`
);
}
function getCheckedValue(radioName) {
const radios = document.forms[0].elements[radioName];
for (const radio of radios) {
if (radio.checked) {
const curElemName = `input_${radioName}`;
const curElem = document.getElementById(curElemName);
curElem.value = radio.value;
return radio.value;
}
}
}
function setCss() {
injectCss(getProperties());
}
function injectCss(cssFragment) {
const old = document.body.getElementsByTagName("style");
if (old.length > 1) {
old[1].parentElement.removeChild(old[1]);
}
css = document.createElement("style");
css.textContent = `.fontShortHand{font: ${cssFragment}}`;
document.body.appendChild(css);
}
setCss();
document.querySelectorAll("input[type='radio']").forEach((el) => {
el.addEventListener("change", setCss);
});
Спецификации
| Спецификация |
|---|
| Модуль CSS Fonts, уровень 4 # font-prop |
Совместимость с браузерами
| Компьютеры | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | WebView на iOS | |
font |
1 |
12 |
1 |
3.5 |
1 |
18 |
4 |
14 |
1 |
1.0 |
4.4 |
1 |
caption |
1 |
12 |
1 |
6 |
1 |
18 |
4 |
14 |
1 |
1.0 |
37 |
1 |
font-width_keyword_values |
60 |
79 |
43 |
47 |
11 |
60 |
43 |
44 |
11 |
8.0 |
60 |
11 |
icon |
1 |
12 |
1 |
6 |
1 |
18 |
4 |
14 |
1 |
1.0 |
37 |
1 |
menu |
1 |
12 |
1 |
6 |
1 |
18 |
4 |
14 |
1 |
1.0 |
37 |
1 |
message-box |
1 |
12 |
1 |
6 |
1 |
18 |
4 |
14 |
1 |
1.0 |
37 |
1 |
small-caption |
1 |
12 |
1 |
6 |
1 |
18 |
4 |
14 |
1 |
1.0 |
37 |
1 |
status-bar |
1 |
12 |
1 |
6 |
1 |
18 |
4 |
14 |
1 |
1.0 |
37 |
1 |
См. также
font-stylefont-weight- Набор системных шрифтов на CSS-Tricks (2017)
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/font