DDMLIcons. Иконсет на material-иконках от Google

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Доброго здравия всем хабровчанам!

Как я уже упоминал в одном из комментариев, у меня есть свой фреймворк - XBWeb. Хотя сам по себе он и далёк от совершенства. Но на основе наработок, лежащих в его основе, я сейчас разрабатываю полноценный CMF. В процессе разработки оного передо мной встала задача проработки интерфейса админки, и в частности иконочного шрифта. Результатом решения этой задачи стала иконочная библиотека DDMLIcons (double dingbat multi-layer icons), позволяющая в одном элементе получить двухцветную (а при нескольких слоях и многоцветную) иконку путём компоновки иконок... Так, ладно, давайте обо всём по порядку.

В целом задача по компоновке иконочного шрифта в наше время без особого труда решается при помощи сервиса Fontello. На нём есть несколько иконочных шрифтов, из иконок которых можно без труда скомпоновать свой набор иконок, назначить им коды и имена в CSS. Однако, есть две проблемы. Во-первых, не всегда можно решить задачу иконками из одного набора. А иконки из разных наборов далеко не всегда сочетаются друг с другом. Во-вторых, в целом начертания иконок по нынешним временам выглядят уже аляповато. Нынче в тренде Flat design, material design и прочее плоское, простое и лаконичное.

И первая и вторая проблема решается благодаря двум вещам. Во-первых, Fontello поддерживает загрузку произвольных иконок и даже целых шрифтов в формате SVG. Во-вторых, у Google есть чудеснейший проект под названием "Material Icons and Symbols". Там более 2500 иконок, каждую из которых можно скачать либо в формате PNG, либо в формате SVG. Притом можно настроить некоторые параметры, как толщину и заполнение. В общем итоговое решение проблемы сводится к тому, чтобы накачать иконок, скормить их Fontello и получить готовый шрифт. Главное - это понимание, что именно нужно, и гора терпения.

Моя задача заключалась в разработке максимально универсального набора иконок, который мог бы использоваться любым модулем. А ещё требовалось, чтобы у каждой сущности были модификаторы (плюсик для добавления, корзина для удаления и т.д.). Вот на этом-то месте я и обнаружил, что у Google с этим, скажем так, не очень. Даже если и попадаются сущности с модификаторами, то их мало, и модификаторов далеко не всегда хватает. Тут-то я и вспомнил про одну свою старую и почти забытую идею - комбинировать одну иконку из нескольких. Грубо говоря, в простом случае идея состоит в том, чтобы поверх основной иконки накладывать нужный модификатор. В этом случае нам достаточно скомпоновать в одном шрифте базовые сущности, дингбаты-модификаторы (далее по тексту просто дингбаты), ну и стрелочки там всякие.

Ещё одной проблемой было то, что стрелочек каждого вида по идее восемь штук - восемь разных направлений. Здесь задача решается путём изменения ориентации иконки через свойство transform. Кроме того, нужно конечно же прописать анимацию для, например, дингбата refresh. И последний момент - "неактивные" иконки (disabled). Это когда сущность, например, недоступна для использования. Здесь решение довольно простое: удаляем из дингбата content (если дингбат есть), превращаем его в вертикальную черту и разворачиваем на 45 градусов назад. Таким образом получается перечёркивание иконки. Не забываем изменить цвет иконки и рамок дингбата на светло-серый, например.

Так же, как и в большинстве популярных иконочных шрифтов для основной иконки я использую псевдоэлемент :before. Для вывода дингбата-модификатора я использую псевдоэлемент :after. Во всех случаях используется абсолютное позиционирование псевдоэлементов. Вообще расчёт идёт на то, чтобы HTML-элемент с иконками использовался отдельно от какого-либо текста. Собственно, практика привычная для тех, кто использует в разработке, например, Bootstrap. Начертание двух-вариантных иконок (простой и заполненный) управляется свойством font-weight. Заполненный вариант отображается при значении bold.

В настоящий момент в наборе присутствуют 363 двух-вариантные иконки и 256 простых иконок. Все иконки можно просмотреть при помощи простого просмотрщика, входящего в состав пакета. Там же есть визуальный конструктор, позволяющий посмотреть, как будут выглядеть комбинации иконок между собой. Поддерживаются следующие свойства: цвет, заполненность, анимация, ориентация. Для основной иконки само собой есть переключатель на состояние "disabled". Дизайн блока простейший, но понятный. Выводится три варианта размера иконок - 80 пикселей, 56 пикселей и 32 пикселя. Под блоками кнопок текстом выводятся классы, которые необходимо присвоить HTML-элементу, чтобы отобразить иконку.

Просмотрщик поставляется в виде PHP-файла. Но если Вам нужно, чтобы иконки можно было просмотреть без запуска сервера, Вы можете:

  1. Перейти в папку пакета.

  2. Выполнить команду "php index.php compile".

  3. Использовать получившийся файл index.html.

Файл "index.php" является не только просмотрщиком, но и компилятором. Поддерживает следующие команды:

  1. compile - компиляция стилей (см. ниже) и файла index.html

  2. compile/css - компиляция стилей; итоговый файл собирается из файла "min-style.css", результатов обработки файлов "font.json" каждого шрифта (классы, определяющие символ для каждой иконки), содержимого файла "src/ui.css" (если оно не пустое), содержимого файла "src/macros.css" (если оно не пустое), содержимого файла "src/corrections.css" (если оно не пустое). Последние три файла нужны для хранения: макросов, UI-макросов (например, чекбоксы) и коррекций (более точного позиционирования иконок).

  3. compile/font - компиляция файлов "font.json" из файлов конфигурации (config.json) сервиса Fontello.

Собственно, последний пункт предназначен для того, чтобы можно было собрать свой иконсет по принципу, обозначенному в статье. Для этого нужно сделать следующее:

  1. Собрать на Fontello набор иконок с normal-нечертанием. Прописать им названия. Коды прописывать не нужно. Получить config.json, поместить его в папку normal.

  2. Собрать на Fontello набор иконок с bold-начертанием. Названия и коды приписывать не нужно. Получить config.json, поместить его в папку bold.

  3. Собрать на Fontello набор иконок-символов. Прописать им названия. Коды прописывать не нужно. Получить config.json, поместить его в папку symbols.

  4. Запустить "php index.php compile/font".

  5. По очереди скормить каждый файл "font.json" сервису Fontello, чтобы скомпилировать шрифты как таковые.

Само собой после этого нужно будет запустить команду "compile", дабы скопилировать итоговый стиль.

В стилях существует несколько переменных:

  1. --ddml-color-default - условно серый цвет (#5f6368).

  2. --ddml-color-notice - условно голубой цвет (rgb(70, 130, 180)).

  3. --ddml-color-success - условно зелёный цвет (rgb(60, 180, 120)).

  4. --ddml-color-warning - условно рыжий цвет (rgb(180, 140, 10)).

  5. --ddml-color-error - условно красный цвет (rgb(200, 90, 90)).

  6. --ddml-color-disabled - цвет "неактивных иконок" (silver).

  7. --ddml-text-stroke - толщина обрамления дингбата-модификатора (2px).

  8. --ddml-text-stroke-color - цвет обрамления дингбата-модификатора (white).

Что осталось, что планируется?

Из недочётов на данный момент осталось только точное позиционирование origin-а иконки, дабы не возникало биений. Ещё надо будет на досуге сделать проекту страничку на github.io. Ну и само собой добавить наиболее расхожие макросы. Здесь принимаются предложения от сообщества в виде pull-реквестов. Только сначала просмотрите README. Возможно предлагаемый Вами макрос уже добавлен.

https://github.com/XanderBass/ddmlicons - GitHub проекта.

Благодарю всех за внимание!

Источник: https://habr.com/ru/post/724020/


Интересные статьи

Интересные статьи

Я обнаружил уязвимость, похоже, затронувшую все телефоны Google Pixel: вы можете дать мне любое заблокированное устройство Pixel, и я верну его вам разблокированным. Баг устранили в обновлении безоп...
Часть 1. Вступление Часть 2. Заголовочные файлы Часть 3. Переменные: статические и глобальные Часть 4. Классы … Эта статья является переводом части руководства Google по стилю в C++ на русски...
В данной статье мы хотели бы рассказать о том, как мы в команде Wargaming Platform знакомились с BigQuery, о задаче, которую необходимо было решать, и проблемах, с которы...
Чарли Борн был специалистом по компьютеризированному поиску ещё за сорок лет до появления Google. Музей компьютерной истории недавно завершил каталогизацию его уникальной коллекции матери...
Нила Стивенсона смело можно назвать одним из самых серьезных и авторитетных фантастов современности. На его счету множество таких престижных премий, как «Хьюго», «Локус» и «Прометей»,...