Альтернативные описания (<title> и
<desc>) в SVG играют ключевую роль для доступности
графики и поисковой оптимизации. В библиотеке SVG.js их
создание и управление выполняется с помощью методов title()
и desc(). Эти элементы позволяют обеспечить текстовое
пояснение к графическим объектам, которое воспринимают скринридеры и
другие ассистивные технологии.
const draw = SVG().addTo('body').size(300, 300);
const rect = draw.rect(100, 100).fill('#3498db');
// Добавление альтернативного заголовка
rect.title('Синий квадрат');
// Добавление описания
rect.desc('Этот квадрат используется для демонстрации возможностей SVG.js');
Важно: <title> отображается как
всплывающая подсказка в большинстве браузеров, а
<desc> служит исключительно для текстового описания
для скринридеров. В библиотеке SVG.js методы title() и
desc() возвращают объект SVG.js, что позволяет удобно
цепочечно комбинировать методы.
SVG.js позволяет динамически изменять текст альтернативного описания после создания элемента:
rect.title('Обновленный заголовок');
rect.desc('Новое текстовое описание для скринридеров');
Если передать пустую строку, элемент <title> или
<desc> будет удалён:
rect.title('');
rect.desc('');
При создании сложных графических объектов, таких как группы
(<g>), можно задавать альтернативные описания на
уровне группы и отдельных элементов:
const group = draw.group();
const circle = group.circle(50).fill('#e74c3c');
const line = group.line(0,0,100,100).stroke({ width: 2, color: '#2ecc71' });
group.title('Группа элементов');
circle.desc('Красный круг внутри группы');
line.desc('Зелёная линия пересекающая круг');
Особенность: скринридеры читают сначала
<title> и <desc> родительской
группы, а затем дочерние элементы. Это позволяет создавать иерархическую
структуру описаний для сложных иллюстраций.
SVG.js обеспечивает поддержку интерактивных элементов, таких как
click(), hover(), при этом
<title> автоматически выступает в роли подсказки:
rect.on('mouseover', () => rect.fill({ color: '#2c3e50' }))
.on('mouseout', () => rect.fill({ color: '#3498db' }))
.title('Наведи мышь, чтобы изменить цвет квадрата');
Для приложений с мультиязычным интерфейсом SVG.js позволяет управлять
содержимым <title> и <desc> через
переменные:
const lang = 'en'; // 'ru', 'es', 'de'
const titles = { en: 'Blue Square', ru: 'Синий квадрат' };
rect.title(titles[lang]);
Такой подход упрощает локализацию интерактивной графики.
<title> и
<desc>Элементы <title> и <desc>
напрямую не стилизуются через CSS для отображения на странице, но их
содержимое может быть использовано программно:
console.log(rect.node.querySelector('title').textContent);
console.log(rect.node.querySelector('desc').textContent);
SVG.js обеспечивает прямой доступ к DOM-узлам через свойство
.node, что позволяет интегрировать данные описания в другие
интерфейсные компоненты.
SVG.js поддерживает добавление нескольких <desc> к
одному элементу, что позволяет хранить подробные пояснения или
инструкции:
rect.desc('Первое описание');
rect.desc('Второе описание'); // добавится как отдельный элемент <desc>
Для управления множеством описаний можно использовать стандартные методы DOM:
const descs = rect.node.querySelectorAll('desc');
descs.forEach(d => console.log(d.textContent));
<title> для краткого заголовка
элемента.<desc> для подробного объяснения,
которое не видно визуально.<title> и
<desc> на уровне группы для удобства.Эти возможности позволяют создавать доступные, информативные и интерактивные SVG-графики, полностью управляемые через библиотеку SVG.js, с возможностью интеграции в веб-приложения и интерфейсы с поддержкой ассистивных технологий.