Графика формата SVG (Scalable Vector Graphics) описывает изображение с помощью векторных примитивов: линий, кривых, фигур и контуров. В основе визуального отображения лежат два ключевых свойства: stroke и fill. Они определяют, каким образом отображается граница фигуры и её внутренняя область.
Библиотека Vivus, предназначенная для анимации SVG, активно использует именно контуры (stroke), поэтому понимание различий между этими свойствами критично для корректной работы анимации.
Stroke задаёт внешний контур SVG-элемента. Это линия, проходящая по границе фигуры или пути.
<path d="M10 10 L100 100" stroke="black" />
<path d="M10 10 L100 100" stroke="black" stroke-width="2" />
stroke-linecap — форма концов линии:
butt — обрезанный крайround — закруглённыйsquare — квадратный<path d="M10 10 L100 10" stroke="black" stroke-width="5" stroke-linecap="round" />
stroke-linejoin — соединение углов:
miterroundbevelstroke-dasharray — пунктирная линия:
<path d="M10 10 L100 100" stroke="black" stroke-dasharray="5,5" />
Fill определяет цвет внутренней области фигуры.
<circle cx="50" cy="50" r="40" fill="red" />
Если значение не указано, по умолчанию используется чёрный цвет
(black), за исключением случаев, когда явно задано
fill="none".
<rect x="10" y="10" width="100" height="50" fill="blue" />
<rect x="10" y="10" width="100" height="50" fill="none" stroke="black" />
SVG-элемент может одновременно иметь и заливку, и контур:
<circle cx="50" cy="50" r="40" fill="yellow" stroke="black" stroke-width="3" />
Ключевые особенности:
stroke контур не отображаетсяfill="none" фигура становится прозрачной
внутриБиблиотека Vivus анимирует SVG за счёт постепенного “прорисовывания” линий. Это достигается манипуляцией параметрами:
stroke-dasharraystroke-dashoffsetVivus не работает с заливкой напрямую. Анимация возможна только для контуров, поэтому:
fill="none", чтобы сосредоточиться
на линиях<svg viewBox="0 0 100 100">
<path d="M10 50 L90 50" stroke="black" fill="none" />
</svg>
Если у элемента есть заливка, она появится сразу, без анимации, что нарушает эффект “рисования”.
Vivus имитирует процесс рисования линии, но:
Это приводит к визуальным проблемам:
Решение:
<path d="..." stroke="black" fill="none" />
или:
Свойства stroke и fill могут задаваться через CSS:
path {
stroke: black;
fill: none;
stroke-width: 2;
}
Это удобно при работе с Vivus, так как:
Частый приём — добавление заливки после завершения анимации Vivus:
new Vivus('my-svg', {
duration: 200
}, function() {
document.querySelectorAll('path').forEach(function(el) {
el.style.fill = 'blue';
});
});
Таким образом достигается эффект:
Перед использованием важно подготовить SVG:
fill="none"
Инструменты вроде Adobe Illustrator или Inkscape часто экспортируют SVG с заливками по умолчанию, что требует ручной корректировки.
fill="none" для всех анимируемых
элементовstroke-width для лучшей
визуализации1. Отсутствие stroke
<path d="..." fill="black" />
Результат: Vivus не анимирует элемент
2. Наличие fill без отключения
<path d="..." stroke="black" fill="red" />
Результат: заливка появляется сразу
3. Слишком тонкий stroke
stroke-width="0.1"
Результат: линия почти невидима при анимации
При использовании Vivus:
Такое разделение позволяет контролировать восприятие анимации и создавать эффект ручного рисования.
<path d="..." stroke="black" fill="none" />
Запуск Vivus
Добавление fill после завершения
Понимание различий между stroke и fill позволяет не только правильно использовать Vivus, но и глубже контролировать визуальное поведение SVG-графики в целом.