Кратко
СкопированоВстроенных в операционные системы шрифтов часто не хватает для создания уникального дизайна сайта. Для подключения нестандартных шрифтов существует директива @font. С её помощью можно подключить и использовать на странице любой шрифт из файла.
При загрузке сайта браузер будет брать шрифт из указанного файла и отображать текст именно этим шрифтом.
Пример
СкопированоПодключим к странице шрифт Lexend Peta и сделаем его основным шрифтом нашего сайта.
@font-face { font-family: "Lexend Peta"; src: local("Lexend Peta Regular"), local("LexendPeta-Regular"), url("Lexend_Peta-webfont.woff2") format("woff2"), url("Lexend_Peta-webfont.woff") format("woff"), url("Lexend_Peta-webfont.svg") format("svg"); font-weight: normal;}body { font-family: "Lexend Peta", sans-serif;}
@font-face {
font-family: "Lexend Peta";
src: local("Lexend Peta Regular"),
local("LexendPeta-Regular"),
url("Lexend_Peta-webfont.woff2") format("woff2"),
url("Lexend_Peta-webfont.woff") format("woff"),
url("Lexend_Peta-webfont.svg") format("svg");
font-weight: normal;
}
body {
font-family: "Lexend Peta", sans-serif;
}
Как пишется
СкопированоДиректива @font по своей «анатомии» отличается от стандартных CSS-правил, где есть селектор и применяемые к нему правила. Основное отличие в том, что на месте селектора мы активируем функцию, адресованную браузеру.
Внутри этого правила должно быть два обязательных свойства:
- Название шрифта, которое мы будем использовать ниже в CSS: свойство
font. Название может отличаться от настоящего названия этого шрифта.- family - Ссылки на файлы, из которых браузер может взять шрифт: свойство
src.
Тут важно указать ссылки на файлы в нескольких форматах, чтобы любой браузер — старый или новый — мог загрузить шрифт в понятном ему формате. Принято хранить и подключать шрифты в форматах WOFF, WOFF2, SVG.
Подключение из внешних файлов происходит при помощи конструкции url. Несколько файлов можно подключить, перечислив эти конструкции несколько раз через запятую.
Если указаны ссылки на несколько файлов в разных форматах, то после url оставляют браузеру подсказку в виде записи format.
Поскольку пользователь имеет возможность устанавливать в свою систему любые нестандартные шрифты, то есть вероятность, что нужный нам шрифт уже есть на его компьютере. Если это так, то браузеру будет удобнее и быстрее взять шрифт из системы, чем читать файл.
Для этого в качестве одного или нескольких значений у свойства src можно указать конструкцию local. Нужно указывать локальные названия до ссылок на внешние файлы, чтобы браузер, найдя шрифт в системе под таким именем, даже не пошёл загружать и читать внешние файлы.
На сайте может использоваться один и тот же шрифт, но в разных начертаниях. Например, жирный font или курсив font. В этом случае вам нужно будет подключить разные файлы, содержащие эти начертания.
Тут есть два подхода.
Первый — использовать разные @font для подключения разных начертаний шрифта, называя их разными именами. Например, ", " и ". Выглядеть это будет так:
@font-face { font-family: "Lexend Peta Regular"; src: local("Lexend Peta Regular"), local("LexendPeta-Regular"), url("Lexend Peta-webfont.woff2") format("woff2"), url("Lexend Peta-webfont.woff") format("woff"), url("Lexend Peta-webfont.svg") format("svg");}@font-face { font-family: "Lexend Peta Bold"; src: local("Lexend Peta Bold"), local("LexendPeta-Bold"), url("Lexend Peta Bold-webfont.woff2") format("woff2"), url("Lexend Peta Bold-webfont.woff") format("woff"), url("Lexend Peta Bold-webfont.svg") format("svg");}@font-face { font-family: "Lexend Peta Italic"; src: local("Lexend Peta Italic"), local("LexendPeta-Italic"), url("Lexend Peta Italic-webfont.woff2") format("woff2"), url("Lexend Peta Italic-webfont.woff") format("woff"), url("Lexend Peta Italic-webfont.svg") format("svg");}
@font-face {
font-family: "Lexend Peta Regular";
src: local("Lexend Peta Regular"),
local("LexendPeta-Regular"),
url("Lexend Peta-webfont.woff2") format("woff2"),
url("Lexend Peta-webfont.woff") format("woff"),
url("Lexend Peta-webfont.svg") format("svg");
}
@font-face {
font-family: "Lexend Peta Bold";
src: local("Lexend Peta Bold"),
local("LexendPeta-Bold"),
url("Lexend Peta Bold-webfont.woff2") format("woff2"),
url("Lexend Peta Bold-webfont.woff") format("woff"),
url("Lexend Peta Bold-webfont.svg") format("svg");
}
@font-face {
font-family: "Lexend Peta Italic";
src: local("Lexend Peta Italic"),
local("LexendPeta-Italic"),
url("Lexend Peta Italic-webfont.woff2") format("woff2"),
url("Lexend Peta Italic-webfont.woff") format("woff"),
url("Lexend Peta Italic-webfont.svg") format("svg");
}
Далее, ниже по коду, используем в разных местах разные начертания шрифтов:
body { font-family: "Lexend Peta Regular", sans-serif;}.title { font-family: "Lexend Peta Bold", sans-serif;}.accent { font-family: "Lexend Peta Italic", sans-serif;}
body {
font-family: "Lexend Peta Regular", sans-serif;
}
.title {
font-family: "Lexend Peta Bold", sans-serif;
}
.accent {
font-family: "Lexend Peta Italic", sans-serif;
}
Второй — подключить все файлы начертаний, но использовать для них одно и то же имя шрифта, указав дополнительно, для какого стиля и жирности этот файл. Тогда не нужно будет переопределять шрифт для разных элементов, достаточно будет указывать нужный стиль или жирность шрифта.
Говорим браузеру, что эти файлы используем для нормального начертания:
@font-face { font-family: "Lexend Peta"; src: local("Lexend Peta Regular"), local("LexendPeta-Regular"), url("Lexend Peta-webfont.woff2") format("woff2"), url("Lexend Peta-webfont.woff") format("woff"), url("Lexend Peta-webfont.svg") format("svg"); font-weight: normal;}
@font-face {
font-family: "Lexend Peta";
src: local("Lexend Peta Regular"),
local("LexendPeta-Regular"),
url("Lexend Peta-webfont.woff2") format("woff2"),
url("Lexend Peta-webfont.woff") format("woff"),
url("Lexend Peta-webfont.svg") format("svg");
font-weight: normal;
}
Говорим браузеру, что эти файлы используем для жирного начертания:
@font-face { font-family: "Lexend Peta"; src: local("Lexend Peta Bold"), local("LexendPeta-Bold"), url("Lexend Peta Bold-webfont.woff2") format("woff2"), url("Lexend Peta Bold-webfont.woff") format("woff"), url("Lexend Peta Bold-webfont.svg") format("svg"); font-weight: bold;}
@font-face {
font-family: "Lexend Peta";
src: local("Lexend Peta Bold"),
local("LexendPeta-Bold"),
url("Lexend Peta Bold-webfont.woff2") format("woff2"),
url("Lexend Peta Bold-webfont.woff") format("woff"),
url("Lexend Peta Bold-webfont.svg") format("svg");
font-weight: bold;
}
Говорим браузеру, что эти файлы используем для курсива:
@font-face { font-family: "Lexend Peta"; src: local("Lexend Peta Italic"), local("LexendPeta-Italic"), url("Lexend Peta Italic-webfont.woff2") format("woff2"), url("Lexend Peta Italic-webfont.woff") format("woff"), url("Lexend Peta Italic-webfont.svg") format("svg"); font-style: italic;}
@font-face {
font-family: "Lexend Peta";
src: local("Lexend Peta Italic"),
local("LexendPeta-Italic"),
url("Lexend Peta Italic-webfont.woff2") format("woff2"),
url("Lexend Peta Italic-webfont.woff") format("woff"),
url("Lexend Peta Italic-webfont.svg") format("svg");
font-style: italic;
}
После этого используем в разных местах разные начертания шрифтов:
body { font-family: "Lexend Peta", sans-serif; font-weight: normal;}.title { font-weight: bold;}.accent { font-style: italic;}
body {
font-family: "Lexend Peta", sans-serif;
font-weight: normal;
}
.title {
font-weight: bold;
}
.accent {
font-style: italic;
}
Подсказки
Скопировано💡 Важно, чтобы файлы со шрифтами лежали на том же домене, что и сайт, на котором они используются. Если вы захотите обратиться к шрифтам из другого домена, то подобный запрос будет заблокирован по правилам безопасности запросов с разными источниками (CORS).
💡 @font нужно объявлять до того, как вы обратитесь в CSS к этому шрифту. Принято подключать шрифты в самом начале файла стилей (но после всех @import).
💡 @font нельзя объявить внутри другого CSS-правила.
💡 Важно использовать в точности то название подключённого шрифта, которое вы задаёте внутри @font. Иначе магия не сработает.
На практике
Скопированосоветует
Скопировано🛠 Дизайнеры очень любят всякие разные нестандартные шрифты. Если видите в макете несистемный шрифт — просите файл или ссылку на шрифт у дизайнера.
Часто происходит так, что дизайнер отдаёт только TTF-файл, потому что для дизайнерских программ его достаточно. В этом случае вам нужно будет конвертировать шрифт в остальные форматы.
Держите проверенные конверторы:
🛠 Советую всегда проверять, есть ли шрифт на сайте сервиса Google Fonts. Если найдёте, то останется только проставить нужные стили шрифта и подключить одной строкой вместо кучи @font. Ах, чудный идеальный мир, где все дизайнеры используют только бесплатные шрифты 🧚♀️
🛠 Не все кастомные шрифты бесплатные. Например, студия Лебедева разрабатывает собственные шрифты. Дизайнеры в полёте фантазии могут использовать, в том числе, пиратские копии. Чтобы у вас и у заказчика потом не случилось проблем, просите дизайнера купить легальные версии нужных шрифтов и прислать вам исходные файлы, или заменить платный шрифт на бесплатный.