Как отдать браузеру нестандартный шрифт, используя CSS | Zhbert’s Home
Zhbert's Home
Домашняя страничка Zhbert'а

Как отдать браузеру нестандартный шрифт, используя CSS

СТАТЬИ / HTML-CSS / КАК ОТДАТЬ БРАУЗЕРУ НЕСТАНДАРТНЫЙ ШРИФТ, ИСПОЛЬЗУЯ CSS

Как известно, при рендеринге браузер старается использовать системные шрифты, которые предустановлены (или уже установлены вручную) в ОС. Но что делать, если таких шрифтов там нет? Например, нужно использовать какой-то совсем нестандартный шрифт или заставить браузер под Linux’ом корректно отображать чисто виндовый шрифт, которого в системе точно нет.

Выход из этой ситуации прост — нужно отдать браузеру шрифт с сервера, на котором работает сайт. Сделать это довольно просто.

Для начала находим нужный нам шрифт, скорее всего он будет в формате *.ttf. Для примера я взял использованный мной ранее специфичный шрифт — Digital-7, представляющий собой классический семисегментный индикатор, который я использовал для имитации экрана виртуального девайса. Скачиваем себе файл шрифта.

Далее его нужно сконвертировать в несколько форматов. Да, это будет один и тот же шрифт, но в разных форматах. Необходимо это для того, чтобы во всем зоопарке браузеров работало у вас все одинаково, а не классически «Под виндой в хроме норм, а под линуксом в файрфоксе все разлетелось». Нужны следующие форматы:

Формат файла Браузер
*.eot IE9 Compat Modes
*.woff2 Последние версии браузеров
*.woff Последние версии + IE9
*.ttf Старые Safari, Android, iOS

Сконвертировать файл *.ttf в нужные форматы можно с помощью онлайн-конвертера, например этого — https://onlinefontconverter.com/. Там все просто, расписывать процесс не буду.

После этого нужно скопировать все полученные файлы, включая исходный *.ttf в каталог, где лежит CSS-файл. В самом файле пишем следующую настройку для семейства шрифтов:

@font-face {
    font-family: 'Digital-7 Mono';
    src: local('Digital-7Mono.eot'),
        url('Digital-7Mono.eot?#iefix') format('embedded-opentype'),
        url('Digital-7Mono.woff2') format('woff2'),
        url('Digital-7Mono.woff') format('woff'),
        url("digital-7-mono.ttf") format("truetype");
    font-weight: normal;
    font-style: normal;
    font-display: swap;
}

Не забудьте проверить, что имена файлов в блоке указаны верно, иначе работать ничего не будет.

В принципе, на этом все. При обращении к шрифту браузер будет проверять, есть ли такой шрифт в системе, и при его отсутствии запрашивать его у сервера, который и будет отдавать браузеру нужную версию файла.