Как собрать шрифт с иконками
Разработчики иногда просят иконки не в пнг или свг, не пнг-спрайтом, а в шрифте. Им проще его так использовать. В посте я расскажу как из скетч-файла собрать шрифт, чтобы всем было удобно в будущем.
UPD. Появилась более новая версия сборки
Зачем это делать, есть же фонтелло
Есть много сервисов, которые собирают шрифт из загруженных свг-файлов. Зачем придумывать что-то своё?
- Чтобы случайно не сломать шрифт. Если забыть иконку, которую уже выдавал и не загрузить в фонтеллу, то она не попадет в новый шрифт и где-то в интерфейсе пропадет иконка.
- Подойдет, если дизайнеров несколько. Если дизайнеров в команде несколько, то нужна синхронизация между ними. Было бы круто, если бы каждый мог добавлять в шрифт иконки и не сломать чужой результат.
- Легко встраивается в ваш CI-процесс.
- Не всех устраивает внешний сервис. Внешний сервис может быть недоступен, он может внезапно обновиться, стать платным, и вообще не все готовы отдавать наружу свои иконки.
- Разработчику сразу формируется и less-файл. Обмениваться кодами символов неудобно, они генерируются автоматически и могут измениться, использовать css-класс надежно, он не поменяется.
Вариант 1. Собираем и отдаём шрифт
Я выложил все необходимые файлы в репозиторий icon-font-public, скачайте его и распакуйте куда-нибудь.
Скачать: https://github.com/mikeozornin/icon-font-public/archive/master.zip
Шаг 1. Настраиваем среду
Все эти заклинания надо произнести один раз, дальше не понадобятся
1) Установить brew. Brew — это такой менеджер пакетов, который легко позволяет ставить программы и библиотеки. Выполнить в терминале команду:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
2) С помощью brew установить шрифтообработчики:
brew install ttfautohint fontforge --with-python
3) Установить node.js, скачать тут https://nodejs.org/en/ current-версию.
4) Установить SketchTool
При установленном Sketch выполнить в терминале команду:
/Applications/Sketch.app/Contents/Resources/sketchtool/install.sh
5) Установить grunt
npm install -g grunt-cli
Шаг 2. Сборка файла шрифта
Для сборки шрифт нужно произнести в терминале заклинание:
./build.sh
Если в первый раз не сработает, сделайте скрипт выполняемым:
chmod +x build.sh
В итоге при добавлении иконки нужно будет сделать:
- Нарисовать иконку.
- Собрать шрифт: ./build.sh
- Отдать файл шрифта и less-файл разработчику
Что все это было?
Всё, что описано выше работает так:
- С помощью SketchTool всё, что может быть экспортировано, экспортируется из скетча в СВГ-файлы.
- СВГ-файлы, полученные на шаге выше собираются в шрифт. Для этого запускается сборщик шрифта, который все СВГ-файлы собирает в шрифт, конвертирует его в нужный формат и формирует хтмл-страницу с превью.
Вариант 2. Собираем и отдаём шрифт npm-пакетом
Это ещё что такое?
Фронтенд-разработчики подключают библиотеки через npm-пакеты. Это привычная и удобная для них среда, кроме этого, npm-пакет сделает передачу шрифта удобней.
Шаг 1. Настраиваем среду
Нужно настроить среду как в первом варианте, и дополнительно настроить локальный npm-репозиторий. Спросите вашего фронтендера как это сделать у вас в команде. Попросите его исправить файл package.json.
Шаг 2. Сборка файла шрифта
- Нарисовать иконку.
- Собрать шрифт: ./build.sh
- Изменить версию пакета в файле package.json
- Выполнить команду grunt publish
- Передать разработчику шифровку «Выпустил пакет версии xxx».
Вариант 3. Собираем и отдаём шрифт нугет-пакетом
К сожалению про нугет ничего не знаю, но если кто-то соберет рабочий вариант, добавлю.
На что обратить внимание при рисовании иконок
При экспорте иконок надо не забыть перевести все в кривые. Чего не должно быть:
- Радиусов скруглений
- Покрашенным рамок
- Текстовых надписей
Если это будет, то иконка может выглядеть в шрифте плохо, даже если в СВГ-файле было всё ок.
Если что-то не работает
Я обкусывал наше решение, возможно что-то переобкусал. Пишите если что-то не работает, или попросите помочь вашего фронтендера, он разберется.