Этот учебник описывает два способа создания спрайтов, содержащих много изображений.
Скачать исходники для статьи можно ниже
Однако он использует SVGS, а не более известные растровые методы.
SVG идеально подходят для логотипов, диаграмм и иконок по нескольким причинам:
Легко создавать SVG-файлы и манипулировать ими на клиенте или сервере.
В отличие от растровых изображений, SVG можно масштабировать до любого размера без потери качества.
В отличие от значков webfont, SVG остаются точными и могут применять несколько цветов, градиентов и даже сложные фильтры.
1. Спрайты изображений SVG
Несколько SVG-изображений также могут быть помещены в один SVG-файл, и на каждое из них можно ссылаться с помощью идентификатора, а не позиции пикселя.
Наиболее распространенным методом является определение отдельных изображений в SVG при помощи symbol.
Например, этот SVG содержит зеленый круг, красный квадрат и синий треугольник:
<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<symbol id="circle">
<circle cx="50" cy="50" r="45" stroke-width="5" stroke="#0f0" fill="#0f0" fill-opacity="0.5" />
</symbol>
<symbol id="square">
<rect y="5" x="5" width="90" height="90" stroke-width="5" stroke="#f00" fill="#f00" fill-opacity="0.5" />
</symbol>
<symbol id="triangle">
<path d="M20,7 L92,50 L6,93 z" stroke-width="5" stroke="#00f" fill="#00f" fill-opacity="0.5" />
</symbol>
</svg>
Один спрайт может использоваться любое количество раз на странице с SVG при помощи use:
<svg width="100" height="100"> <use xlink:href="./spriteuse.svg#circle" /> </svg> <svg width="100" height="100"> <use xlink:href="./spriteuse.svg#square" /> </svg> <svg width="100" height="100"> <use xlink:href="./spriteuse.svg#triangle" /> </svg>
К сожалению, старые браузеры, такие как IE11 и ниже, не загружают внешнее изображение. Лучший обходной путь-это встроить полный SVG в HTML-разметку и ссылаться на каждый спрайт, используя его цель. Например:
<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<symbol id="circle">
<circle cx="50" cy="50" r="45" stroke-width="5" stroke="#0f0" fill="#0f0" fill-opacity="0.5" />
</symbol>
<!-- further images -->
</svg>
<!-- display circle -->
<svg width="100" height="100">
<use xlink:href="#circle" />
</svg>
2. Стеки спрайтов SVG
Элемент use немного многословен и может использоваться только внутри svg (либо автономного изображения, либо встроенного в HTML). Он не может быть использован в качестве img
iframe
object фона CSS или в качестве фона CSS.
Метод стеков SVG, впервые задокументированный @simurai и @erikdahlstrom в 2012 году, обеспечивает один из способов обойти это ограничение. Отдельным спрайтам присваивается класс “sprite”, и встроенный CSS устанавливает для них значение display:none по умолчанию. Однако display:inline применяется, когда спрайт является целевым элементом:
<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<defs>
<style><![CDATA[
.sprite { display: none; }
.sprite:target { display: inline; }
]]></style>
</defs>
<g class="sprite" id="circle">
<circle cx="50" cy="50" r="45" stroke-width="5" stroke="#0f0" fill="#0f0" fill-opacity="0.5" />
</g>
<g class="sprite" id="square">
<rect y="5" x="5" width="90" height="90" stroke-width="5" stroke="#f00" fill="#f00" fill-opacity="0.5" />
</g>
<g class="sprite" id="triangle">
<path d="M20,7 L92,50 L6,93 z" stroke-width="5" stroke="#00f" fill="#00f" fill-opacity="0.5" />
</g>
</svg>
Если этот SVG имеет имя sprite.svg, вы можете добавить #target-name в URL-адрес, чтобы показать определенный спрайт. Например, URL sprite.svg#circle – адрес отображает слой с идентификатором “circle” в любом выбранном вами измерении. Поэтому он может быть использован в img:
<img /><iframe width="300" height="150"><object>
Или в качестве фона CSS:
.myelement {
background: url('./sprite.svg#circle');
}
Или в iframe :/iframe
<iframe src="./sprite.svg#circle"> Your browser does not support iframes. </iframe>
Или в object тег: /object
<object type="image/svg+xml" data="./sprite.svg#circle"> <img src="./fallback-image.png" /> </object>
Метод работает во всех браузерах, включая Internet Explorer 9 и выше.
Стеки SVG сегодня менее популярны, потому что встраивание SVG непосредственно в HTML стало лучшей практикой. Тем не менее, это может быть идеально, когда вам нужно много значков SVG и не нужно манипулировать ими непосредственно с помощью CSS или JavaScript.
PS: Красивых Вам и прибыльных сайтов!

