В SVG-анимациях Vivus метаданные <title> и
<desc> используются как базовый слой доступности и
семантики, который остаётся независимым от анимационной логики
библиотеки. Эти элементы встроены в структуру SVG и не влияют на
визуальное отображение, однако определяют, как изображение
интерпретируется вспомогательными технологиями и DOM-инструментами.
SVG-документ поддерживает два ключевых элемента описательной информации:
<title> — краткое имя или заголовок
SVG-объекта<desc> — расширенное текстовое описание
содержимогоЭти элементы размещаются внутри корневого <svg>
или отдельных групп <g>, формируя иерархию
метаданных.
Типичная структура:
<svg width="200" height="200" viewBox="0 0 200 200">
<title>Иконка загрузки</title>
<desc>Анимированная окружность, обозначающая процесс загрузки данных</desc>
<path d="..." />
</svg>
<title> интерпретируется как идентификатор
объекта, тогда как <desc> предоставляет контекст. В
сочетании они формируют основу доступности SVG-графики.
Vivus оперирует SVG как с DOM-структурой, не модифицируя содержимое
<title> и <desc>. Библиотека
фокусируется исключительно на путях (<path>,
<line>, <polyline>,
<polygon>), применяя к ним анимацию через изменение
stroke-атрибутов.
Ключевые особенности обработки:
<title> и <desc> не
получают CSS-анимацийdelayed,
oneByOne, sync) структура SVG сохраняется
полностьюVivus не перегенерирует SVG и не удаляет узлы, что делает сохранение метаданных гарантированным.
Работа Vivus различается в зависимости от способа подключения SVG:
При использовании встроенного SVG структура полностью доступна библиотеке:
<svg id="logo">
<title>Логотип сервиса</title>
<desc>Анимированный логотип с эффектом прорисовки</desc>
<path d="..." />
</svg>
<script>
new Vivus('logo', {
duration: 200,
type: 'sync'
});
</script>
В этом режиме <title> и <desc>
остаются частью DOM и доступны для:
При загрузке через file-параметр Vivus извлекает
содержимое SVG и инжектирует его в DOM:
new Vivus('element', {
file: 'image.svg',
duration: 150,
type: 'delayed'
});
Если внешний файл содержит:
<svg>
<title>Иконка письма</title>
<desc>Конверт, символизирующий отправку сообщения</desc>
</svg>
метаданные сохраняются без изменений, так как загрузка происходит как текстовая вставка SVG-структуры, а не растровая конвертация.
SVG с большим количеством групп и вложенных элементов сохраняет метаданные на уровне узлов, однако Vivus анимирует только графические примитивы.
Структурный пример:
<svg>
<title>Схема процесса</title>
<desc>Диаграмма этапов обработки данных</desc>
<g>
<title>Блок обработки</title>
<path d="..." />
</g>
</svg>
В данном случае:
<title> описывает весь SVG<title> относится к группе<path> внутри
<g>Иерархия метаданных не нарушается, даже если визуальное состояние элементов изменяется по времени.
SVG-метаданные часто дополняются ARIA-атрибутами:
<svg role="img" aria-labelledby="svgTitle svgDesc">
<title id="svgTitle">График роста</title>
<desc id="svgDesc">Линейный график увеличения значений во времени</desc>
<path d="..." />
</svg>
Vivus не вмешивается в ARIA-структуру, сохраняя:
aria-labelledbyЭто позволяет анимированным графикам оставаться интерпретируемыми вспомогательными технологиями.
При изменении <title> или
<desc> во время выполнения анимации:
Пример динамического обновления:
document.querySelector('title').textContent = 'Новое описание';
Анимация продолжает выполняться независимо от этого изменения, поскольку работает только с геометрией путей.
Инструменты оптимизации (например, SVGO) могут:
<title> и <desc>После такой обработки Vivus продолжает работать корректно, однако теряется семантическая информация. В типичных конфигурациях оптимизаторов применяется правило сохранения:
{
"plugins": [
{
"name": "removeTitle",
"active": false
},
{
"name": "removeDesc",
"active": false
}
]
}
Сохранение этих узлов критично для сохранения доступности SVG-анимаций.
Браузер интерпретирует <title> и
<desc> следующим образом:
Vivus, изменяя stroke-параметры, не влияет на этот слой представления. Это разделение делает возможным параллельное существование анимации и семантики без конфликтов между ними.