Создание адаптивного значка

Базовый обзор того, как создать адаптивный значок.

В этом посте я хочу поделиться мыслями о том, как создать адаптивный значок с помощью SVG. Попробуйте демо .

Показаны вкладки браузера, адаптирующиеся к изменениям светлой и темной темы системы MacOS. Попробуйте демо

Если вы предпочитаете видео, вот версия этого поста на YouTube:

Обзор

Пользовательский значок — отличный способ усовершенствовать веб-проект. Он отображается на вкладках браузера на рабочем столе, а также в программах чтения «Сохранить на будущее», в других сообщениях блога, ссылающихся на ваш сайт, и т. д. Традиционно это делалось с использованием файлов типа .ico , но недавно браузеры разрешили использовать векторный формат SVG . Используя прогрессивное улучшение, вы можете использовать хорошо поддерживаемые значки .ico и обновить их до .svg , если таковой имеется.

SVG способен масштабироваться вверх и вниз без потери качества и потенциально может быть очень маленьким по размеру. Он также может иметь встроенный CSS и даже встроенные медиа-запросы. Это означает, что если значок SVG используется в приложении для чтения или на панели закладок, есть вероятность, что пользователь может получить значок, соответствующий теме (светлый или темный), из-за темных стилей предпочтений, предусмотренных внутри SVG. Затем SVG адаптируется, используя встроенный стиль, к светлым и темным предпочтениям пользователя.

Большие и легко различимые примеры светлых и темных значков.

Светлые и темные вкладки в каждом браузере, обеспечивающие обзор адаптивной иконки сверху вниз: Safari, Firefox, Chrome.
Светлые и темные вкладки в каждом браузере, обеспечивающие обзор адаптивной иконки сверху вниз: Safari, Firefox, Chrome.

Разметка

Разметка SVG представляет собой XML с расширением типа файла .svg , что позволяет хранить более динамичные типы кода.

Начните с создания favicon.svg

Создайте новый файл с именем favicon.svg и добавьте следующее:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400">

</svg>

Вот мой SVG-файл, я установил размер viewBox , соответствующий моему изображению:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 447 428">

</svg>

Добавление фигур и путей

Затем добавьте код пути SVG. Часто это означает открытие SVG в редакторе кода, но этот код, как правило, не удобен для человека. Вот отличное руководство, которое поможет вам экспортировать и оптимизировать SVG из инструментов дизайна.

Обложку для этого конкурса GUI создал дизайнер, создавший ее в Adobe Illustrator . Я его сильно оптимизировал. Я пропустил его через SVGOMG , а затем вручную отредактировал этот беспорядок.

Вот пример моей группы путей изображения skull после ее очистки:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 447 428">
  <g id="skull">
    <path id="skull-outline" class="favicon-stroke" stroke-linejoin="round" d="M19.62 188.39A166.62 166.62 0 0 1 186.24 21.77c115.25 0 166.61 74.59 166.61 166.62 0 1.83-.08 3.64-.13 5.46h.13s.68 175.09.68 178.65c0 30.11-16.26 41.67-36.32 41.67-12.7 0-35.22-3.93-36.22-32.69h-.2c-1 28.76-16.81 32.69-36.22 32.69-18 0-32.87-6.78-35.77-32.53-2.9 25.75-17.8 32.53-35.8 32.53-20.06 0-36.32-11.56-36.32-41.67 0-2.48.36-24.88.36-24.88A166.68 166.68 0 0 1 19.62 188.39Z" />
    <path id="eyes-and-nose" d="M180.77 205.76c0 23.64 12.84 42.81 28.68 42.81s28.68-19.17 28.68-42.81-12.84-42.82-28.68-42.82-28.68 19.17-28.68 42.82M275 205.76c0 23.64 12.84 42.81 28.68 42.81s28.68-19.17 28.68-42.81-12.84-42.82-28.68-42.82S275 182.11 275 205.76M264.51 276.85s-29.26 43.53-20.12 49.23c7.07 4.41 20.49-16.71 20.49-16.71s12.82 22.58 16.76 20c16.24-10.71-17.13-52.5-17.13-52.5"/>
    <path id="jawline" class="favicon-stroke" fill="none" stroke-linecap="round" d="M114.92 284.33c22.54-1 22 7 22 62.48" />
  </g>
</svg>

Обратите внимание на удобочитаемые селекторы идентификаторов , такие как #eyes-and-nose и классы, такие как .favicon-stroke . Это моя ручная обработка в рамках подготовки к CSS. Добавление классов и идентификаторов не требуется, чтобы ваш SVG был адаптивным значком.

В теге <head> вашего HTML после значка .ico добавьте следующее:

<link rel="icon" href="/favicon.ico" sizes="any">
<link rel="icon" href="/favicon.svg" type="image/svg+xml">

Поскольку новый значок может выглядеть идентично версии .ico , убедитесь, что он используется. Откройте панель «Сеть» DevTools. Фильтровать по изображениям и искать по значку:

Снимок экрана панели «Сеть» из DevTools с фильтром, найденным по значку, и выделенным ресурсом favicon.svg.

Стили

Как и в случае с HTML, вы можете добавить тег <style> в разметку для использования в этой области документа:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 447 428">
  <style>
    
  </style>
  …
</svg>

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

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 447 428">
  <style>
    .favicon-stroke {
      stroke-width: 8px;
      stroke: #8929ff;
    }
    #skull-outline { fill: white }
    #eyes-and-nose, #hat-outline { fill: #8929ff }
    #hat-fill, #hat-bill { fill: #e662e6 }
  </style>
  …
</svg>

Пример предварительного просмотра значка светлой темы.

Далее самая интересная часть — оформление версии вашего значка в темной теме. Стили для этого будут включены в медиа-запрос в теге стиля:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 447 428">
  <style>
    …
    @media (prefers-color-scheme: dark) {
      /* dark theme styles */
    }
  </style>
  …
</svg>

Снимок экрана DevTools, показывающий медиа-запрос темной темы, перезаписывающий цвет заливки глаз и носа SVG.

Моя закончилась так:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 447 428">
  <style>
    …
    @media (prefers-color-scheme: dark) {
      .favicon-stroke { stroke: #343a40 }
      #skull-outline { fill: #adb5bd }
      #hat-outline { fill: #343a40 }
      #eyes-and-nose { fill: #343a40 }
    }
  </style>
  …
</svg>

Пример предварительного просмотра значка темной темы.

Я решил заменить ярко-фиолетовые границы на приятный прохладный темно-серый ( #343a40 ), изменил цвет костей черепа с белого на светло-холодный серый ( #adb5bd ), но оставил розовую акцентную шляпу.

Предварительный просмотр светлых и темных значков рядом.

Заключение

Теперь, когда вы знаете, как я это сделал, как бы вы‽ 🙂

Давайте разнообразим наши подходы и изучим все способы разработки в Интернете. Создайте демо, пришлите мне ссылку в Твиттере , и я добавлю ее в раздел ремиксов сообщества ниже!

Ремиксы сообщества