Buenas prácticas de accesibilidad en enlaces y botones
En el desarrollo web, los enlaces y los botones son elementos clave para la navegación y la interacción. Para que cualquier usuario, incluidos aquellos con discapacidad, pueda utilizarlos sin barreras, conviene seguir una serie de buenas prácticas de accesibilidad:
-
Diferencias semánticas y uso correcto
-
Enlace (<a>): Sirve para navegar a otra página o recurso. Debe llevar siempre el atributo
href. Si pretendes ejecutar una acción (abrir un modal, enviar datos), mejor usa un botón. -
Botón (<button>): Sirve para ejecutar acciones en la propia página (enviar formularios, controlar interfaces, abrir menús). Evita usar
<div>o<span>con JavaScript simulando botones.
-
-
Texto descriptivo y significativo
Un enlace o botón debe permitir comprender su propósito sin leer el contexto. Evita textos genéricos como “haz clic aquí” o “leer más”.
- Correcto: “Descargar guía de usuario”
- Incorrecto: “Descargar” (sin contexto)
-
Atributos ARIA y labels
Cuando el texto visible no sea suficiente (por ejemplo, un icono sin texto), usa
aria-labeloaria-labelledbypara proporcionar un nombre accesible:Ejemplo: enlace con icono
<a href='/perfil' aria-label='Ir a mi perfil'> <svg width='24' height='24' role='img' aria-hidden='true'> <!-- icono SVG --> </svg> </a> <!-- Aunque no haya texto, screen readers leerán 'Ir a mi perfil' --> -
Estados y roles
Para botones de tipo toggle (encendido/apagado), es imprescindible reflejar el estado con
aria-pressed:Ejemplo: botón toggle
<button type='button' aria-pressed='false' onclick='this.setAttribute('aria-pressed', this.getAttribute('aria-pressed') === 'true' ? 'false' : 'true')'> Activar notificaciones </button>Al pulsarlo,
aria-pressedcambiará entretrueyfalse, informando al lector de pantalla del estado. -
Enlaces de “Saltar al contenido” y navegación rápida
Incluye un enlace inicial para saltar menús y cabeceras. Con ello, los usuarios de teclado acceden directamente al contenido principal:
<a href='#main-content' class='skip-link'>Saltar al contenido principal</a> ... <main id='main-content'> <!-- contenido relevante --> </main>Este enlace suele ocultarse visualmente pero estar disponible al hacer
Tab. -
Foco visible y orden lógico
Asegúrate de que al navegar con
Tabse aprecie claramente qué elemento tiene el foco. No cambies el orden del DOM para presentarlo visualmente distinto; respeta el flujo semántico. -
Uso apropiado de atributos
Atributo Elemento Función href <a> Define la ruta de navegación. Obligatorio en enlaces. disabled <button> Desactiva la interacción y comunica inaccesibilidad. type <button> Evita comportamientos por defecto no deseados (submit, button). role=’link’ Elementos no semánticos Solo si no puedes usar <a>, pero conviene evitarlo. -
Evitar prácticas perjudiciales
- No uses
<div>o<span>cononclicken lugar de botones. - No dejes enlaces sin
hrefo conhref='#'sin prevenir el comportamiento por defecto. - No ocultes controles mediante
display:noneovisibility:hiddensi deben ser accesibles.
Ejemplo incorrecto: div actuando como botón
<div onclick='enviarFormulario()' role='button'> Enviar </div> <!-- Peor: carece de focus, no reacciona a Enter/Espacio -->En su lugar, usa:
<button type='button' onclick='enviarFormulario()'> Enviar </button> - No uses
Siguiendo estas pautas, garantizas que todos los usuarios, independientemente de sus capacidades, puedan navegar e interactuar con tu sitio o aplicación de manera efectiva y sin barreras.
Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.