SVG (Масштабируемая Векторная Графика)
SVG определяет векторную графику в XML, которую можно встраивать прямо в HTML-страницы. Графика SVG масштабируема, поэтому не теряет качества при увеличении или изменении размера, и SVG поддерживается всеми основными браузерами.
Что Такое SVG?
Ключевые моменты о SVG: расшифровывается как Scalable Vector Graphics (масштабируемая векторная графика); используется для определения векторной графики для веба; определяет графику в формате XML; каждый элемент и атрибут можно анимировать; это рекомендация PromptCookbook; и он интегрируется с другими стандартами, такими как CSS, DOM, XSL и JavaScript.
Элемент <svg>
Элемент <svg> — это контейнер для графики SVG. У SVG есть методы для рисования путей, прямоугольников, кругов, многоугольников, текста и многого другого.
Круг SVG
Круг с обводкой и заливкой.
Вывод: полная HTML-страница
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SVG-круг</title>
</head>
<body>
<svg width="100" height="100">
<circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
</svg>
</body>
</html>
Прямоугольник SVG
Прямоугольник с обводкой и заливкой.
Вывод: полная HTML-страница
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SVG-прямоугольник</title>
</head>
<body>
<svg width="400" height="120">
<rect x="10" y="10" width="200" height="100" stroke="red" stroke-width="6" fill="blue" />
</svg>
</body>
</html>
Прямоугольник с прозрачностью и скруглёнными углами
Скруглённый, полупрозрачный прямоугольник.
Вывод: полная HTML-страница
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Скруглённый SVG</title>
</head>
<body>
<svg width="400" height="180">
<rect x="50" y="20" rx="20" ry="20" width="150" height="150"
style="fill:red;stroke:black;stroke-width:5;opacity:0.5" />
</svg>
</body>
</html>
Звезда SVG
Пятиконечная звезда, нарисованная с помощью многоугольника.
Вывод: полная HTML-страница
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SVG-звезда</title>
</head>
<body>
<svg width="300" height="200">
<polygon points="100,10 40,198 190,78 10,78 160,198"
style="fill:lime;stroke:purple;stroke-width:5;fill-rule:evenodd;" />
</svg>
</body>
</html>
Эллипс с градиентом и текстом
Эллипс, залитый градиентом, с текстом поверх.
Вывод: полная HTML-страница
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SVG-градиент</title>
</head>
<body>
<svg height="130" width="500">
<defs>
<linearGradient id="grad1">
<stop offset="0%" stop-color="yellow" />
<stop offset="100%" stop-color="red" />
</linearGradient>
</defs>
<ellipse cx="100" cy="70" rx="85" ry="55" fill="url(#grad1)" />
<text fill="#ffffff" font-size="45" font-family="Verdana" x="50" y="86">SVG</text>
К сожалению, ваш браузер не поддерживает встроенный SVG.
</svg>
</body>
</html>
Различия Между SVG и Canvas
SVG — это язык для описания 2D-графики в XML, тогда как Canvas рисует 2D-графику «на лету» с помощью JavaScript. Поскольку SVG основан на XML, каждый элемент присутствует в DOM SVG, поэтому вы можете прикреплять обработчики событий JavaScript к фигурам. Каждая фигура SVG запоминается как объект, поэтому при изменении её атрибутов браузер автоматически перерисовывает её. Canvas, напротив, рисуется попиксельно и забывает графику после отрисовки, поэтому изменение её положения означает перерисовку всей сцены.
Сравнение SVG и Canvas
SVG не зависит от разрешения, поддерживает обработчики событий, имеет хороший рендеринг текста, но может быть медленным при сложной графике и не подходит для игр. Canvas зависит от разрешения, не поддерживает обработчики событий, имеет плохой рендеринг текста, позволяет сохранить результат как .png или .jpg и хорошо подходит для графически насыщенных игр.