Accesibilidad SVG: Cómo Hacer Gráficos Vectoriales Inclusivos
Crea gráficos SVG accesibles que funcionen para todos. Guía completa sobre ARIA, lectores de pantalla, gestión del foco y prácticas de diseño inclusivo.

Founder of VectoSolve
Self-taught developer, founder and sole developer of VectoSolve since 2024. He builds the conversion engine and the cutting, embroidery and 3D printing exports.
How this article was made: drafted with AI assistance, then edited and fact-checked before publication. About the author
Key Takeaways
- Más de mil millones de personas en el mundo dependen de tecnologías de asistencia — los SVG accesibles son tanto un imperativo ético como legal
-
Usa
aria-hidden="true"para SVG decorativos yrole="img"con<title>/<desc>para los informativos - WCAG 2.1 requiere un contraste de 3:1 para gráficos y componentes UI, y 4.5:1 para texto dentro de SVG
-
Respeta siempre
prefers-reduced-motiondesactivando las animaciones SVG para los usuarios que lo soliciten - Prueba con lectores de pantalla reales (NVDA, VoiceOver, TalkBack) — las herramientas automatizadas detectan solo ~30% de los problemas de accesibilidad
Por qué importa la accesibilidad SVG
Más de mil millones de personas en el mundo tienen discapacidades. Hacer que tus gráficos SVG sean accesibles garantiza que todos puedan comprender e interactuar con tu contenido. También suele ser un requisito legal.
Fundamentos de accesibilidad
Comprender las tecnologías de asistencia
Cómo las personas acceden a los SVG:
- Lectores de pantalla (NVDA, JAWS, VoiceOver)
- Navegación por teclado
- Dispositivos de conmutación
- Lupas de pantalla
- Control por voz
Directrices WCAG para imágenes
Requisitos principales:
Requisitos WCAG 2.1:
- El contenido no textual necesita alternativas
- El color no debe ser el único transmisor de información
- Contraste de color suficiente
- Redimensionable sin pérdida
- Elementos enfocables accesibles por teclado
Patrones de accesibilidad SVG
SVG decorativos
Para elementos puramente visuales:
<svg aria-hidden="true" focusable="false">
<!-- gráfico decorativo -->
</svg>
Cuándo usar:
- Patrones de fondo
- Adornos visuales
- Iconos redundantes con texto
- Elementos puramente estéticos
SVG informativos
Para gráficos significativos:
<svg role="img" aria-labelledby="chart-title">
<title id="chart-title">Crecimiento de ventas 2025</title>
<!-- contenido del gráfico -->
</svg>
Cuándo usar:
- Gráficos y diagramas
- Esquemas
- Infografías
- Iconos independientes
SVG complejos
Para información detallada:
<svg role="img" aria-labelledby="title desc">
<title id="title">Organigrama</title>
<desc id="desc">
Estructura jerárquica mostrando al CEO arriba,
con tres VP subordinados, cada uno con equipos.
</desc>
<!-- diagrama complejo -->
</svg>
Pro Tip: Para visualizaciones de datos complejas (gráficos, mapas), proporciona siempre un <table> oculto como alternativa al SVG. Los lectores de pantalla analizan las tablas mucho más eficientemente que los datos de ruta SVG.
A Full Year of Conversions for $49
Starter Annual: 25 conversions every month, $49 for the whole year. That is about $4.08 a month · Cancel anytime
Get the Annual DealAtributos ARIA para SVG
Atributos esenciales
<!-- Definición de rol -->
role="img" <!-- imagen estática -->
role="graphics-document" <!-- interactivo complejo -->
<!-- Etiquetas -->
aria-label="..." <!-- descripción simple -->
aria-labelledby="..." <!-- referencia a elemento título -->
aria-describedby="..." <!-- descripción detallada -->
<!-- Estados -->
aria-hidden="true" <!-- ocultar de TA -->
focusable="false" <!-- prevenir foco -->
Elementos Title y Desc
Accesibilidad nativa SVG:
<svg role="img" aria-labelledby="icon-title icon-desc">
<title id="icon-title">Advertencia</title>
<desc id="icon-desc">
Triángulo amarillo con signo de exclamación indicando precaución
</desc>
<path d="..."/>
</svg>
«La accesibilidad no es una función que se añade al final — es una restricción de diseño que mejora todo. Un SVG accesible es un SVG bien estructurado.» - Leonie Watson, Ingeniera de Accesibilidad & Consejo Asesor W3C
Accesibilidad de SVG interactivos
Elementos enfocables
Haz que las partes interactivas sean accesibles:
<svg>
<a href="/section-1" tabindex="0">
<rect x="0" y="0" width="100" height="50"/>
<text>Sección 1</text>
</a>
</svg>
Indicadores de foco
Estados de foco visibles:
svg a:focus,
svg [tabindex]:focus {
outline: 2px solid #0066cc;
outline-offset: 2px;
}
Navegación por teclado
Asegura el acceso por teclado:
svgElement.addEventListener('keydown', (e) => {
if (e.key === 'Enter' || e.key === ' ') {
// Activar elemento
}
});
Accesibilidad del color
Requisitos de contraste
Ratios de contraste WCAG:
Requisitos mínimos:
Texto: 4.5:1 (normal), 3:1 (grande)
Gráficos: 3:1 contra el fondo
Componentes UI: 3:1
Probar el contraste
Herramientas de verificación:
- DevTools del navegador
- Verificadores de contraste
- Auditorías de accesibilidad
Independencia del color
No dependas solo del color:
<!-- Mal: Solo color -->
<circle fill="red"/> <!-- Error -->
<circle fill="green"/> <!-- Éxito -->
<!-- Bien: Patrón + Color -->
<circle fill="red">
<title>Error</title>
</circle>
<use href="#checkmark" fill="green">
<title>Éxito</title>
</use>
Free SVG Tools for Crafters
Design Checker · Color Separator · Mat Preview · Offset Generator · Text to SVG
Check Your SVG FreeAccesibilidad de iconos
Botones con icono
<button aria-label="Cerrar diálogo">
<svg aria-hidden="true" focusable="false">
<path d="..."/>
</svg>
</button>
Icono con texto
<button>
<svg aria-hidden="true"><!-- icono --></svg>
Guardar documento
</button>
Iconos independientes
<svg role="img" aria-label="Notificación: 3 mensajes sin leer">
<circle cx="12" cy="12" r="10" fill="#ff0000"/>
<text x="12" y="16" text-anchor="middle">3</text>
</svg>
Accesibilidad de animaciones
Respetar preferencias
@media (prefers-reduced-motion: reduce) {
svg * {
animation: none !important;
transition: none !important;
}
}
Controles de pausa
<button id="toggle-animation">
Pausar animación
</button>
<svg class="animated-svg">
<!-- contenido animado -->
</svg>
El criterio de éxito WCAG 2.1 2.3.1 requiere que nada parpadee más de 3 veces por segundo. Si tus animaciones SVG incluyen cambios rápidos de color o efectos estroboscópicos, proporciona un control de pausa y respeta prefers-reduced-motion.
Probar la accesibilidad SVG
Pruebas manuales
Checklist:
- Navegar solo con teclado
- Probar con lector de pantalla
- Verificar al zoom 200%
- Verificar el contraste de colores
- Probar con usuarios
Pruebas automatizadas
Herramientas:
- axe DevTools
- WAVE
- Lighthouse
- Pa11y
Pruebas con lectores de pantalla
Probar con:
- NVDA (Windows, gratuito)
- VoiceOver (Mac/iOS, integrado)
- TalkBack (Android, integrado)
- JAWS (Windows, comercial)
A Full Year of Conversions for $49
Starter Annual: 25 conversions every month, $49 for the whole year. That is about $4.08 a month · Cancel anytime
Get the Annual DealReferencia de patrones comunes
Logo
<a href="/">
<svg role="img" aria-label="Nombre de la empresa - Inicio">
<title>Logo de la empresa</title>
<!-- rutas del logo -->
</svg>
</a>
Visualización de datos
<svg role="img" aria-labelledby="chart-title">
<title id="chart-title">Ventas mensuales 2025</title>
<desc>Gráfico de barras mostrando ventas creciendo
de 10K€ en enero a 45K€ en diciembre</desc>
<!-- Proporcionar tabla alternativa -->
</svg>
<table class="sr-only">
<!-- tabla de datos accesible -->
</table>
Sistema de iconos
<svg class="icon" aria-hidden="true" focusable="false">
<use href="#icon-search"/>
</svg>
<span class="icon-label">Buscar</span>
VectoSolve y la accesibilidad
Salida limpia para accesibilidad
VectoSolve produce SVG limpios que son:
- Fáciles de enriquecer con atributos de accesibilidad
- Bien estructurados para modificación
- Listos para implementación accesible
Accesibilidad post-conversión
Después de la vectorización:
- Añadir el rol apropiado
- Incluir elementos title/desc
- Establecer atributos ARIA
- Probar con tecnologías de asistencia
Conclusión
Los SVG accesibles benefician a todos — son más semánticos, mejor estructurados y más mantenibles. Siguiendo estos patrones y probando regularmente, garantizas que tus gráficos vectoriales sean verdaderamente inclusivos.
| Requisito WCAG | Implementación SVG | Impacto |
|---|---|---|
| Alternativas textuales (1.1.1) | Elementos <title> y <desc> | Los lectores de pantalla anuncian el propósito de la imagen |
| Contraste de color (1.4.11) | Mínimo 3:1 para gráficos UI | Visible para usuarios con baja visión |
| Acceso por teclado (2.1.1) | focusable=true + tabindex | SVG interactivos accesibles por teclado |
| Movimiento reducido (2.3.3) | Media query prefers-reduced-motion | Detiene animaciones para trastornos vestibulares |
Free SVG Tools for Crafters
Design Checker · Color Separator · Mat Preview · Offset Generator · Text to SVG
Check Your SVG FreeFuentes y lecturas adicionales
- MDN Web Docs: Accesibilidad SVG — Referencia completa para roles ARIA, títulos y descripciones en SVG
- Especificación W3C SVG 2 — Requisitos oficiales de accesibilidad para elementos y atributos SVG
- web.dev: Accesibilidad — Guías de Google para crear experiencias web inclusivas y de alto rendimiento
- Smashing Magazine: SVG accesibles — Tutoriales prácticos para hacer iconos e ilustraciones SVG compatibles con lectores de pantalla