Перейти к содержимому

Svg спрайты что это

  • автор:

SVG-спрайты

SVG-спрайты

В очередной раз, просматривая вакансии на HTML-верстальщика, на предмет поиска темы для новой статьи, в списке требований работодателя, наткнулся на пункт – использовать в верстке SVG-спрайты.

Нам, верстальщикам, не стоит игнорировать требование работодателей, а идти в ногу с современными приёмами в верстке. Что по отдельности обозначают эти модные термины?

SVG – это масштабируемый формат векторной графики. В SVG формате хранится инструкция по построению изображения, по точкам и кривым, в виде текста. А это значит, что его можно открывать и редактировать в любом редакторе кода, работать с ним как с HTML файлом.

Спрайт – это один файл с графикой, состоящий из нескольких маленьких графических файлов, например иконок. Тогда, как SVG-спрайт – это масштабируемый один большой графический файл.

Почему SVG-спрайты – это хорошо?

Почему они так нравятся работодателям и заказчикам? Все дело в скорости загрузки сайта: чем меньше HTTP-запросов к серверу, тем быстрее работает сайт. Чем быстрее работает сайт, тем больше его любят поисковые системы и посетители.

Используя на сайте SVG-спрайты, вы убиваете сразу двух зайцев – получаете меньший вес у графики (SVG формат в разы легче, чем PNG и JPG) и меньше запросов к серверу.

В этом коде целых три HTTP-запроса, на больших экранах появится замыливание и весят иконки в PNG формате больше:



А здесь один запрос, при масштабирование векторная графика не теряет в качестве и меньше весит.

Как сделать SVG-спрайт?

  1. Скачиваем на сайте flaticon две иконки pinterest + github, в формате SVG. Теперь нужно два SVG-файла объединить в один.
  2. В редакторе кода создадим sprite.svg и пропишем следующий код.







  3. Значения атрибутов viewBox, копируем из pinterest.svg и github.svg.
  4. Открываем содержимое двух скачанных файлов и копируем внушительный код отрисовки иконки, тега path и вставляем между тегами . Мы вынесли код иконок в отдельный файл sprite.svg.

Теперь, через CSS стили мы можем задавать иконкам любой цвет, размер, а также менять им цвет при наведении. Не стоит паниковать, если иконки не отображаются в Chrome на вашем компьютере, откройте другим браузером или загрузите страницу на сервер.

SVG-спрайты vs иконочных шрифтов

Чем SVG-спрайты лучше иконочных шрифтов, ведь все иконки можно упаковать в один файл и загружать с одним HTTP-запросом? Перечислим некоторые преимущества:

  • проще управлять позиционированием
  • удобнее делать многоцветные иконки
  • можно делать анимированные иконки

Поддержка браузерами

Формат SVG поддерживается всеми современными браузерами и начиная с
IE 11+.

Пример SVG-спрайта

Код на Github: ссылка

Создано 03.07.2019 10:56:16

  • Михаил Русаков
  • Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

    Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
    Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

    Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. BB-код ссылки для форумов (например, можете поставить её в подписи):

    Комментарии ( 0 ):

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2024 Русаков Михаил Юрьевич. Все права защищены.

    SVG-спрайт логотипа и иконок сайта

    SVG-спрайт – файл формата векторной графики SVG, содержащий инструкции построения нескольких графических изображений SVG по точкам и соединяющим их кривым, как в школьной геометрии. В отличие от обычного SVG-изображения, SVG-спрайт напрямую недоступен визуальному просмотру в браузере.

    Векторные форматы – простые тексты, легко открываются и редактируются в notepad-e. Текстовое указание параметров узловых точек и характеристик соединяющих их линий для векторного построения графики изображения браузеру легко масштабировать SVG-картинки в неограниченных пределах и без потери качества.

    Никакого дополнительного софта создание SVG-спрайта не требует. Начальную генерацию SVG-файлов производим на онлайн-сервисах, коих в Сети немеряно. Окончательная сборка sprite.svg – в Notepad-е, не сочтите за мазохизм.

    SVG – векторная графика, имеющая ряд преимуществ перед растровой. Создание и размещение SVG-спрайта, содержащего изображения иконок сайта и его логотипа – тема этой статьи. Для создания SVG-спрайта не требуется дополнительный софт. Работаем в онлайн-сервисах и Notepad-e, не сочтите за мазохизм.

    Спрайт – файл-набор сервисных картинок (иконок), содержащий несколько мелких изображений, вызываемых к отрисовке на экране пользователя программными средствами браузера.

    История растра. С незапамятных времен, растровый спрайт использовался верстальщиками для ускорения загрузки и работы сайта. Стародавний спрайт собирался в фотошопе в единый сервисный файл формата PNG или JPEG, к файлу присоединялся кусочек CSS-кода, задающий правила отрисовки нужного участка изображения. Растровые PNG-спрайты уходят в прошлое, уступая место векторным SVG-спрайтам по весу загружаемого файла, качеству отрисовки (масштабирования) изображения и удобству программного использования.

    Создание SVG-спрайта

    Алгоритм создания иконок сайта на SVG-спрайте, примерно таков:

    1. Рисуем, качаем, находим картинки иконок;
    2. Картинки форматов ICO, GIF, JPEG, PNG или BMP генерируем в SVG в любом онлайн-генераторе. Входной формат изображения для SVG-спрайта – картинка-SVG-спрайт, размер картинки – не имеет значения;
    3. Генерируем SVG-спрайт из SVG-картинок, опять-таки – в любом онлайн-генераторе, коих немеряно в Сети;
    4. Размещаем SVG-спрайт на сайте. Традиционное размещение файла в корне сайта избавит от лишних записей в коде;
    5. Прописываем картинку из SVG-спрайта в HTML-код веб-страницы;
    6. Подключаем CSS к картинке из SVG-спрайта, устанавливаем размеры и визуальные эффекты.

    sprite.svg – файл векторного формата SVG, содержащий изображения пользовательских иконок сайта и пришедший на смену стандартному sprite.png, неудобного и громоздкого растрового формата. Использовать sprite-файл формата SVG с иконками сайта верстальщику гораздо проще – снижается нагрузка на отдающий сервер и трафик пользователя, а самое главное – увеличивается скорость загрузки и работы веб-ресурса.

    Создание SVG-спрайта. Создаем на рабочем столе папку sprite.svg, с пустыми файлами sprite-svg.html и sprite-svg.css. Открываем в блокноте файл sprite-svg.html, помещаем стандартный код html-документа с элементами и создаваемого SVG-спрайта. Присваиваем открывающему тегу для последующего присоединения стилей CSS:

         SVG-спрайт логотипа и иконок сайта       

    Структура svg-спрайта

    Символьный svg-спрайт – корневой файл формата SVG, состоящий из элементов содержащих код svg-изображений. Индивидуально, элементам присвоен уникальный идентификатор id для внедрения кода svg-картинок в тело html-документа и дальнейшего обращения к ним.

    Корневой элемент сайта

    Корневой элемент сайта – файл любого формата, находящийся в корне сайта. Корневой элемент не нуждается в своем декларировании (объявлении в ) с указанием пути – браузеры и роботы самостоятельно находят его. К самым известным корневым элементам относятся файлы: robots.txt, sprite.svg, favicon форматов SVG, ICO, GIF, JPEG, PNG и BMP .

    • Реклама на сайте | Мифы и реальность
    • Движок для сайта | Какой выбрать
    • Какой браузер лучше
    • Оптимизация и настройка CMS DLE
    • Системный администратор
    • Заработок на буксах | Философия успеха
    • Ошибка танкиста

    Site

    • 301 редирект | Permanent Redirect
    • Права доступа (chmod) вида 777
    • Таблица символов Юникод в HTML
    • Якорь HTML | Закладка на веб-странице
    • Списки HTML
    • Списки HTML | Обтекание картинок
    • Списки HTML | Оформление маркеров (буллетов

    Windows

    • Программы для выключения компьютера скачать
    • Выключение компьютера по расписанию
    • Задержка времени (пауза, тайм-аут) в бат-файле
    • Word и Excel | Автоматическая нумерация ячеек таблицы
    • Word | Разорвать и соединить таблицу
    • Word | Вставить диаметр, ударение, апостроф
    • Excel | Перенос строки в ячейке
    • Word | Убрать горизонтальную линию

    Записки алкоголика

    • Позвонить оператору Водафон-Украина (МТС, UMC)
    • Водафон, Киевстар, Лайф | Код USSD-запросов
    • Заработок на буксах | Философия успеха
    • Заработок на буксах | Мифы и реальность

    SVG-спрайты

    Спрайт, в контексте веб-разработки, чаще всего, — один большой файл с графикой, получившийся в результате «сшития» нескольких маленьких графических файлов (иконок, элементов оформления). Это нужно для экономии количества запросов к серверу: меньше запросов — сайт работает и загружается быстрее. Сшивать в спрайт можно и растровую, и векторную графику.

    Я расскажу о своём любимом способе работы с векторными спрайтами.

    Работа с SVG (введение)

    Не буду расхваливать SVG, причин его невероятной крутизны много и они неоднократно описаны. Поддержка начинается с IE9.

    Источником векторных иконок (помимо дизайнеров) служат icomoon.io, flaticon.com, freepik.com/free-vectors и им подобные. Нарисовать самому можно в Adobe Illustrator или в Inkscape. Поскольку это обычный текстовой формат, редактировать его можно в текстовом редакторе.

    Редакторы очень любят вставлять в код SVG-файлов служебную информацию, увеличивая вес файлов. Оптимизировать можно или он-лайн на jakearchibald.github.io/svgomg, или задачей для какого-либо таск раннера (см. ниже).

    И да, SVG лучше иконочных шрифтов, ибо даёт больше возможностей и не является костылём).

    У меня есть репозиторий со сводом рекомендаций для дизайнеров по работе с векторной графикой. Наиболее важные из них, актуальные для подготовки SVG-файлов к «сшивке» их в спрайт:

    • Артборд подогнан по габариту фигуры или все однотипные артборды подогнаны под единый размер.
    • Всё, что может быть слито в единую форму, слито.
    • Убраны лишние объекты.
    • Проведено сжатие.

    SVG-спрайты

    В подавляющем большинстве случаев, я использую такие спрайты для иконок. Мой любимый вариант основан на переиспользовании ( symbol и use ):

    1. Собираем один общий svg-файл со множеством symbol (элементы спрайта), имеющих свои id . У тега svg задаём style=»display:none» . Смотреть пример.
    2. Вставляем полученный спрайт в разметку страницы. (Я предпочитаю делать это с помощью javascript и localStorage, об этом ниже.)
    3. В разметке используем ссылки на symbol при помощи use . Смотреть пример.

    Достоинства метода:

    • чистый, читабельный код,
    • управление с уровня CSS страницы (в том числе, fill=»currentColor» ),
    • кеширование в localStorage (спрайт загружается только единожды),
    • доступность (можно добавить title ).

    Недостатки метода:

    • управление с уровня CSS не полное: сложно управлять отдельными частями символа (имеющими свои CSS-классы), если он вставлен несколько раз,
    • работает только с сервера (локального/удалённого — не важно), ибо использует localStorage.

    Как собирать

    Увы, в отличие от растровых спрайтов, он-лайн инструментов для сборки SVG-спрайта я не нашел (плохо искал?). Помимо ручной сборки (не-не-не-не, Девид Блейн, нет!) предложить могу только сборку с помощью Grunt/Gulp.

    Вот репозиторий, собранный мной из своего старого стартового. В нём оставлена автоматизация, ответственная за сборку SVG-спрайта, сжатие javascript, запуск локального сервера и автообновление. После вызова команды grunt в консоли, автомат соберёт спрайт, сожмёт javascript (нужен для работы с localStorage), запустит локальный сервер и откроет в браузере index.html .

    Для сжатия SVG использован imagemin (вот прекрасный аналог), для сборки спрайта использован grunt-svgstore. Уверен, что найти аналогичные задачи для Gulp не составит большого труда.

    Как вставить спрайт в разметку

    Внимание
    Информация о вставке несколько устарела. Сейчас я использую svg > use .

    Способов много. Поскольку полученный спрайт — строка текста, вставить её на страницу можно, как минимум, с уровня серверного программирования и с уровня автоматизации фронтенда.

    Я для себя выбрал способ с javascript и localStorage, т.к. это не вызывает зависимостей ни от чего, кроме включенного javascript на стороне клиента: поддержка localStorage очень хорошая. Именно этот способ и используется в демонстрационном репозитории. Есть, впрочем, небольшая оговорка: localStorage имеет ограничение в 5 Мбайт на домен.

    Способ описан в недавней статье Osvaldas Valutis и состоит в следующем: при срабатывании javascript происходит проверка: спрайт уже записан в localStorage? Если да, он берется оттуда и вставляется на страницу. Если нет, файл скачивается, записывается в localStorage и потом вставляется на страницу.

    Скрипт снабжён переменной revision , позволяющей контролировать кеширование спрайта. Если она изменится, спрайт будет перезагружен с сервера даже в том случае, если уже есть в localStorage.

    Привожу листинг кода с комментариями:

    ;(function(window, document) < 'use strict'; var file = 'img/sprite.svg', // путь к файлу спрайта на сервере revision = 1; // версия спрайта if (!document.createElementNS || !document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect) return true; var isLocalStorage = 'localStorage' in window && window\['localStorage'\] !== null, request, data, insertIT = function() < document.body.insertAdjacentHTML('afterbegin', data); >, insert = function() < if (document.body) insertIT(); else document.addEventListener('DOMContentLoaded', insertIT); >; if (isLocalStorage && localStorage.getItem('inlineSVGrev') == revision) < data = localStorage.getItem('inlineSVGdata'); if (data) < insert(); return true; >> try < request = new XMLHttpRequest(); request.open('GET', file, true); request.onload = function() < if (request.status >= 200 && request.status < 400) < data = request.responseText; insert(); if (isLocalStorage) < localStorage.setItem('inlineSVGdata', data); localStorage.setItem('inlineSVGrev', revision); >> > request.send(); > catch (e) <> >(window, document)); 

    В сжатом виде этот скрипт имеет очень небольшой размер.

    Заключение

    Если не нужен контроль с уровня CSS страницы, возможно лучшим решением будет вставлять небольшие (до 10 Кбайт) иконки прямо в CSS-файл, кодируя их в base64. В LESS даже встроенная функция для этого есть.

    Понравилась статья? Ставьте лайк, делитесь в соц. сетях или купите мне кофе.

    © Николай Громов. Внутренняя Монголия, вечность, лето.

    Способы генерации SVG-спрайтов на примере библиотеки svg-sprite

    Недавно я решал задачу организовать все SVG-файлы, используемые в проекте, в виде одного спрайта. До этого мне приходилось использовать самописное решение для такой задачи. На этот раз я решил воспользоваться популярной библиотекой svg-sprite, однако был сильно удивлен сколько разных способов создания она предлагает. Какой-то единой статьи где были разобраны все способы я не нашел, вся информация была разбросана по блогам и отдельным публикациям. Поэтому я решил собрать доступные в библиотеке способы для генерации спрайтов в одном месте, попутно проанализировав их преимущества и недостатки. Итак, поехали.

    Режим CSS

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

    Пример использования будет выглядеть так

    ei-archive

    и соответствующий CSS-код

    .svg-ei-archive < background: url("svg/sprite.css.svg") 12.5% 0 no-repeat; width: 50px; height: 50px; >

    Приятно особенностью svg-sprite является возможность задать в каком виде вы хотите получить стили — в виде чистого CSS или под препроцессоры LESS, SASS, Stylus. Немного поигравшись с шаблонами вывода, можно настроить вывод иконок в виде миксинов и генерировать код только тогда, когда он действительно нужен.

    Преимущества: метод просто и понятен каждому, кто до этого работал со спрайтами.

    Недостатки: невозможно указывать произвольные размеры, управлять цветом иконки. Не получится использовать в теге img

    Режим defs

    Этот режим использует тег defs, внутри которого объявляется элементы для дальнейшего использования. Каждому элементу присваивается id, по которому этот элемент будет вызван в теге use.

    Для того чтобы use из примера смог отрендерить элемент, SVG с defs должен быть также включен в тело документа. Стандартом допускается использовать внешний файлов в xlink:href , однако это не поддерживается всеми версиями Internet Explorer. К счастью, существует полифил svg4everybody, который решает эту проблему.

    Преимущества: Метод хорош тем, что предоставляет вам контроль над встраиваемой иконкой через CSS или атрибуты. Вы сможете легко менять ее размеры или цвет.

    Недостатки: Скорее всего потребуется некий механизм (макрос, хелпер, функция), который будет генерировать код вставки иконки. При генерации приходится указывать атрибут viewBox и размеры. Согласно спецификации элементы внутри defs не должны отображаться, поэтому нельзя будет визуально оценить как выглядят спрайты после оптимизации. Впрочем, svg-sprite помогает в этом и может создать файл с образцами всех иконок.

    В настоящее время использовать этот метод нет смысла, его улучшенной версией является Режим symbol.

    Режим symbol

    Принцип работы этого режима аналогичен предыдущему, но для задания элементов используется тег symbol. Этот элемент, согласно спецификации, может содержать атрибут viewBox , поэтому отпадает необходимость указывать его при использовании заданного символа. Также элементы, созданные с использованием symbol , отображаются при рендере, что упрощает визуальный контроль созданных спрайтов. В остальном применение этого метода не отличается от Режима defs.

    Преимущества: Аналогично предыдущему режиму (легкая смена цвета и размеров).

    Недостатки: Вам также понадобится вспомогательный механизм для вставки иконок. Однако, прочих недостатков метода defs этот режим лишен.

    Режим view

    В основе этого метода лежит возможность создания именованных областей просмотра для вашего документа в самом документе. Делается это с помощью тега view. Созданный таким образом спрайт можно использовать двумя способами.

    Как обычную фоновую картинку из первого режима

    ei-archive

    и как отдельное изображение, встраиваемое с помощью идентификаторов фрагмента (fragment identifiers)

     :root>svg :root>svg:target

    Соответственно, нам также доступны два способа использования.

    Как фоновая картинка

    .svg-ei-archive

    и как обычное изображение

     .el-archive < background: url("data:image/svg+xml;[icon-data]"); >

    Однако, на практике, решить эту задачу с наскока не удалось и вопрос требует более детального рассмотрения.

    В качестве заключения

    Представленные способы не являются единственными для создания SVG-спрайтов. Мне попадались и другие, более экзотические варианты. Какой способ лучше решаться придется вам исходя из того, какой набор иконок имеется и какие возможности для кастомизации вам нужны. На мой взгляд вполне production-ready можно считать режимы css и symbol.

    • Работа с иконками
    • Работа с векторной графикой

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *