Веб-шрифты — это простой способ интегрировать гибкую систему значков в веб-проект, не жертвуя совместимостью с устаревшими браузерами. Технический процесс создания веб-шрифтов также стал намного проще с момента появления онлайн-инструментов, таких как Icomoon или Fontello .
Но HTML5 предоставил нам еще более универсальный способ использования значков на веб-страницах: SVG — масштабируемая векторная графика.
Базовые функции SVG теперь широко поддерживаются практически всеми браузерами (взгляните на caniuse.com ), поэтому сейчас есть гораздо меньше причин не использовать его.
И если вам нужно поддержать Explorer 8, есть несколько очень простых вариантов, которые вы можете применить.
Рисование значков
Этот шаг точно такой же, как вы можете прочитать в моей статье о веб-шрифтах , посмотрите на нее подробнее, как подготовить ваши иконки.
Когда ваши SVG-файлы будут готовы, вам понадобится метод, чтобы включить их в ваш проект.
Давайте посмотрим на варианты, которые у нас есть.
Использование <img>
Это очень простое решение, и хотя оно не очень подходит для нашей области применения, оно приносит нам некоторые интересные соображения.
Для этого требуется только простой тег img вы, вероятно, использовали с тысячами JPG, GIF и PNG.
Это очень простой способ использовать файлы SVG; Вы можете управлять размером изображения, как требуется, используя атрибуты width и / или height , но вы не можете контролировать цвет.
Есть много способов обеспечить совместимость с устаревшими браузерами, если вам это нужно. В каждом случае вам нужно будет предоставить файлы PNG для замены SVG.
Лично я предпочитаю изящно унизительную технику, которая требует, чтобы все файлы использовали одинаковые имена и имели одинаковый путь. Это также требует Modernizr.
Несколько строк JavaScript сделают свое дело:
if(!Modernizr.svg){var imgs =document.getElementsByTagName('img');for(var i =0; i < imgs.length; i++){var this_src = imgs[i].src;if(this_src.match(/(\.svg)$/)){ imgs[i].src= this_src.replace(/(\.svg)$/,'.png');}}}
Другое очень умное решение было описано Алексеем Теном, а также рассмотрено Крисом Койером в его статье SVG Fallbacks .
Вы также можете загрузить изображение в iframe SVG, используя теги object или iframe . Каждый из них предоставляет только разметку для загрузки резервных изображений:
<objectdata="svg_image.svg"type="image/svg+xml"><!-- the following image is displayed if browser can't load svg image --><imgsrc="fallback.png"alt="fallback image"></object>
Взгляните на мой код SVG для встраивания для обзора всех текущих методов встраивания.
img тега img с помощью ссылки SVG
Основное использование img для файлов SVG может быть расширено с помощью идентификаторов фрагментов .
Идентификаторы фрагментов являются встроенным свойством SVG: мы можем ссылаться на часть SVG, используя спецификацию представления SVG или обращаясь к элементу SVG по его идентификатору <view> .
Первый метод заключается в указании viewBox при загрузке файла SVG.
<imgsrc="svg_file.svg#svgView(viewBox(x,y,w,h))">
Где x,y,w,h представляют координаты фрагмента из исходных файлов ( x и y ), а также ширину и высоту фрагмента ( w и h ).
Например, чтобы показать только черного коня из этого спрайта шахматных фигур (из Википедии ), вы должны определить значения, как показано на схеме ниже:
Это может напомнить вам о методах «CSS image sprite», которые некоторые сайты используют для своих элементов пользовательского интерфейса.
Второй способ требует, чтобы SVG содержал определенный <view> нашего фрагмента.
Если наш файл «Шахматные фигуры» содержал нечто подобное:
<viewid="black-horse"viewBox="140 52 34 33"/>
Мы могли бы получить тот же результат, используя:
<imgsrc="Chess_Pieces_Sprite.svg#black-horse">
Оба метода совместимы со всеми основными браузерами (включая IE9 +), за исключением устройств IOS, которые неправильно отображают фрагменты метода «просмотра». К счастью, IOS в порядке с первым методом.
Все браузеры требуют, чтобы изображение имело явный размер (с атрибутами widthиheight или правилами CSS) для правильного отображения.
Для получения дополнительной информации о ссылках SVG посмотрите:
SVG W3C Рекомендация, которая предоставляет дополнительную информацию и список всех параметров
Обзор техник создания спрайтов SVG от Sara Soueidan, который охватывает многие другие темы о методах спрайтов SVG.
Больше спрайтов
До сих пор мы не видели ничего, что делает SVG очевидной заменой веб-шрифтов, но мы можем сделать гораздо больше с SVG. Мы можем организовать наши файлы значков SVG, чтобы создать гораздо более гибкий и мощный инструмент.
Есть три основных способа (которые я знаю) сделать это:
Стеки Simurai SVG
CSS спрайт
Использование SVG <defs> и <symbol>
Стеки Simurai SVG
Это первый метод, о котором мне стало известно, и я думаю, что будет справедливо сказать, что он относительно устарел сегодня. Тем не менее, я хочу упомянуть об этом, хотя бы для записи.
Впервые этот метод был описан Симураем в его блоге в 2012 году, хотя я читал об этом и в SitePoint .
Как вы можете видеть на скриншоте ниже, эта техника требует, чтобы все ваши символы накладывались друг на друга — в отличие от слоев Photoshop. Каждый из них имеет одинаковый класс ( icon ) и уникальный идентификатор.
Все значки исчезнут, пока они не будут вызваны с использованием синтаксиса идентификатора фрагмента:
<imgsrc="icon_file.svg#spriteID">
Используя тег img , эта техника хорошо работает с Firefox, Chrome, Safari (рабочий стол) и Opera. Однако он не работает ни с одним браузером IE или устройством IOS.
Вы также можете использовать стеки SVG с фоновыми изображениями (добавив немного CSS на свою страницу), но, к сожалению, это работает только с Firefox.
CSS спрайт
Эта методика была усовершенствована Filament Group и состоит из веб-приложения (или плагина Grunt, если вы предпочитаете).
Как вы можете видеть на странице Grumpicon, «инструмент обрабатывает набор файлов SVG, генерирует резервные изображения PNG для устаревших браузеров и экспортирует демонстрационную страницу, показывающую, как использовать окончательные значки».
Я создал демо на Codepen (удаляя резервный скрипт), и вот результат:
Вы можете видеть, что, поскольку тег symbol имеет собственный атрибут viewBox , вам не нужно устанавливать его каждый раз, когда отображается значок, что делает этот метод очень простым в использовании .
Коллекция тегов symbol может быть собрана вручную с помощью некоторого плагина Grunt (Google для Grunt SVG merge ) или, опять же, с помощью Icomoon.
После загрузки значков в приложение Icomoon выберите нужные глифы и вместо создания шрифта нажмите кнопку « Создать SVG / PNG» .
Вы также можете установить некоторые настройки для создания резервных файлов PNG и даже спрайта CSS старого стиля (как для файлов PNG, так и SVG), как в главе « Спрайты CSS» . Обратите внимание, что спрайт-файлы, сгенерированные приложением Icomoon, делают создание почти чистого CSS-отступления очень простым.
Затем кнопка загрузки доставит коллекцию файлов, включая готовый файл SVG с встроенными в него идеальными определениями <symbol> .
Этот метод отлично работает во всех основных браузерах, включая IE9 +, но, поскольку комбинированный SVG встроен в страницу, нет способа кэшировать его в браузере.
К счастью, мы можем ссылаться на символы SVG из внешнего файла. В этом случае синтаксис становится:
Я думаю, что есть много интересных возможностей вокруг этих идей. Если вы хотите узнать больше, вот несколько ресурсов, которые я нашел очень полезными: