Перейти к содержимому
Поиск
Разработка

SSSVG: понятный SVG на 24 живых примерах

Разбираем SVG на практике: 24 интерактивных примера, viewBox, кривые Безье, маски, градиенты и стрелки. Меняйте параметры и скачивайте свой SVG прямо со страницы.

Александр Некрасов
SSSVG: понятный SVG на практике. Кривые Безье с управляющими точками и геометрические фигуры на тёмно-бирюзовом фоне.

SVG часто выглядит сложнее, чем он есть: несколько букв в path, четыре числа в viewBox, ссылка на непонятный id. Предлагаю разбирать его не по случайным фрагментам кода, а по одному наблюдаемому изменению: двигаем точку, меняем атрибут, смотрим на результат.

SSSVG от fffuel устроен именно как визуальный интерактивный справочник по выбранным частям SVG: фигурам, координатам, контурам, группам, маскам, заливкам, фильтрам и тексту. Ниже мы сначала попробуем эти идеи в своей мастерской, а затем разберём, где они пригодятся в реальной вёрстке.

Что такое SSSVG и как им пользоваться

В оригинальном SSSVG рядом с объяснениями расположены рисунки, параметры и примеры разметки; это справочник, а не библиотека, которую нужно устанавливать в проект. Начните с атрибута, который непонятен, измените только его и сравните рисунок с кодом.

Справочник охватывает популярные и интересные части спецификации, но не заявлен как её полная замена (описание SSSVG). Для точного поведения атрибутов полезно параллельно держать под рукой спецификацию SVG, а для первого знакомства можно пройти мастерскую ниже.

Наша мастерская написана отдельно: это авторские учебные примеры по темам SSSVG, а не встроенная копия чужого сайта. Внутри работает настоящий SVG браузера; показанный код и скачиваемый файл строятся из тех же параметров, что и рисунок.

Живая SVG-мастерская: 24 примера

Выберите тему, измените ползунки или числа и наблюдайте за рисунком. В примерах Q и C можно также перетаскивать золотые управляющие точки; для работы с клавиатуры есть поля тех же координат.

Кнопка «Скачать SVG» сохраняет текущий пример, а не заранее подготовленную картинку. Фон предпросмотра и учебные направляющие в файл не входят: так удобнее использовать результат в собственном макете.

Все настройки этой мастерской живут в памяти страницы и сбрасываются после её перезагрузки. Мы не принимаем произвольную SVG-разметку и не загружаем пользовательские файлы: доступные поля меняют только параметры подготовленных примеров.

Координаты, viewBox и базовые фигуры

Значение viewBox="0 0 400 280" описывает прямоугольник во внутренних координатах: минимальные X и Y, затем ширину и высоту; эти числа не обязаны совпадать с размером элемента в CSS-пикселях (MDN: viewBox). Попробуйте уменьшить внутреннюю ширину, не меняя внешнее окно мастерской.

Способ размещения задаёт preserveAspectRatio: xMidYMid meet сохраняет пропорции и помещает весь viewBox, xMidYMid slice заполняет окно с возможным обрезанием, а none допускает неравномерное масштабирование (MDN: preserveAspectRatio). Сравните три режима на одном круге, чтобы различие стало очевидным.

Для круга нужны cx, cy и r, для эллипса два радиуса rx и ry, а у прямоугольника x и y обозначают левый верхний угол (SSSVG: базовые фигуры). Не начинайте с длинного path, если нужный результат получается одной простой фигурой.

polyline рисует ломаную, а polygon замыкает последнюю вершину на первую; список points в обоих случаях состоит из пар координат (SSSVG: polyline и polygon). В мастерской для открытой ломаной явно указано fill="none", чтобы заливка не мешала читать линию.

Исследовать viewBox ↑ · Изменить вершины фигуры ↑

Path без угадывания: линии, кривые и дуги

path описывает контур последовательностью команд в атрибуте d; прописные команды используют абсолютные координаты, строчные обычно задают смещения от текущей точки (MDN: команды path). Удобнее читать такую запись небольшими фрагментами, а не пытаться понять всю строку сразу.

Команды Что означают Что попробовать
M, L, H, V, Z Перемещение, отрезок, горизонталь, вертикаль, замыкание (MDN). Переключить абсолютную и относительную запись; отключить Z.
Q Квадратичная кривая с одной управляющей точкой (MDN). Потянуть точку вверх и в сторону.
C Кубическая кривая с двумя управляющими точками (MDN). Получить S-образный изгиб.
A Дуга эллипса с радиусами, поворотом и двумя флагами (MDN). Перебрать сочетания large-arc-flag и sweep-flag.

Управляющая точка Безье не обязана лежать на кривой: она влияет на направление касательной; у квадратичной кривой такая точка одна, у кубической две (MDN: кривые Безье). Включите направляющие и понаблюдайте именно за направлением начала и конца линии.

<path d="M45 220 Q200 35 355 220"
      fill="none" stroke="#155959" stroke-width="7"/>

В этом учебном фрагменте первая пара задаёт начало, следующая пару координат управляющей точки, последняя конец кривой. Измените среднюю пару в мастерской и сравните результат с рисунком выше.

Для дуги A слишком маленькие радиусы могут быть автоматически увеличены, чтобы дуга соединила заданные точки; поэтому иногда ползунок радиуса ведёт себя не так, как ожидается (MDN: эллиптические дуги). В нашем примере начальные радиусы подобраны так, чтобы удобно сравнить варианты флагов.

Потянуть квадратичную кривую ↑ · Исследовать две управляющие точки ↑ · Проверить флаги дуги ↑

Группы, transform и повторное использование

g объединяет элементы, позволяет задать общие наследуемые свойства и преобразования, а собственный атрибут потомка может переопределить унаследованное значение (SSSVG: g). Попробуйте перекрасить группу: круг с отдельной золотой заливкой останется золотым.

Порядок операций в transform важен, потому что преобразования затрагивают систему координат: перестановка переноса и поворота меняет результат (SSSVG: transform). В нашем стенде серый контур остаётся на исходном месте, чтобы было с чем сравнить.

defs хранит определения без непосредственного отображения, use создаёт экземпляр по ссылке, а symbol позволяет определить переиспользуемую графику с собственным viewBox (SSSVG: defs, use, symbol). Для набора однотипных значков начните с одной геометрии и двух экземпляров разного размера.

У скачиваемых примеров есть ссылки вида href="#…" и url(#…), поэтому при переносе нескольких копий в один HTML-документ следите за уникальностью идентификаторов и соответствием ссылок. В мастерской определения и ссылки генерируются вместе с отдельным префиксом.

Сравнить порядок transform ↑ · Изменить четыре экземпляра сразу ↑ · Проверить symbol ↑

ClipPath и mask: скрыть или сделать прозрачным

clipPath ограничивает видимую область геометрией, а mask может оставлять содержимое частично видимым (SSSVG: clipPath и mask). Сравните круговое окно с плавным исчезновением одной и той же композиции.

Правило «белое показывает, чёрное скрывает» относится к яркостной маске luminance, где учитываются и яркость, и альфа-канал; у маски alpha важна только прозрачность, поэтому непрозрачный чёрный тоже показывает содержимое (MDN: mask-type). Именно это различие вынесено в отдельный переключатель мастерской.

Сначала оставьте переход «чёрный → белый» и смените luminance на alpha. Затем включите переход «прозрачный → белый»: сравнение даст гораздо более полезную интуицию, чем запоминание двух картинок.

Подвигать окно clipPath ↑ · Сравнить luminance и alpha ↑

Узоры, линейные и радиальные градиенты

pattern описывает повторяемый фрагмент; patternUnits="userSpaceOnUse" задаёт размеры плитки в пользовательских координатах, а patternTransform преобразует узор (SSSVG: pattern). Изменяйте шаг точек отдельно от их радиуса: это две разные характеристики.

linearGradient и radialGradient определяют заливки с цветовыми стопами; положение стопа задаёт offset, цвет задаёт stop-color, а прозрачность можно менять через stop-opacity (SSSVG: градиенты). В мастерской линейный пример показывает распределение стопов, а радиальный позволяет сравнить центр и фокус.

Соберите небольшую заливку и скачайте её как SVG, затем откройте файл отдельно. Так можно проверить, что результат не зависит от фона предпросмотра или оформления статьи.

Собрать узор ↑ · Изменить цветовые стопы ↑ · Передвинуть фокус ↑

Фильтры, обводка и наконечники стрелок

У заливки и обводки собственные параметры: stroke-width меняет толщину, stroke-linecap форму концов, а stroke-dasharray и stroke-dashoffset задают штрихи и их смещение (SSSVG: fill и stroke). Попробуйте отключить заливку и работать только с контуром.

filter объединяет примитивы обработки изображения, причём его собственная область ограничивает результат; по умолчанию это x="-10%", y="-10%", ширина и высота 120% (MDN: filter). В учебном примере область расширена сильнее, чтобы удобнее было экспериментировать с размытой границей.

marker позволяет поставить графический наконечник на линию, а markerUnits="strokeWidth" связывает его размер с толщиной обводки; userSpaceOnUse использует пользовательские единицы (SSSVG: marker). Сравните оба режима, увеличивая толщину одной и той же линии.

Настроить обводку ↑ · Сравнить размытие и тень ↑ · Собрать стрелку ↑

Как забрать пример в свой проект

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

  • Отдельный файл: для статичной иллюстрации можно начать с обычного <img src="example.svg" alt="Смысл изображения">; подберите описание под назначение картинки.
  • Инлайн-разметка: вставляйте содержимое поля «Ваш SVG», если хотите работать с внутренними элементами непосредственно в документе.
  • Несколько экземпляров: проверьте уникальность id, а не только внешний вид первого примера.
  • Изменение размеров: сначала проверьте viewBox и preserveAspectRatio, затем внешние размеры блока.

text добавляет текст в SVG, text-anchor управляет привязкой строки, а tspan позволяет отдельно оформить её часть (SSSVG: text и tspan). В нашем последнем примере попробуйте короткую и длинную подпись, затем уменьшите окно: длинная строка специально не скрывается многоточием.

Не превращайте произвольный SVG из непроверенного источника в инлайн-разметку без проверки. В этой мастерской текст экранируется и не интерпретируется как разметка; полноценного редактора загружаемых SVG здесь нет.

Проверить текст и выравнивание ↑

Когда справочник полезен и чего от него не ждать

Я бы использовал SSSVG как быстрый способ разобрать конкретный атрибут: почему значок обрезается, куда направлен маркер, откуда берётся цвет или как перемещается управляющая точка. Для сложной иллюстрации разумнее оставить рисование графическому редактору, а здесь проверять отдельные механизмы.

Пройдите короткую практику: увеличьте круг через viewBox, получите S-образную кривую, поменяйте порядок transform, сравните две маски и скачайте стрелку. После этого возвращайтесь к оригинальному SSSVG уже с конкретными вопросами, а не с ощущением, что SVG состоит из случайных чисел.

Если хочется продолжить эксперименты с интерфейсами, на сайте есть мастерская Storybook, примеры Animista и сжатие изображений в браузере. Можно переходить к ним после того, как проверили нужные SVG-приёмы на этой странице.