Что такое спрайты изображений?
Использование спрайтов изображений было хорошей практикой на протяжении многих лет. Если вам требуется несколько регулярно используемых изображений, совместите их в одном изображении, а не размещайте в отдельных файлах.
Например так:
Этот пример содержит восемь значков 24×24 в одном файле размером 192×24 пикселей. Файл может быть небольшого размера и для того, чтобы использовать любой значок из набора требуется только один HTTP-запрос. Загрузка восьми отдельных значков вряд ли займет намного больше времени при использовании HTTP/2, но изображения могут появляться в разное время и будут кэшироваться только в процессе первого использования.
Если вы хотите показать крайний правый значок с изображением принтера, сделайте его фоном элемента, используя следующий CSS:
CSS
Для расчета положения пикселей и генерации кода CSS можно использовать различные инструменты: CSS Sprites Generator, cssspritestool.com, Spite Cow
Спрайты изображений SVG
Несколько изображений SVG также могут быть помещены в один файл SVG, и на каждое из них можно ссылаться по идентификатору, а не по позиции пикселя.
Наиболее распространенный метод - размещение отдельных изображений в элементе <symbol>. Например, этот SVG содержит зеленый круг, красный квадрат и синий треугольник:
HTML
Одно спрайт-изображение можно использовать на странице любое количество раз с помощью SVG <use>:
HTML
К сожалению, старые браузеры, такие как IE11 и ниже, не загружают внешний файл. Лучшее решение - встроить полный SVG в разметку HTML и ссылаться на каждый спрайт, используя его идентификатор. Например:
HTML
Стеки SVG-спрайтов
Элемент <use> немного громоздкий и может использоваться только внутри <svg> (отдельного изображения, либо встроенного в HTML). Он не может быть использован в тегах <img>, <iframe>, <object> или в качестве фона в CSS. Методика SVG-стеков, впервые предложенная @simurai и @erikdahlstrom в 2012 году, позволяет обойти это ограничение. Отдельным спрайтам назначается класс sprite, а встроенный CSS устанавливает для этого класса по умолчанию display: none;.
Однако, когда нужное изображение из спрайта отображается (:target), срабатывает правило display: inline. Пример:
HTML
Если этот SVG называется sprite.svg, вы можете добавить #target-name к URL-адресу, чтобы отобразить конкретный спрайт. Например, URL sprite.svg#circle отображает изображение с id="circle" любого нужного вам размера. Поэтому его можно использовать в <img>:
HTML
Или в качестве фона CSS:
CSS
Или в <iframe>:
HTML
Или в теге <object>:
HTML
Метод работает во всех браузерах, включая Internet Explorer 9 и выше.
SVG Стеки на данный момент менее популярны, потому что передовой практикой стало встраивание SVG непосредственно в HTML. Однако это может быть идеальным решением, если вам нужно много значков SVG, но не нужно напрямую управлять ими с помощью CSS или JavaScript.
Оригинал статьи: How to Use SVG Image Sprites
Автор статьи: Craig Buckler
Перевод: Земсков Матвей