SVG — это аббревиатура, и расшифровывается она как масштабируемая векторная графика (анг. Scalable Vector Graphics).
SVG входит в подмножество расширяемого языка разметки XML и предназначен для описания двумерной векторной или смешанной
векторно-растровой графики в формате XML.
SVG поддерживает как статическую, так и анимированную интерактивную графику или, иными словами, декларативную и скриптовую.
SVG не поддерживает описание трехмерных объектов (здесь не следует путать с имитацией трехмерности при помощи различных приемов).
Что необходимо знать, чтобы продолжить изучение данного Учебника SVG?
Прежде чем продолжить, вы должны обладать знаниями в следующих областях:
• HTML
• Базовый XML
Если вы чувствуете, что вам необходимо освежить свои знания в этих областях, то вы можете ознакомиться с соответствующими разделами
нашего сайта.
• Введение в SVG
• SVG в HTML
• SVG прямоугольник
• SVG круг
• SVG эллипс
• SVG прямая линия
• SVG многоугольник
• SVG ломаная линия
• SVG контур
• SVG текст
• SVG свойство stroke
• SVG фильтры
• SVG градиенты
• Список SVG элементов
Введение в SVG
Что такое SVG?
• SVG расшифровывается как масштабируемая векторная графика (анг. Scalable Vector Graphics)
• SVG используется, чтобы определять векторную графику для сети
• SVG определяет графические объекты в формате XML
• SVG графика НЕ теряет в качестве при изменении размера или увеличении
• Каждый элемент и каждый атрибут в SVG файлах может быть анимирован
• SVG является рекомендацией консорциума W3C
• SVG интегрируется с другими стандартами консорциума W3C, такими как DOM и XSL
Преимущества SVG
SVG имеет следующие преимущества над другими графическими форматами (как JPEG и GIF):
• SVG изображения могут создаваться и редактироваться в любом текстовом редакторе
• SVG изображения могут индексироваться, скриптоваться и сжиматься, по ним можно осуществлять поиск
• SVG изображения легко масштабируются
• SVG изображения могут распечатываться в высоком качестве при любом разрешении
• Любую часть SVG изображения можно увеличивать без потери качества картинки
• SVG — это открытый стандарт
• SVG файлы — это чистый XML код
Главным конкурентом SVG является технология Flash. Тем не менее, самым большим преимуществом SVG над Flash является его
совместимость с другими стандартами (например, XSL и DOM). Flash же основывается на проприетарной технологии и не является
открытым стандартом.
SVG в HTML
В HTML5 вы можете включать элемент SVG непосредственно в HTML код веб-документа.
Включайте SVG непосредственно в HTML код страницы
Ниже приводится пример простой SVG графики:
<html>
<body>
</svg>
</body>
</html>
Объяснения SVG кода:
• SVG изображение начинается с элемента <svg>
• Атрибуты width и height элемента <svg> определяют ширину и высоту SVG изображения
• Элемент <circle> используется для рисования круга
• Атрибуты cx и cy определяют координаты X и Y центра круга. Если атрибуты cx и cy не определяются, то координаты центра круга
устанавливаются в значения (0, 0)
• Атрибут r определяет радиус круга
• Атрибуты stroke и stroke-width отвечают за то, как будет выводиться фигура. В данном примере устанавливается, что круг должен
отображаться линией зеленого цвета толщиной 4px
• Атрибут fill определяет цвет заливки круга. В данном примере задан желтый цвет
• Закрывающий тег </svg> завершает описание SVG изображения
Примечание: Так как SVG декларация использует формат XML, все элементы должны быть закрыты в соответствии со спецификацией
XML!
SVG прямоугольник
В SVG есть несколько предопределенных элементов, позволяющих разработчику рисовать различные фигуры:
• Прямоугольник <rect>
• Круг <circle>
• Эллипс <ellipse>
• Прямая линия <line>
• Ломаная линия <polyline>
• Многоугольник <polygon>
• Контур <path>
В следующих главах будет рассмотрен каждый элемент, и начнем мы с прямоугольника.
SVG код:
<svg width="400" height="110">
</svg>
Объяснение:
• Атрибуты width и height элемента <rect> определяют ширину и высоту прямоугольника
• Атрибут style определяет CSS свойства прямоугольника
• CSS свойство fill определяет цвет заливки прямоугольника
• CSS свойство stroke-width определяет толщину рамки прямоугольника
• CSS свойство stroke определяет цвет рамки прямоугольника
Пример №2
В следующем примере используются новые атрибуты:
SVG код:
<svg width="400" height="180">
style="fill:blue;stroke:pink;stroke-width:5;fill-opacity:0.1;stroke-opacity:0.9" />
</svg>
Объяснение:
• Атрибут x определяет позицию прямоугольника слева (например, x="50" помещает прямоугольник в 50px от левого отступа)
• Атрибут y определяет позицию прямоугольника сверху (например, y="20" помещает прямоугольник в 20px от верхнего отступа)
• CSS свойство fill-opacity определяет прозрачность цвета заливки (допустимый диапазон: от 0 до 1)
• CSS свойство stroke-opacity определяет прозрачность цвета прорисовки (допустимый диапазон: от 0 до 1)
Пример №3
Определяем прозрачность всего элемента:
SVG код:
<svg width="400" height="180">
style="fill:blue;stroke:pink;stroke-width:5;opacity:0.5" />
</svg>
Объяснение:
• CSS свойство opacity определяет значение прозрачности для всего элемента (допустимый диапазон: от 0 до 1)
Пример №4
В последнем примере создадим прямоугольник с закругленными углами:
SVG код:
<svg width="400" height="180">
style="fill:red;stroke:black;stroke-width:5;opacity:0.5" />
</svg>
Объяснение:
• Атрибуты rx и ry закругляют углы прямоугольника
SVG круг
Чтобы нарисовать круг, используется элемент <circle>:
SVG код:
<svg height="100" width="100">
</svg>
Объяснение:
• Атрибуты cx и cy определяют координаты X и Y центра круга. Если атрибуты cx и cy не определяются, то центр круга устанавливается
в координаты (0,0)
• Атрибут r определяет радиус круга
SVG эллипс
Чтобы создать эллипс, используется элемент <ellipse>.
Эллипс имеет достаточно близкое отношение к кругу. Разница заключается в том, что у эллипса радиусы по горизонтальной и вертикальной
оси разные, в то время как у круга они одинаковые.
Пример №1
Создадим эллипс:
SVG код:
<svg height="140" width="500">
<ellipse cx="200" cy="80" rx="100" ry="50"
style="fill:yellow;stroke:purple;stroke-width:2" />
</svg>
Объяснение:
• Атрибут cx определяет координату X центра эллипса
• Атрибут cy определяет координату Y центра эллипса
• Атрибут rx определяет горизонтальный радиус
• Атрибут ry определяет вертикальный радиус
Пример №2
Создадим три эллипса, расположенные друг над другом:
SVG код:
<svg height="150" width="500">
</svg>
Пример №3
В следующем примере скомбинируем два эллипса (желтый и белый):
SVG код:
</svg>
</svg>
Объяснение:
• Атрибут x1 определяет координату X стартовой точки линии
• Атрибут y1 определяет координату Y стартовой точки линии
• Атрибут x2 определяет координату X конечной точки линии
• Атрибут y2 определяет координату Y конечной точки линии
SVG многоугольник
Элемент <polygon> используется для создания графической фигуры, содержащей как минимум три стороны.
Многоугольники создаются из прямых линий, при этом контур "закрывается" (все линии связаны).
Пример №1
Создаем многоугольник с тремя сторонами:
SVG код:
<svg height="210" width="500">
</svg>
Объяснение:
• Атрибут points определяет координаты X и Y каждого угла многоугольника
Пример № 2
Создаем многоугольник с четырьмя сторонами:
SVG код:
<svg height="250" width="500">
</svg>
Пример №3
Нарисуем звезду при помощи элемента <polygon>:
SVG код:
<svg height="210" width="500">
style="fill:lime;stroke:purple;stroke-width:5;fill-rule:nonzero;" />
</svg>
Пример №4
Изменим свойство fill-rule на "evenodd":
SVG код:
<svg height="210" width="500">
style="fill:lime;stroke:purple;stroke-width:5;fill-rule:evenodd;" />
</svg>
style="fill:none;stroke:black;stroke-width:3" />
</svg>
Объяснение:
• Атрибут points определяет координаты X и Y каждого "перелома" линии
Пример №2
Другой пример фигуры, состоящей только из прямых линий:
SVG код:
<svg height="180" width="500">
style="fill:white;stroke:red;stroke-width:4" />
SVG код:
<svg height="210" width="400">
</svg>
Пример №2
Кривые Безье используются для моделирования плавных кривых линий, масштаб которых можно бесконечно увеличивать или уменьшать.
Обычно, выбирается две конечных точных точки и одну или две контрольных. Кривую Безье с одной контрольной точкой называют
квадратичной кривой Безье, а с двумя контрольными точками — кубической.
В следующем примере создается кубическая кривая Безье. Здесь A и C — соответственно начальная и конечная точки, B — контрольная
точка:
SVG код:
<svg height="400" width="450">
fill="none" />
</g>
text-anchor="middle">
</g>
</svg>
Сложно? ДА!!!! Именно из-за сложности при рисовании контуров и рекомендуется использовать специальный SVG редактор для создания
сложной графики.
SVG текст
Для вывода текста используется элемент <text>.
Пример №1
Выводим текст:
SVG код:
<svg height="30" width="200">
</svg>
Пример №2
Повернем текст:
SVG код:
<svg height="60" width="200">
</svg>
Пример №3
Элемент <text> может содержать любое число подгрупп, состоящих из элемента <tspan>. Каждый элемент <tspan> может определять свои
данные о формате и позиционировании.
Текст на нескольких строках (с элементом <tspan>):
.
SVG код:
<svg height="90" width="200">
</text>
</svg>
Пример №4
Текст как ссылка (с элементом <a>):
SVG код:
</a>
</svg>
SVG код:
<svg height="80" width="300">
<g fill="none">
<path stroke="red" d="M5 20 l215 0" />
</g>
</svg>
SVG код:
<svg height="80" width="300">
</g>
</svg>
SVG код:
<svg height="80" width="300">
</g>
</svg>
SVG код:
<svg height="80" width="300">
</g>
</svg>
SVG фильтры
SVG фильтры позволяют добавлять различные графические эффекты SVG графике.
<defs> и <filter>
Все SVG фильтры определяются внутри элемента <defs>. Элемент <defs> это сокращение от английского слова "definitions" (пер.
"определения") и содержит определение специальных элементов (таких как фильтры).
Элемент <filter> предназначен для определения SVG фильтра. У элемента <filter> должен быть задан обязательный атрибут id, который
идентифицирует фильтр. Графический объект затем указывает на этот фильтр.
Эффект размытия
Фильтр <feGaussianBlur>.
Пример
Используем элемент <feGaussianBlur>, чтобы создать эффект размытия:
SVG код:
<svg height="110" width="110">
<defs>
</filter>
</defs>
</svg>
Объяснение:
• Атрибут id элемента <filter> определяет уникальное имя фильтра
• Эффект размытия создается при помощи элемента <feGaussianBlur>
• Часть in="SourceGraphic" определяет, что эффект создается для всего элемента
• Атрибут stdDeviation определяет размер размытия
• Атрибут filter элемента <rect> связывает ссылкой элемент с фильтром "f1"
<defs>
</filter>
</defs>
</svg>
Объяснение:
• Атрибут id элемента <filter> определяет уникальное имя фильтра
• Атрибут filter элемента <rect> связывает ссылкой элемент с фильтром "f1"
Теперь сдвинутое изображение делаем размытым (при помощи элемента <feGaussianBlur>):
SVG код:
<svg height="140" width="140">
<defs>
</filter>
</defs>
</svg>
Объяснение:
• Атрибут stdDeviation элемента <feGaussianBlur> определяет размер размытия
Теперь делаем тень черной:
SVG код:
<svg height="140" width="140">
<defs>
</filter>
</defs>
</svg>
Объяснение:
• Значение атрибута in элемента <feOffset> изменено на "SourceAlpha", которое использует альфа-канал вместо всего RGBA набора
пикселя для создания размытия
Теперь обработаем тень как цвет:
SVG код:
<svg height="140" width="140">
<defs>
</filter>
</defs>
</svg>
Объяснение:
• Фильтр <feColorMatrix> используется для трансформации цветов сдвинутого изображения в сторону черного цвета. Три значения '0.2'
в матрице умножаются на значения красного, зеленого и синего каналов. Уменьшение их значений сдвигает цвет в сторону черного
(значение черного цвета = 0)
SVG градиенты
Градиент — это плавный переход одного цвета в другой. При этом, к одному и тому же элементу могут применяться несколько цветовых
переходов.
В SVG существует два основных типа градиентов — линейный и радиальный, которые определяются при помощи специальных элементов.
SVG элементы, определяющие градиенты, должны располагаться внутри элемента <defs>. Элемент <defs> это сокращение от английского
слова "definitions" (пер. "определения") и содержит определение специальных элементов (таких как градиенты).
<defs>
</linearGradient>
</defs>
</svg>
Объяснение:
• Атрибут id элемента <linearGradient> определяет уникальное имя градиента
• Атрибуты x1, x2, y1, y2 элемента <linearGradient> определяют начальную и конечную позицию градиента
• Цветовой диапазон градиента может быть составлен из двух или более цветов. Каждый цвет задается при помощи тега <stop>.
Атрибут offsetиспользуется, чтобы определить, где цвет градиента начинается и заканчивается
• Атрибут fill элемента <ellipse> связывает ссылкой элемент с градиентом
Пример №2
Создадим эллипс с вертикальным линейным градиентом от желтого цвета к красному:
SVG код:
<svg height="150" width="400">
<defs>
</linearGradient>
</defs>
</svg>
Пример №3
Создадим эллипс с горизонтальным линейным градиентом от желтого цвета к красному и добавим текст внутри эллипса:
SVG код:
<svg height="150" width="400">
<defs>
</linearGradient>
</defs>
</svg>
Объяснение:
• Элемент <text> добавляет текст
SVG код:
<svg height="150" width="500">
<defs>
</radialGradient>
</defs>
</svg>
Объяснение:
• Атрибут id элемента <radialGradient> определяет уникальное имя градиента
• Атрибуты cx, cy и r определяют внешний круг, fx и fy определяют внутренний круг
• Цветовой диапазон градиента может быть составлен из двух или более цветов. Каждый цвет задается при помощи тега <stop>.
Атрибут offsetиспользуется, чтобы определить, где цвет градиента начинается и заканчивается
• Атрибут fill элемента <ellipse> связывает ссылкой элемент с градиентом
Пример №2
Создадим еще один эллипс с радиальным градиентом от белого цвета к синему:
SVG код:
<svg height="150" width="500">
<defs>
</radialGradient>
</defs>
</svg>
Список SVG элементов
Элемент Описание Атрибуты
<animateMotion> Заставляет указанный элемент двигаться по заданной траектории calcMode="метод интерполяции. Принимает
значение 'discrete', 'linear', 'paced' или 'spline'"
path="траектория движения"
keyPoints="как далеко по траектории движения
должен сдвигаться объект за заданный отрезок
времени"
rotate="задает трансформацию поворота"
xlink:href="ссылка URI на элемент <path>,
который определяет траекторию движения"
<animateTransform> Анимирует атрибут трансформации на заданном элементе. Это by="относительное значение сдвига"
позволяет анимации контролировать трансляцию, from="начальное значение"
масштабирование, поворот и/или перекос to="конечное значение"
type="тип трансформации. Может быть
'translate', 'scale', 'rotate', 'skewX', 'skewY'"
<clipPath> Обрезка состоит в том, чтобы скрыть из вида то, что в обычных clip-path="контур обрезки, на который
условиях прорисовывается. Шаблон, который определяет, что ссылаются, пересекается с ссылающимся
рисовать, а что нет, называется контур обрезки контуром обрезки"
clipPathUnits="Может быть 'userSpaceOnUse'
или 'objectBoundingBox'. Второе значение
делает дочерние элементы частью
ограничивающего объект блока, использующего
Элемент Описание Атрибуты
<color-profile> Определяет описание цветового профиля (когда стили документа local="уникальный ID сохраненного локально
определяются при помощи CSS) цветового профиля"
name=""
rendering-intent="auto | perceptual | relative-
colorimetric | saturation | absolute-colorimetric"
xlink:href="URI на ICC ресурс профиля"
<cursor> Определяет платформо-независимый пользовательский курсор x="x-координата верхнего левого угла курсора
(по умолчанию 0)"
y="y-координата верхнего левого угла курсора
(по умолчанию 0)"
xlink:href="URI изображения, используемого
как курсор"
<feBlend> Совмещает два объекта в соответствии с заданным режимом mode="режим смешивания изображений: normal
смешивания | multiply | screen | darken | lighten"
in="определяет ввод для заданного примитива
фильтра: SourceGraphic | SourceAlpha |
BackgroundImage | BackgroundAlpha | FillPaint |
StrokePaint | <filter-primitive-reference>"
in2="вводная второго изображения для
операции смешивания"
font-face-format
font-face-name
font-face-src
font-face-uri
foreignObject
hkern
<linearGradient> Определяет линейный градиент. Линейный градиент заполняет id="уникальный идентификатор. Требуется для
объект, используя вектор направления, и может быть обращения к этому шаблону"
горизонтальным, вертикальным или угловым gradientUnits="'userSpaceOnUse' или
'objectBoundingBox'. Используйте область
видимости или объект, чтобы определить
относительную позицию точек вектора. (по
Элемент Описание Атрибуты
умолчанию 'objectBoundingBox')"
gradientTransform="трансформация,
применяемая к градиенту"
x1="x начальной точки вектора градиента
(число или % - 0% по умолчанию)"
y1="y начальной точки вектора градиента (0%
по умолчанию)"
x2="x конечной точки вектора градиента (100%
по умолчанию)"
y2="y конечной точки вектора градиента (0% по
умолчанию)"
spreadMethod="'pad' или 'reflect' или 'repeat'"
xlink:href="ссылка на другой градиент, чьи
атрибуты используются как атрибуты по
умолчанию. Работает рекурсивно"
missing-glyph
mpath
<pattern> Определяет паттерн. Сначала задаются координаты и размер id="уникальный идентификатор паттерна."
показываемой области видимости. Затем в паттерн добавляются Обязателен.
графические фигуры. Когда достигается край области видимости, patternUnits="'userSpaceOnUse' или
паттерн повторяется 'objectBoundingBox'. Задает систему координат
паттерна. Первое значение определяет
координаты относительно всей области
видимости, второе относительно объекта,
использующего паттерн."
patternContentUnits="Устанавливает систему
координат содержимого паттерна.
'userSpaceOnUse' или 'objectBoundingBox'"
patternTransform="позволяет добавить
трансформацию паттерна"
x="положение паттерна относительно верхнего
левого угла по горизонтали (по умолчанию 0)"
y="положение паттерна относительно верхнего
левого угла по горизонтали (по умолчанию 0)"
Элемент Описание Атрибуты
<polygon> Определяет многоугольник - графическую фигуру, у которой есть points="вершины многоугольника. Число
по меньшей мере три стороны. вершин должно быть четным". Обязателен.
fill-rule="часть презентационных атрибутов
заливки"
+ презентационные атрибуты:
Color, FillStroke, Graphics, Markers
0 до 1)"
<svg> Создает фрагмент SVG документа x="x верхнего левого угла (по умолчанию 0)"
y="y верхнего левого угла (по умолчанию 0)"
width="ширина svg фрагмента (по умолчанию
100%)"
height="высота svg фрагмента (по умолчанию
100%)"
viewBox="точки "видимости" в этой SVG
области рисования. 4 значения, разделенных
пробелом или запятой. (мин x, мин y, ширина,
высота)"
preserveAspectRatio="'none' или любая из 9
комбинаций вида 'xVALYVAL', где VAL это
'min', 'mid' или 'max'. (по умолчанию
xMidYMid)"
zoomAndPan="'magnify' или 'disable'. Значение
'magnify' позволяет пользователям
панаромировать и увеличивать файл (по
умолчанию magnify)"
xml="внешний <svg> элемент должен
устанавливать SVG и свое пространство имен:
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:space="preserve""
+ презентационные атрибуты:
Элемент Описание Атрибуты
Все
switch
symbol
textPath
<tref> Ссылается на элемент <text> в SVG документе и повторно Идентичны элементу <text>
использует его
<tspan> Идентичен элементу <text>, но при этом может быть вложен в тег Идентичны элементу <text>
<text> и в сам себя + дополнительно:
xlink:href="ссылка на элемент <text>"
<use> Использует URI, чтобы ссылаться на теги <g>, <svg> или другие x="координата x верхнего левого угла
графические элементы с уникальным атрибутом id и копировать клонированного элемента"
его. Копия будет только ссылкой на оригинал, таким образом y="координата y верхнего левого угла
существовать в документе будет только оригинал. Любые клонированного элемента"
изменения в оригинале будут отражаться во всех его копиях. width="ширина клонированного элемента"
height="высота клонированного элемента"
xlink:href="URI ссылка на клонированный
Элемент Описание Атрибуты
элемент"
+ презентационные атрибуты:
Все
view
vkern