Грузится

Настройки


Tools

Графика в SVG

SVG (Scalable Vector Graphics) — язык разметки векторной графики. Предназначен для описания векторной и смешанной (векторно-растровой) двухмерной графики, поддерживает анимацию и интерактивность.

Особенности

Плюсы:
  • Размер. Как правило, иконки, шрифты, градиенты, схемы в векторе занимают меньше места, чем в растре;
  • Гибкость. Векторную графику гораздо легче редактировать, чем растровую;
  • Масштабируемость. Наглядно.
Минусы:
  • Ограничения векторной графики. Например, сомнительно использование svg для отображения пейзажа. Во-первых, могут возникнуть проблемы с переводом из растра в вектор, а во-вторых, очень быстро увеличивается размер файла и скорость его отрисовки браузером, если он состоит из большого количества мелких деталей;
  • Отсутствие поддержки старых браузеров. Данный минус легко обходится при помощи дублирования svg картинок растровыми, специально для недобраузеров.
    UPD 2022: Это вообще уже не актуально.

Для работы с svg идеально подходит  Adobe Illustrator.

Варианты использования на сайте

Через <object>
<object type="image/svg+xml" data="image.svg">
  <img src="image.png">
</object>

Отличный вариант, который сразу включает в себя тег <img>, к которому перейдёт браузер не понимающий тег <object>.

Также этот вариант прекрасно работает с кешированием и имеет самую большую поддержку браузерами.

Минус — стили будут работать только внутри SVG файла.

Через <iframe>
<iframe src="image.svg">
  <img src="image.png">
</iframe>

Неплохой вариант, если нужно отделить SVG код от кода страницы.

Через <img>
<img src="image.svg">

Недостатки — отсутствует поддержка в старых браузерах, нет возможности использовать интерактивность (например, анимацию или ссылки) внутри SVG файла, кроме того некоторые браузеры не используют стили, которые определены в отдельном файле.

inline SVG
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Embedded SVG</title>
</head>
<body>
<h1>Embedded SVG</h1>
 
<!-- SVG code -->
<svg width="300px" height="300px" xmlns="http://www.w3.org/2000/svg">
    <text x="10" y="50" font-size="30">My SVG</text>
</svg>
 
</body>
</html>

Такой вариант возможен для небольших SVG изображений, т.к. «засоряет» HTML код страницы (банально, станет сложнее в нём ориентироваться), а также не поддерживает кэширование.

Как фоновое изображение
.AnyElement {
    background-image: url(image.svg);
}

Как и при использовании тега <img> SVG станет обычным статичным изображением, любая интерактивность в котором будет отключена.

Структура

Синтаксис
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

В некоторых случаях содержание объявления DOCTYPE может быть источником ошибок в Firefox. В этом случае можно использовать такой код:

<!DOCTYPE svg [ 
    <!-- опционально -->   ]>

Далее идет корневой тег, описывающий свойства SVG:

<svg version="1.1"
     baseProfile="full"
     xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink"
     xmlns:ev="http://www.w3.org/2001/xml-events"
     width="100%" height="100%">

После него располагаются теги, непосредственно описывающие элементы, находящиеся в файле.

Примеры фигур внутри тега <svg>:

<rect x="0" y="0" width="400" height="400" fill="none" stroke="black" stroke-width="5px"/>
<circle cx="200px" cy="200px" r="104px" fill="blue" />
<polygon points="99 154 40 185 51 119 4 73 69 64 99 3 128 64 194 73 147 119 158 185 "></polygon>

Стили можно применять, как внутри SVG файла, назначив id и class элементам (стили писать внутри тега <defs> который в свою очередь должен быть вложен в <svg>), так и вынести в отдельный файл, подключив файл стилей:

<?xml-stylesheet type="text/css" href="style-svg.css"?>

Завершается документ всегда закрытием корневого тега </svg>.

Как сохранять

В Adobe Illustrator лучше через Файл → Экспорт → Экспорт для экранов… , чем через Файл → Сохранить как…. Будет такое окно:

Если справа в форматах нет SVG, а какой-нибудь PNG, то тыкаем на «Добавить масштаб» и выбираем SVG, потом тык на настройки (справа от форматов шестерёнка).

Вот так в принципе оптимально:

Стили: «Внутренние таблицы», если планируется мутировать со стилями, если нет, то можно выбрать «Атрибуты представления», тогда стили будут в HTML, а не вынесены отдельно в CSS.

Шрифт: «Преобразовать в кривые», но если текста много, то можно выбрать «SVG». В этом случае нужно будет проверить, что использованный шрифт также грузится на сайте.

Изображения: «Встроить», но если планируется менять линк на растровое изображение внутри SVG, то «Связать».

ID объектов: «Минимальный», но если все имена слоёв отвечают этим требованиям, то чтобы потом проще ориентироваться внутри кода можно выбрать «Имена слоёв».

По десятичной точке: в зависимости от сложности графики и какого размера будет SVG. Например вот иконка свифта, если значение 3 и такой у неё код код, а вот она, если значение 0 и вот такой код.


UPD 2022

Есть офигенный сервис для оптимизации SVG. Можно упростить координаты путей, почистить мусор типа doctype, metadata и всё такое.

А если SVG используется в качестве иконок, то лучше из них сделать шрифт вот этим сервисом. Так будет всего один запрос на сервер, а не на каждую иконку и манипулировать с иконочным шрифтом удобнее, чем с каждой SVG иконкой — да хотя бы, чтобы менять цвет при наведении придётся, либо инлайнить SVG, либо применять фильтры, а иконочный шрифт ведёт себя, как любой шрифт.

Во, я старый мемасик в SVG оживил: