‘symbol’ – даёт широкие возможности для хранения и многократного дальнейшего использования векторных изображений. Наличие собственного ‘viewBox’ и ‘preserveAspectRatio’ позволяют дополнительно позиционировать и масштабировать изображения.
‘symbol’ – является одновременно контейнерным и структурным элементом.
В качестве структурного элемента он может включать в себя в любом порядке и количестве: ‘defs’, ‘g’, svg’, ‘symbol’, ‘use’.
элементы анимации – ‘animate, ‘animateColor, ‘animateMotion, ‘animateTransform, ‘set
описательные элементы – ‘desc’, ‘metadata’, ‘title’
базовые фигуры – ‘circle’, ‘ellipse’, ‘line’, ‘path’, ‘polygon’, ‘polyline’, ‘rect’
градиенты – ‘linearGradient’, ‘radialGradient’
‘a’
‘altGlyphDef’
‘clipPath’
‘color-profile’
‘cursor’
‘filter’
‘font’
‘font-face’
‘foreignObject’
‘image’
‘marker’
‘mask’
‘pattern’
‘script’
‘style’
‘switch’
‘text’
‘view’
основные атрибуты – ‘id’, ‘xml:base’, ‘xml:lang’, ‘xml:space’
графические атрибуты событий – ‘onfocusin’, ‘onfocusout’, ‘onactivate’, ‘onclick’, ‘onmousedown’, ‘onmouseup’, ‘onmouseover’, ‘onmousemove’, ‘onmouseout’, ‘onload’
атрибуты представления – ‘alignment-baseline’, ‘baseline-shift’, ‘clip’, ‘clip-path’, ‘clip-rule’, ‘color’, ‘color-interpolation’, ‘color-interpolation-filters’, ‘color-profile’, ‘color-rendering’, ‘cursor’, ‘direction’, ‘display’, ‘dominant-baseline’, ‘enable-background’, ‘fill’, ‘fill-opacity’, ‘fill-rule’, ‘filter’, ‘flood-color’, ‘flood-opacity’, ‘font-family’, ‘font-size’, ‘font-size-adjust’, ‘font-stretch’, ‘font-style’, ‘font-variant’, ‘font-weight’, ‘glyph-orientation-horizontal’, ‘glyph-orientation-vertical’, ‘image-rendering’, ‘kerning’, ‘letter-spacing’, ‘lighting-color’, ‘marker-end’, ‘marker-mid’, ‘marker-start’, ‘mask’, ‘opacity’, ‘overflow’, ‘pointer-events’, ‘shape-rendering’, ‘stop-color’, ‘stop-opacity’, ‘stroke’, ‘stroke-dasharray’, ‘stroke-dashoffset’, ‘stroke-linecap’, ‘stroke-linejoin’, ‘stroke-miterlimit’, ‘stroke-opacity’, ‘stroke-width’, ‘text-anchor’, ‘text-decoration’, ‘text-rendering’, ‘unicode-bidi’, ‘visibility’, ‘word-spacing’, ‘writing-mode’
‘class’
‘style’
‘externalResourcesRequired’
‘preserveAspectRatio’
‘viewBox’
Структура ‘symbol’, размещение в SVG файле
‘symbol’ – сам по себе не отображается, подобно элементам, размещенных в секции <defs> …</defs>, но его можно вызвать один или несколько раз по уникальному идентификатору id=”..” с помощью команды <use>
1 2 3 4 |
<use x="0" y="0" width="24" height="24" xlink:href="#pie" /> <use x="24" y="0" width="24" height="24" xlink:href="#pie" /> <use x="0" y="24" width="24" height="24" xlink:href="#pie" /> <use x="24" y="24" width="24" height="24" xlink:href="#pie" /> |
x=”0″ y=”0″ – координаты левого верхнего угла прямоугольной области просмотра изображения клона ‘symbol’ .
Если координаты не указаны, то в этом случае они эквивалентны нулю.
Если не указаны ширина и высота области просмотра, то они равны 100%.
width=”100%” height=”100%”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?xml version="1.0" encoding="utf-8"?> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.0" width="256" height="256" viewBox="0 0 48 48" > <defs> </defs> <symbol id="pie" viewBox="0 0 48 48" preserveAspectRatio="xMidYMid meet"> <title>Pie chart</title> <desc>Draw a Pie chart by using the path</desc> <path fill="#00BCD4" d="M24,30c-3.3,0-6-2.7-6-6s2.7-6,6-6V5C13.5,5,5,13.5,5,24s8.5,19,19,19c4.4,0,8.5-1.5,11.8-4.1l-8-10.2 C26.7,29.5,25.4,30,24,30z"/> <path fill="#448AFF" d="M30,24h13c0-10.5-8.5-19-19-19v13C27.3,18,30,20.7,30,24z"/> <path fill="#3F51B5" d="M43,24H30c0,1.9-0.9,3.6-2.3,4.7l8,10.2C40.2,35.4,43,30,43,24z"/> </symbol> <use x="0" y="0" width="24" height="24" xlink:href="#pie" /> <use x="24" y="0" width="24" height="24" xlink:href="#pie" /> <use x="0" y="24" width="24" height="24" xlink:href="#pie" /> <use x="24" y="24" width="24" height="24" xlink:href="#pie" /> </svg> |
Обратите внимание, что ‘symbol’ расположен ниже секции <defs> …</defs>, но он может находиться и внутри секции, результат в обоих случаях одинаков – пока не будет использована команда <use>, графика не будет отрисовываться.
‘viewBox’ – служит для дополнительного масштабирования картинки, если размеры нас устраивают, то команду можно не указывать, размеры останутся как есть, мало того, если ошибетесь в семантике команды ‘viewBox’, то она будет проигнорирована без указания ошибки.
preserveAspectRatio=”xMidYMid meet” – этот атрибут можно не указывать, так это значение центрирования по ширине и высоте присвоено по умолчанию.
<title>….</title> и <desc>….</desc> – опциональные тэги, но будет хорошей практикой их полное заполнение, так как поисковики любят эти тэги и вам будет легче разбираться в файле шаблона комплекта иконок, где куча безымянных ‘symbol’. Ниже картинка с четырьмя клонами одного символа, код которого мы разобрали выше по тексту.
Использование ‘symbol’ из внешнего файла SVG
Технология такая – все иконки собираются в одном файле-шаблоне, при этом код каждой иконки упаковывается в свой отдельный символ с присвоением ему уникального идентификатора.
С помощью изменения параметров ‘viewBox’ов в шапке SVG файла и в ‘symbol’ масштабируется размер иконок. Ниже пример файла-шаблона. Этот способ удобен прежде всего тем, что прописав один раз уникальные идентификаторы по всему многостраничному проекту, в случае необходимости не нужно править везде. Иконки можно заменять, редактировать, изменяя код файла шаблона. Полная аналогия с CSS.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1" width="450" height="450" viewBox="0 0 1100 1100" > <symbol id="window-domain" viewBox="0 0 3300 3300" > <title>icon window-domain </title> <desc> below code icons - "window-domain" </desc> <path d=.... /> </symbol> <symbol id="internet-speed" viewBox="0 0 3300 3300" > <title>icon internet-speed </title> <desc> below code icons - "internet-speed" </desc> <path d=.... /> </symbol> <symbol id="secure-ssl" viewBox="0 0 3300 3300"> <title>icon isecure-ssl </title> <desc> below code icons - "secure-ssl" </desc> <path d=.... /> </symbol> </svg> |
Теперь остается только вызвать и разместить иконки внутри контейнера, роль которого выполняет ‘viewport’ – пользовательская область просмотра. В нашем случае это прямоугольник 450х450 пикселей.
1 2 3 4 5 6 7 |
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1" width="450" height="450" viewBox="0 0 1100 1100" xml:space="preserve"> <rect x="0" y="0" width="1100" height="1100" fill="#A8E2DB" /> <use xlink:href="symbol-sbor.svg#internet-speed" /> <use x="350" y="350" xlink:href="symbol-sbor.svg#secure-ssl" /> <use x="700" y="700" xlink:href="symbol-sbor.svg#window-domain" /> </svg> |
Команда вызова иконки – название файла.svg#имя уникального ‘symbol’.
1 |
<use x="700" y="700" xlink:href="symbol-sbor.svg#window-domain" /> |