Однажды, бороздя просторы интернета, я наткнулся на изображение SVG. Я и раньше встречал этот формат, однако, не обращал внимания, считая, что это очередной новый формат, разработанный под какой-нибудь новый графический редактор. Однако, все оказалось гораздо интересней. SVG расшифровывается, как масштабируемая векторная графика. Это изображение в формате XML, то есть, его можно открыть в любом текстовом редакторе и в нём же менять (перерисовывать). Вообще, я бы не стал называть SVG изображением, это скорее язык разметки, который современными браузерами и SVG вьюерами преобразуется в изображение.
Преимущества SVG:
1. Достаточно маленький размер файла.
2. Масштабируемость. То есть при изменении размера изображения оно не меняет своего качества.
3. Открытость формата. Возможность редактирования даже в текстовом редакторе.
С появлением поиска SVG в Google пропала проблема индексации SVG.
Самым большим недостатком SVG является то, что старые браузеры не понимают этот формат. Для просмотра в старых браузерах необходимо устанавливать плагин. К тому же, по-моему, невозможно изменить формат привычных бинарных изображений в настоящий SVG, возможно лишь внедрение таких изображений внутрь SVG.
Для создания SVG необходимо знать, как показать браузеру, что это именно SVG, а также теги и их атрибуты, которые и будут указывать браузеру или просмотрщику то, что надо прорисовать.
Первая строчка SVG файла – это всегда
<?xml version="1.0" standalone="no"?>
Затем можно указать DTD. Но это не обязательно.
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
Тег SVG
Затем идет тег svg.
<svg xmlns=http://www.w3.org/2000/svg
xmlns:xlink="http://www.w3.org/1999/xlink">
Атрибуты тега svg:
- xmlns [:prefix] – стандартный XML атрибут для обозначения именного пространства XML (XML Namespace);
- version – указывает, какая версия языка SVG используется в документе. Для SVG 1.1 надо указать 1.1;
- baseProfile – описывает языковой профиль SVG, который автор считает необходимым для корректного отображения. Этот атрибут не влияет на обработку события а носит информационный характер;
- x – координата по оси X элемента svg;
- y – координата по оси Y элемента svg;
- width – ширина квадратной области, в которую будет помещен svg;
- height – высота квадратной области, в которую будет помещен svg.
Выше мною были описаны обязательные теги. Ниже речь пойдет о тегах, которые непосредственно создают изображение.
Line
Line – этот элемент определяет отрезок с началом в одной точке и концом в другой.
Атрибуты line:
- x1 – координата по оси X точки начала отрезка;
- y1 – координата по оси Y точки начала отрезка;
- x2 – координата по оси X точки конца отрезка;
- y2 – координата по оси Y точки конца отрезка.
Использование line:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="400" height="400 xmlns="http://www.w3.org/2000/svg"
version="1.1">
<desc>Example line01 - lines expressed in user coordinates</desc>
<line x1="100" y1="300" x2="300" y2="100" stroke-width="5" />
</svg>
Без указания значения атрибута stroke-width, который определяет толщину линии, линия не видна.
Rect
Rect – этот элемент определяет прямоугольник. Прямоугольник со скругленными углами определяется значениями атрибутов rx и ry.
Атрибуты rect:
- x – кооордината по оси X стороны прямоугольника, которая имеет меньшее значение в текущей системе координат;
- y – кооордината по оси Y стороны прямоугольника, которая имеет меньшее значение в текущей системе координат;
- width – ширина прямоугльника;
- height – высота прямоугольника;
- rx – радиус скругления углов прямоугольника по оси X;
- ry – радиус скругления углов прямоуголmника по оси Y.
Ипользование rect:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
xmlns="<a href="http://www.w3.org/2000/svg">
http://www.w3.org/2000/svg</a>" version="1.1">
<desc>Example rect01 - rectangle with sharp corners</desc>
<!-- Show outline of canvas using rect element -->
<rect x="1" y="1" width="1198" height="398"
fill="none" stroke="blue" stroke-width="2"/>
<rect x="400" y="100" width="400" height="200"
fill="yellow" stroke="navy" stroke-width="10" />
</svg>
Circle
Circle – определяет круг с указанием координат центра и радиуса.
атрибуты circle:
- cx – координата по оси X для центра круга;
- cy – координата по оси Y для центра круга;
- r – радиус круга.
Использование circle:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
xmlns="http://www.w3.org/2000/svg" version="1.1">
<desc>Example circle01 - circle filled with red and
stroked with blue</desc>
<!-- Show outline of canvas using rect element -->
<rect x="1" y="1" width="1198" height="398"
fill="none" stroke="blue" stroke-width="2"/>
<circle cx="600" cy="200" r="100"
fill="red" stroke="blue" stroke-width="10" />
</svg>
Ellipse
Ellipse – определяет овал, у которого указан центр и два радиуса.
атрибуты elipse:
- cx – координата центра овала по оси X;
- cy – координата центра овала по оси Y;
- rx – радиус окружности по оси X;
- ry – радиус окружности по оси Y.
Использование ellipse:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
xmlns="http://www.w3.org/2000/svg" version="1.1">
<desc>Example ellipse01 - examples of ellipses</desc>
<!-- Show outline of canvas using rect element -->
<rect x="1" y="1" width="1198" height="398"
fill="none" stroke="blue" stroke-width="2" />
<g transform="translate(300 200)">
<ellipse rx="250" ry="100"
fill="red" />
</g>
<ellipse transform="translate(900 200) rotate(-30)"
rx="250" ry="100"
fill="none" stroke="blue" stroke-width="20" />
</svg>
Poliline
Poliline – это элемент, определяющий несколько соединенных прямых отрезков.
Атрибуты poliline:
- points – список точек, которые будут соединены приямыми линиями.
Использование poliline:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
xmlns="http://www.w3.org/2000/svg" version="1.1">
<desc>Example polyline01 - increasingly larger bars</desc>
<!-- Show outline of canvas using rect element -->
<rect x="1" y="1" width="1198" height="398"
fill="none" stroke="blue" stroke-width="2" />
<polyline fill="none" stroke="blue" stroke-width="10"
points="50,375
150,375 150,325 250,325 250,375
350,375 350,250 450,250 450,375
550,375 550,175 650,175 650,375
750,375 750,100 850,100 850,375
950,375 950,25 1050,25 1050,375
1150,375" />
</svg>
Polygon
Polygon – это элемент определяющий замкнутую фигуру, состоящую из соединенных прямых линий.
Атрибуты polygon:
- points – точки, которые будут соединены в многоугольник или другую фигуру.
Использование polygon:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
xmlns="http://www.w3.org/2000/svg" version="1.1">
<desc>Example polygon01 - star and hexagon</desc>
<!-- Show outline of canvas using rect element -->
<rect x="1" y="1" width="1198" height="398"
fill="none" stroke="blue" stroke-width="2" />
<polygon fill="red" stroke="blue" stroke-width="10"
points="350,75 379,161 469,161 397,215
423,301 350,250 277,301 303,215
231,161 321,161" />
<polygon fill="lime" stroke="blue" stroke-width="10"
points="850,75 958,137.5 958,262.5
850,325 742,262.6 742,137.5" />
</svg>
В этой статье описаны самые простые фигуры, которые могут быть созданы средствами SVG. Существуют и более сложные, например, path, а также можно объединять простые объекты в группы посредством элемента g. Кроме того в этой статье не описано большое количество атрибутов, которые можно применить почти ко всем элементам и, которые позволяют настраивать внешний вид элементов SVG.