Этот формат позволяет вставлять векторную графику на страницы. Преимуществ у такого подхода – масса: в векторных форматах нет размытия изображения при скейлинге, у векторных картинок больше возможностей для изменения изображения «на ходу», описанная форматом svg картинка зачастую весит около 1 килобайта. Ниже – о том, что это за формат такой, в чем его концептуальное отличие от растровых форматов, как им пользоваться на странице и как создавать свои SVG в формате XML.
Глобально есть 2 типа изображений: растровые и векторные. Растровая графика – это когда мы берем холст, размечаем его точками (пикселями), закрашиваем каждый пиксель в нужный цвет и получаем изображение. Растровой графикой пользуются тогда, когда нужно нарисовать что-то с большим количеством цветов, переходов и сегментов:
Форматы png и jpg – это как раз про растровую графику. Принцип построения векторных изображений отличается: изображение в основном состоит из геометрических фигур и линий, которые задаются кодом (директивами или функциями):
У такого подхода есть ряд явных преимуществ и недостатков. Из преимуществ:
Из минусов:
Каков вердикт? Пользоваться форматом векторных графических изображений стоит тогда, когда нужно создать небольшие легковесные изображения, то есть иконки/схематические рисунки/простую анимацию. SVG предоставляет широкий инструментарий для создания изображений, но разбираться в нем вам придется с нуля. Если есть возможность – добавлять на страницы сайта анимацию лучше именно в SVG.
Сейчас практически все браузеры поддерживают SVG нативно, поэтому вам не нужно беспокоиться о совместимости.
Добавлять файлы на страницу можно 4-мя способами:
<img src=”some_random_picture.svg” alt=”alt”>
То есть, вы вставляете обычное изображение, только в формате SVG. За поддержку браузерами можете не беспокоиться – и SVG поддерживается без проблем, и SVG 2.0 будет поддерживаться без проблем, когда выйдет..picture_class { background-image: url(url_to_picture.svg); }
Дает немного больше гибкости, чем вставка в HTML картинки, но имеет схожую с первым вариантом проблему, о которой мы расскажем ниже.<object type=”image/svg+xml” data=”path_to_picture.svg”> <img src=”backup_picture.jpg”> </object>
Backup_picture.jpg нужна на тот случай, если по каким-то причинам браузер не хочет работать с SVG.<svg width="50" height="50"> <circle cx="20" cy="20" r="40" stroke="yellow" stroke-width="6" fill="red" /> </svg>
При желании вы можете сначала составить изображение в графическом редакторе, после чего скопировать сгенерированный код на страницу.У первых двух способов есть один недостаток – JS-скрипты на странице не могут получить доступ к изображению, то есть менять их на лету или делать анимацию средствами JS не получится. Но есть и плюсы: 1) изображения кэшируются; 2) очень просто использовать. У третьего и четвертого способа нет вышеописанных минусов, но и плюсов виде кэширования/простоты тоже нет.
Поэтому вариант вставки нужно подбирать по ситуации.
Варианты редактирования векторных изображений через специальные редакторы мы рассматривать не будем – в сети полно гайдов. Вместо этого мы рассмотрим базовые инструкции, с помощью которых можно создавать изображения. Синтаксис вы найдете в курсе по SVG, ссылка будет ниже. Протестировать свой код вы можете, к примеру, вот здесь: https://www.w3schools.com/graphics/tryit.asp?filename=trysvg_myfirst.
Итак, базовые функции:
<polygon points="100,10 40,198 190,78 10,78 160,198" style="fill:lime;stroke:purple;stroke-width:5;fill-rule:evenodd;" />
Еще раз повторимся, что создание SVG-изображений – это сложная работа, которую лучше доверить либо профессиональным дизайнерам, работающим с векторной графикой, либо программам для рисования этой векторной графики. Самостоятельно стоит рисовать только простые иконки и логотипы. Например, логотип Facebook рисуется двумя командами:
<svg width="400" height="400">
<path xmlns="http://www.w3.org/2000/svg" id="Blue_1_" fill="#157DC3" d="M321.1,262.3c7.9,0,14.2-6.4,14.2-14.2V18.8c0-7.9-6.4-14.2-14.2-14.2H91.8 C84,4.6,77.6,11,77.6,18.8v229.3c0,7.9,6.4,14.2,14.2,14.2H321.1z"/>
<path xmlns="http://www.w3.org/2000/svg" id="f" fill="#FFFFFF" d="M255.4,262.3v-99.8h33.5l5-38.9h-38.5V98.8c0-11.3,3.1-18.9,19.3-18.9l20.6,0V45 c-3.6-0.5-15.8-1.5-30-1.5c-29.7,0-50,18.1-50,51.4v28.7h-33.6v38.9h33.6v99.8H255.4z"/>
</svg>
Результат: