Как конвертировать шрифт в Base64
- Перетащите файл
.woff2,.woff,.ttfили.otfв поле или выберите его через диалог. - В списке Формат вывода уже выбран вариант CSS @font-face. Если правило вы пишете сами, выберите Data URI или Чистый Base64.
- Нажмите Скопировать результат и вставьте его в таблицу стилей.
Для файла Inter-Bold.woff2 результат выглядит так (данные сокращены):
@font-face {
font-family: "Inter-Bold";
src: url("data:font/woff2;base64,d09GMgABAAAAA...") format("woff2");
font-display: swap;
}
Имя в font-family берётся из имени файла: расширение отбрасывается, а все символы, кроме букв, цифр, пробелов, - и _, заменяются пробелами. Переименуйте его в имя семейства, которое используется в вашем CSS, и добавьте font-weight и font-style, если встраиваете несколько начертаний одного семейства.
Подсказки format() и MIME-типы
| Файл | MIME-тип | format() | Base64 начинается с |
|---|---|---|---|
| WOFF2 | font/woff2 | woff2 | d09GMg |
| WOFF | font/woff | woff | d09GRg |
| TrueType | font/ttf | truetype | AAEAAA |
| OpenType (CFF) | font/otf | opentype | T1RUTw |
Подсказка format() позволяет браузеру пропустить источники, которые он не умеет использовать, не скачивая их. Когда встроенный источник один, это не так важно, но если браузер не узнает подсказку, он всё равно пропустит источник. Инструмент выводит подсказку из MIME-типа, который сообщает браузер, а некоторые системы отдают для шрифтов необычные типы. Если у OTF получилось format("truetype"), исправьте на opentype.
WOFF2 с шрифтом TrueType внутри начинается с d09GMgABAAA, а с контурами CFF – с d09GMk9UVE8.
Встроенные шрифты должны быть маленькими
Base64 на треть больше файла шрифта и к тому же находится внутри CSS, который блокирует отрисовку. В тесте иконочный шрифт WOFF2 размером 77 160 байт дал 102 880 символов Base64, и всё это нужно скачать, прежде чем на странице появится хоть что-то.
Чтобы встраивание того стоило:
- Используйте WOFF2. Для того же шрифта он намного меньше TTF или OTF.
- Урежьте набор глифов. Если удалить ненужные глифы, например все письменности, кроме латиницы, большой шрифт может потерять бо́льшую часть размера. Инструменты для сабсеттинга шрифтов делают это из командной строки.
- Встраивайте только одно начертание. Хорошо подходят шрифт заголовков или иконочный шрифт, который виден на первом экране. Основной текст в четырёх насыщенностях лучше отдавать отдельными файлами, которые браузер сможет закешировать.
Встроенный шрифт уместен прежде всего в самодостаточных HTML-документах и при экспорте canvas или SVG, который должен нести свой шрифт с собой.
Как проверить шрифт в Base64
Если текст отображается шрифтом по умолчанию, откройте инструменты разработчика в браузере и поищите ошибки загрузки шрифтов, затем проверьте, что data URI начинается с data:font/, а данные начинаются с одного из префиксов выше. Начало PCFET0NUWVBF выдаёт HTML-страницу, сохранённую с расширением шрифта. Base64 в шрифт декодирует строку, покажет глифы и сохранит файл.
Вопросы и ответы
Какой формат шрифта лучше встраивать в Base64?
WOFF2. Он сжат специально под шрифты и поддерживается всеми актуальными браузерами, поэтому Base64 у него гораздо короче, чем у того же шрифта в TTF или OTF. Встраивайте TTF, только если нужный вам инструмент не читает WOFF2.
Какое значение format() ставить для каждого типа шрифта?
woff2 для WOFF2, woff для WOFF, truetype для TTF и opentype для OTF. Инструмент выбирает подсказку по MIME-типу файла, а если тип неизвестен, ставит truetype, так что у файлов OTF и WOFF подсказку стоит проверить.
Законно ли встраивать шрифт в Base64?
Решает лицензия шрифта, а Base64 здесь роли не играет. Открытые лицензии вроде SIL Open Font License это разрешают. Некоторые коммерческие лицензии на веб-шрифты ограничивают размещение на своём сервере или встраивание, так что перед встраиванием платного шрифта прочитайте условия.
Замедляет ли встроенный шрифт страницу?
Он переносит затраты в другое место. Отдельного запроса за шрифтом больше нет, но таблица стилей становится больше, и её нужно скачать целиком до отрисовки страницы. Это оправдано для одного небольшого шрифта с урезанным набором глифов, но не для целого семейства.