Делаем свой Font Awesome шрифт
Andrey Smirnov
Posted on May 21, 2022
Обзор
Font Awesome - отличная вещь, это шрифт, символами которого являются изображения. Например, мы хотим разместить у себя на странице сайта такую картинку:
Нам достаточно написать небольшой HTML
код, и картинка будет у нас на сайте:
<i class="fa-solid fa-thumbs-up"></i>
Но почему просто нельзя разместить картинку с помощью тега img
?
<img src="/thumbs-up.svg" />
При таком размещении мы не сможем изменять цвет картинки, например, при наведении указателя мышки над картинкой, а так же применять css transitions
к цвету. Конечно, есть решения на основе css filters
https://stackoverflow.com/a/50942954, но это усложняет читаемость и поддержку кода.
Есть ещё один метод изменять цвет картинки - добавлять inline svg
:
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path fill="#0000ff" d="M128 447.1V223.1c0-17.67-14.33-31.1-32-31.1H32c-17.67 0-32 14.33-32 31.1v223.1c0 17.67 14.33 31.1 32 31.1h64C113.7 479.1 128 465.6 128 447.1zM512 224.1c0-26.5-21.48-47.98-48-47.98h-146.5c22.77-37.91 34.52-80.88 34.52-96.02C352 56.52 333.5 32 302.5 32c-63.13 0-26.36 76.15-108.2 141.6L178 186.6C166.2 196.1 160.2 210 160.1 224c-.0234 .0234 0 0 0 0L160 384c0 15.1 7.113 29.33 19.2 38.39l34.14 25.59C241 468.8 274.7 480 309.3 480H368c26.52 0 48-21.47 48-47.98c0-3.635-.4805-7.143-1.246-10.55C434 415.2 448 397.4 448 376c0-9.148-2.697-17.61-7.139-24.88C463.1 347 480 327.5 480 304.1c0-12.5-4.893-23.78-12.72-32.32C492.2 270.1 512 249.5 512 224.1z"/>
</svg>
Атрибут fill
отвечает за цвет. Но проще всего изменять цвет css
стилями:
.icon {
color: red;
}
Итак, в этой статье мы:
- Создадим свой шрифт, который будет состоять из трёх векторных изображений;
- Конвертируем наш шрифт в
woff
иwoff2
форматы для оптимизации размера; - Напишем
css
стили для удобного добавления символов шрифта на страницы сайта.
1. Создаём шрифт
Для создания шрифта нам понадобятся две open source программы:
Загружаем и устанавливаем эти программы, а так же загружаем три изображения в формате svg
, из которых мы будем делать шрифт:
Обратите внимание на то, что большой палец
и лицо с улыбкой
имеют разрешение: 512x512
, а чашка
: 640x512
. Для того чтобы символы шрифта были центрированы, нам необходимо привести их к единому разрешению. В этом примере мы выберем разрешение 512x512
. Значит, разрешение чашки
придётся изменить, а изображение вписать и центрировать в новое разрешение. Для этого нам понадобится Inkscape
.
- Открываем нашу
чашку
вInkscape
; - Заходим в меню
File
->Document Properties...
; - Во вкладке
Page
в разделеCustom size
выбираемUnits
:px
- размер в пикселях. И там же устанавливаем разрешениеWidth
иHeight
в512
; В результате мы получим блюдце и ручку чашки, выступающие за поля изображения:
Далее:
- Нажимаем на изображение
чашки
; - В меню выбираем
Object
->Transform
->Scale
, устанавливаем единицы измерения вpx
, устанавливаем галочкуScale proportionally
,Width
устанавливаем в512
и нажимаемEnter
, после чего величинаHeight
должна пропорционально измениться. Результат:
Теперь нам нужно расположить изображение по центру, для этого:
- В меню выбираем
Object
->Align and Distribute...
; -
Relative to
выбираемPage
, и нажимаем на значки выравнивания по центру, по горизонтали и вертикали.
В результате получаем картинку по центру холста:
Осталось только сохранить результат в svg
файле:
- Меню
File
->Save As...
; - Выбираем формат
Plain SVG (*.svg)
и нажимаем кнопкуSave
.
В итоге у нас получилось изображение в svg
формате с разрешением 512x512
пикселей. Все три картинки с одинаковым разрешением.
Теперь можно приступить к работе с FontForge
:
- Открываем программу;
- Нажимаем на кнопку
New
для создания нового проекта; - Выбираем, например, букву
s
от словаsmile
и дважды кликаем мышкой на пустую клетку под буквойs
. Должен открыться редактор символа. - Открываем меню
File
->Import...
,Format
->SVG
, выбираем файллицо с улыбкой
и нажимаемOK
. - Закрываем редактор символа, после чего под буквой
s
мы увидим наше изображение с улыбкой. - Повторяем действия для двух оставшихся картинок, для
чашки
я выбрал буквуc
, дляпальца вверх
буквуt
. В результате у нас под буквамиs
,c
иt
должны появиться изображения:
Осталось только сохранить результат в файл шрифта:
- Меню
File
->Generate Fonts...
- Выбираем название
icons.ttf
и нажимаем кнопкуGenerate
, затемYes
.
Поздравляю, наш шрифт готов!
2. Конвертируем наш шрифт в woff
и woff2
форматы
Для конвертации шрифта из формата ttf
в woff
и woff2
я написал небольшую консольную утилиту, которую вы можете скачать с https://github.com/druxax/font-conv.
Для установки необходимо скачать и в консоли перейти в каталог утилиты font-conv
, затем выполнить команды:
npm pack
sudo npm install -g font-conv-cli-1.0.0.tgz
После установки в консоли заходим в каталог со шрифтом и запускаем утилиту конвертации:
font-conv-cli
После завершения работы утилита создаст каталог в той же папке с названием font-conv-res
- в нём будут находиться два файла сконвертированных шрифтов с расширениями woff
и woff2
.
Переместите все 3 файла шрифта в одну папку fonts
и мы приступим к последнему пункту - добавим шрифт на страницу сайта.
3. Добавляем шрифт на сайт
Подготовим html
шаблон нашего сайта, создадим файл index.html
.
<!DOCTYPE html>
<html>
<head>
<title>Font Excellent</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1>Font Excellent</h1>
<!-- TODO -->
</body>
</html>
Создадим файл styles.css
и подключим в нём наш шрифт.
@font-face {
font-family: "Font Excellent";
src: url("fonts/icons.woff2") format('woff2'),
url("fonts/icons.woff") format('woff'),
url("fonts/icons.ttf") format('truetype');
font-weight: 400;
font-style: normal;
}
Добавим в styles.css
стили для символов шрифта.
/* Общие настройки для всех символов шрифта */
.icon::before {
display: inline-block;
font-family: "Font Excellent";
font-size: 8rem;
font-weight: 400;
font-style: normal;
font-variant: normal;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
}
/* Для лица с улыбкой */
.icon-smile::before {
content: "\0073";
}
/* Для пальца вверх */
.icon-thumbs-up::before {
content: "\0074";
}
/* Для чашки */
.icon-cup::before {
content: "\0063";
}
/* Анимация цвета и другие стили */
body {
display: flex;
flex-direction: column;
align-items: center;
}
.icon {
margin: 0 1rem;
animation: color-animation 4s linear infinite;
}
.icon-cup {
--color-1: #df8453;
--color-2: #4195b8;
--color-3: #e4a3a2;
}
.icon-smile {
--color-1: #dfaf48;
--color-2: #aed4d0;
--color-3: #bff2a7;
}
.icon-thumbs-up {
--color-1: #aed4d0;
--color-2: #e19c9b;
--color-3: #a9cfcb;
}
@keyframes color-animation {
0% {color: var(--color-1)}
32% {color: var(--color-1)}
33% {color: var(--color-2)}
65% {color: var(--color-2)}
66% {color: var(--color-3)}
99% {color: var(--color-3)}
100% {color: var(--color-1)}
}
Здесь мы выбрали общие настройки для icon
класса и указали содержимое - кодировку символа для каждого класса наших картинок content: "\XXXX"
, где XXXX
- CSS Entity значение. При создании шрифта, его символами мы выбрали буквы c
, s
и t
, например, у знака s
CSS Entity - 0073
. Если в FontForge
кликнуть на символ, то под строкой меню можно увидеть кодировку символов. Например, кликнув на t
его код будет указан в виде U+0074
, значит, в css
мы запишем: content: "\0074";
.
С css
мы закончили, осталось только добавить в наш html
шаблон наши картинки.
<!DOCTYPE html>
<html>
<head>
<title>Font Excellent</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1>Font Excellent</h1>
<div>
<i class="icon icon-cup"></i>
<i class="icon icon-smile"></i>
<i class="icon icon-thumbs-up"></i>
</div>
</body>
</html>
Теперь, открыв файл index.html
в браузере, мы должны увидеть следующее:
Ставьте лайки, подписывайтесь на блог.
Спасибо за внимание.
Posted on May 21, 2022
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.