
SVG (Scalable Vector Graphics) – это векторный формат, встроенный в HTML, который позволяет создавать графику с точностью до пикселя и масштабируемостью без потери качества. Каждый элемент SVG, будь то <circle>, <rect> или <path>, описывается атрибутами координат, размеров и стиля, что делает их легко программируемыми и управляемыми через HTML и JavaScript.
Для начала достаточно добавить тег <svg> с атрибутами width и height. Внутри него можно размещать базовые фигуры. Например, прямоугольник создается с помощью <rect x=»10″ y=»20″ width=»100″ height=»50″ fill=»blue»>. Использование атрибута fill управляет заливкой, stroke – контуром, а stroke-width – толщиной линии.
Для сложных форм применяется <path> с набором команд перемещения и рисования. Команды M, L, C и Z позволяют описывать кривые и замкнутые контуры. Для оптимизации SVG стоит использовать относительные координаты, уменьшать количество повторяющихся элементов и применять grouping через <g> для совместного управления стилем и трансформациями.
SVG поддерживает анимацию через <animate> и <animateTransform>, что позволяет создавать интерактивные графические элементы без использования сторонних библиотек. Анимации можно привязывать к событиям DOM, изменяя атрибуты фигур и создавая динамические визуализации прямо в HTML.
Создание базового SVG и вставка в HTML
SVG (Scalable Vector Graphics) позволяет создавать графику с точными координатами и масштабируемостью без потери качества. Для базового примера создадим прямоугольник и круг.
Простейший синтаксис SVG включает тег <svg> с обязательными атрибутами width и height, задающими размеры холста. Элементы внутри SVG располагаются по координатной сетке, где x и y определяют положение объекта, а fill и stroke – цвет заливки и контура.
Пример вставки SVG прямо в HTML:
<svg width=»200″ height=»200″>
<rect x=»10″ y=»10″ width=»50″ height=»50″ fill=»blue» stroke=»black» stroke-width=»2″/>
<circle cx=»120″ cy=»60″ r=»30″ fill=»red» stroke=»black» stroke-width=»2″/>
</svg>
Здесь <rect> создаёт синий квадрат с чёрной рамкой толщиной 2 пикселя, а <circle> – красный круг. Координаты и размеры можно изменять для точного позиционирования. SVG автоматически масштабируется при изменении размеров контейнера браузера без размытия.
Для комплексных рисунков используйте вложенные группы <g>, что позволяет управлять несколькими элементами одновременно, например, задавать общий transform или стиль. Прямое включение SVG в HTML обеспечивает быстрый доступ к элементам через JavaScript для динамических изменений.
Рисование линий, прямоугольников и кругов с помощью тегов SVG
Тег <line> создаёт прямую линию между двумя точками. Основные атрибуты: x1, y1, x2, y2 задают координаты начала и конца линии. Толщину линии определяет stroke-width, цвет – stroke. Например: <line x1="10" y1="20" x2="200" y2="20" stroke="blue" stroke-width="3"/> рисует синюю линию толщиной 3 пикселя.
Тег <rect> формирует прямоугольник. Координаты верхнего левого угла задаются x и y, ширина и высота – width и height. Для закруглённых углов применяются rx и ry. Цвет заливки указывается через fill, границы – stroke. Пример: <rect x="50" y="50" width="150" height="100" fill="lightgreen" stroke="darkgreen" stroke-width="4" rx="10" ry="10"/>.
Тег <circle> создаёт круг. Центр задаётся атрибутами cx и cy, радиус – r. Цвет заливки и обводки задаются fill и stroke. Пример: <circle cx="120" cy="80" r="50" fill="orange" stroke="red" stroke-width="5"/> отображает оранжевый круг с красной границей толщиной 5 пикселей.
Для создания нескольких объектов удобно использовать контейнер <svg> с указанием width и height. Эффективно комбинировать линии, прямоугольники и круги для построения схем или простых иллюстраций без необходимости сложного кода.
Использование кривых и путей для сложных фигур
В SVG для построения сложных форм применяются элементы <path>, позволяющие объединять линии, кривые и дуги в одном объекте. Основные команды пути:
M x y– перемещение пера в координаты (x, y).L x y– линия от текущей позиции к точке (x, y).C x1 y1, x2 y2, x y– кубическая Безье к точке (x, y) с двумя контрольными точками.Q x1 y1, x y– квадратичная Безье к точке (x, y) с одной контрольной точкой.A rx ry x-axis-rotation large-arc-flag sweep-flag x y– дуга эллипса с радиусами rx, ry к точке (x, y).Z– закрытие текущего контура, соединяя последнюю точку с первой.
Для точного контроля кривых рекомендуется строить каркас с помощью узлов, а затем корректировать контрольные точки. Кубические кривые C позволяют формировать сложные изгибы, подходящие для листьев, волн или силуэтов фигур.
Пример построения сложной формы:
<svg width="200" height="200">
<path d="M50 150 C70 50, 130 50, 150 150 L150 180 L50 180 Z" fill="lightblue" stroke="blue"/>
</svg>
При работе с путями полезно:
- Использовать относительные команды (
c,l,q) для упрощения редактирования. - Разбивать сложные фигуры на несколько
<path>, чтобы облегчить анимацию или стилизацию. - Проверять визуально контрольные точки и при необходимости корректировать координаты.
- Комбинировать линии, кривые и дуги для имитации естественных форм.
Для повторяющихся элементов рекомендуется сохранять путь в <defs> и использовать через <use>, что упрощает поддержку и ускоряет рендеринг.
Добавление цвета, градиентов и прозрачности к элементам SVG
Для задания цвета элементов SVG используются атрибуты fill и stroke. fill определяет внутреннюю заливку фигуры, а stroke – цвет контура. Цвет можно указывать в формате HEX, RGB, HSL или стандартными именами цветов.
Пример:
<circle cx="50" cy="50" r="40" fill="#3498db" stroke="black" stroke-width="3"/>
Градиенты позволяют создавать плавные переходы цветов. В SVG используют линейные (<linearGradient>) и радиальные (<radialGradient>) градиенты. Их определяют внутри блока <defs> и ссылаются через атрибут fill="url(#id)".
Пример линейного градиента:
<defs>
<linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" style="stop-color:rgb(255,255,0);stop-opacity:1" />
<stop offset="100%" style="stop-color:rgb(255,0,0);stop-opacity:1" />
</linearGradient>
</defs>
<rect x="10" y="10" width="200" height="100" fill="url(#grad1)" />
Для прозрачности используется атрибут opacity, который задаёт прозрачность всего элемента, и fill-opacity / stroke-opacity, регулирующие прозрачность заливки и контура отдельно. Значения варьируются от 0 (полностью прозрачный) до 1 (непрозрачный).
Пример:
<rect x="20" y="20" width="100" height="50" fill="green" fill-opacity="0.5" stroke="black" stroke-opacity="0.8"/>
| Атрибут | Описание | Пример значения |
|---|---|---|
| fill | Цвет внутренней заливки | #ff0000, rgb(255,0,0), red |
| stroke | Цвет контура | #000000, black |
| fill-opacity | Прозрачность заливки | 0.0 – 1.0 |
| stroke-opacity | Прозрачность контура | 0.0 – 1.0 |
| opacity | Прозрачность всего элемента | 0.0 – 1.0 |
| linearGradient / radialGradient | Определение градиента для заполнения | url(#grad1) |
Применение трансформаций: вращение, масштабирование и смещение

В SVG трансформации позволяют изменять положение, размер и ориентацию элементов без изменения исходного кода объекта. Основные виды трансформаций: translate (смещение), scale (масштабирование) и rotate (вращение).
Для смещения используется translate(x, y), где x и y задают смещение по горизонтали и вертикали. Пример: <rect x="10" y="10" width="50" height="50" transform="translate(30, 20)" /> перемещает прямоугольник на 30 пикселей вправо и 20 вниз.
Масштабирование выполняется через scale(sx, sy), где sx и sy – коэффициенты по осям X и Y. Если указать один параметр, масштаб применяется одинаково по обеим осям. Пример: <circle cx="50" cy="50" r="20" transform="scale(2)" /> увеличит радиус круга в 2 раза, сохранив его центр.
Вращение задается rotate(angle, cx, cy), где angle – угол в градусах, cx и cy – точка вращения. Если центр не указан, вращение происходит относительно начала координат. Пример: <rect x="0" y="0" width="40" height="40" transform="rotate(45, 20, 20)" /> повернет прямоугольник на 45° вокруг точки (20, 20).
Трансформации можно комбинировать через пробел: transform="translate(10, 15) scale(1.5) rotate(30)". Порядок важен: сначала выполняется первая операция, затем следующая, что влияет на результат. Для сохранения исходных координат элементов удобно использовать контейнер <g> и применять трансформации к группе.
Рекомендации: при сложных анимациях лучше использовать отдельные группы для каждого типа трансформации, это облегчает управление и предотвращает искажения при последовательных изменениях размеров и углов.
Интерактивность и анимация SVG с помощью CSS и JavaScript

SVG поддерживает прямое управление отдельными элементами через CSS и JavaScript, что позволяет создавать интерактивные графики без сторонних библиотек. Для изменения внешнего вида элементов при наведении используют селекторы :hover, :active и :focus. Например, изменение цвета контура линии осуществляется с помощью свойства stroke, а заливки – через fill.
Анимацию можно задавать двумя способами: с помощью CSS-трансформаций и через JavaScript. В CSS применяются свойства transform, transition и animation. Например, вращение элемента вокруг центра реализуется через transform: rotate(45deg) с плавной анимацией через transition: transform 0.5s ease. Для более сложных последовательностей используют ключевые кадры @keyframes.
JavaScript позволяет динамически изменять атрибуты SVG: cx, cy, r, x, y и d. Метод element.setAttribute() эффективно меняет значения в реальном времени. Для анимации движения по кривой можно использовать requestAnimationFrame, что обеспечивает синхронизацию с частотой обновления экрана и плавность.
Для интерактивных эффектов часто применяют обработчики событий: click, mousemove, mouseenter, mouseleave. Они позволяют реализовать подсветку объектов, динамическое появление подсказок или изменение формы элементов при взаимодействии с пользователем.
Комбинирование CSS и JavaScript обеспечивает максимальную гибкость. CSS подходит для простых переходов и повторяющихся анимаций, JavaScript – для сложной логики, зависимой от пользовательских действий или данных. Важно учитывать производительность: анимации с трансформациями и изменением opacity оптимизируются браузерами эффективнее, чем изменение width, height или сложных path-атрибутов.
SVG-анимации с использованием SMIL постепенно устаревают, поэтому рекомендуется ориентироваться на CSS и JavaScript. Для управления сложными анимационными цепочками применяют библиотеку GSAP или чистый JavaScript с таймерами и векторными вычислениями.
Вопрос-ответ:
Что такое SVG и чем он отличается от обычных изображений в HTML?
SVG (Scalable Vector Graphics) — это формат векторной графики, который описывает изображения с помощью математических формул, а не пикселей. В отличие от растровых изображений, таких как PNG или JPEG, SVG можно масштабировать до любого размера без потери качества. Кроме того, SVG поддерживает анимацию и взаимодействие через CSS и JavaScript, что делает его удобным для создания интерактивных графических элементов на странице.
Как встроить SVG в HTML-документ?
Существует несколько способов добавления SVG в HTML. Наиболее простой вариант — использовать тег <svg> прямо в коде страницы. Также можно подключить SVG как отдельный файл через тег <img> или с помощью CSS как фон. Встроенный тег <svg> позволяет изменять отдельные элементы графики через CSS и JavaScript, что недоступно при подключении через <img>.
Какие основные элементы SVG нужно знать для создания фигур?
Для рисования графики в SVG используются базовые элементы, такие как <rect> для прямоугольников, <circle> для кругов, <ellipse> для эллипсов, <line> для линий и <path> для сложных форм. Каждый элемент имеет атрибуты, задающие размер, положение и стиль, например fill для цвета заливки и stroke для цвета обводки.
Можно ли анимировать SVG с помощью CSS или JavaScript?
Да, SVG отлично подходит для анимации. С помощью CSS можно анимировать свойства заливки, обводки, прозрачности или трансформации фигур. JavaScript открывает ещё больше возможностей: можно изменять атрибуты элементов в реальном времени, создавать интерактивные эффекты и реагировать на действия пользователя. Для сложных анимаций часто используют комбинацию CSS и JavaScript.
Как оптимизировать SVG для быстрой загрузки страницы?
Для ускорения загрузки и снижения веса страницы SVG можно оптимизировать. Убирают лишние пробелы, комментарии и ненужные атрибуты, сокращают имена элементов и используют инструменты вроде SVGO. Если SVG содержит большое количество элементов, иногда выгоднее хранить его в виде отдельного файла и подключать через <img> или <use>, чтобы браузер кэшировал графику и уменьшал нагрузку при повторной загрузке.
Как встроить SVG-графику прямо в HTML-страницу?
SVG можно вставить непосредственно в HTML с помощью тега
