Accesibilidad web
La accesibilidad web es el conjunto de principios y técnicas que garantizan que las páginas web puedan ser utilizadas por todas las personas, independientemente de sus capacidades físicas, cognitivas o tecnológicas. En HTML, implementar accesibilidad significa crear código que sea interpretable tanto por navegadores como por tecnologías asistivas como lectores de pantalla, magnificadores o dispositivos de navegación alternativos.
Fundamentos de la accesibilidad
La accesibilidad no es una característica opcional, sino una responsabilidad fundamental del desarrollo web. Cuando creamos páginas accesibles, beneficiamos no solo a usuarios con discapacidades, sino que mejoramos la experiencia para todos los usuarios, incluyendo aquellos que navegan en condiciones adversas o utilizan dispositivos diversos.
Los estándares WCAG (Web Content Accessibility Guidelines) establecen cuatro principios básicos: el contenido debe ser perceptible, operable, comprensible y robusto. HTML proporciona elementos y atributos específicos que nos ayudan a cumplir estos principios de manera efectiva.
Estructura semántica y navegación
El uso correcto de elementos semánticos HTML5 es fundamental para la accesibilidad. Los lectores de pantalla utilizan la estructura del documento para crear mapas de navegación que permiten a los usuarios moverse eficientemente por el contenido.
<header>
<nav aria-label="Main navigation">
<ul>
<li><a href="#home">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</nav>
</header>
<main>
<section>
<h1>Welcome to our website</h1>
<p>This is the main content area.</p>
</section>
</main>
<aside>
<h2>Related links</h2>
<ul>
<li><a href="#link1">Resource 1</a></li>
<li><a href="#link2">Resource 2</a></li>
</ul>
</aside>
La jerarquía de encabezados debe seguir un orden lógico sin saltar niveles. Los elementos <h1>
a <h6>
actúan como puntos de referencia que permiten a los usuarios navegar rápidamente entre secciones.
Atributos ARIA esenciales
Los atributos ARIA (Accessible Rich Internet Applications) proporcionan información adicional sobre el propósito y estado de los elementos cuando el HTML semántico no es suficiente.
<button aria-expanded="false" aria-controls="menu-dropdown">
Menu
</button>
<div id="menu-dropdown" aria-hidden="true">
<ul role="menu">
<li role="menuitem"><a href="#option1">Option 1</a></li>
<li role="menuitem"><a href="#option2">Option 2</a></li>
</ul>
</div>
El atributo aria-label
proporciona descripciones alternativas cuando el texto visible no es suficientemente descriptivo:
<button aria-label="Close dialog">×</button>
<input type="search" aria-label="Search products">
Formularios accesibles
Los formularios accesibles requieren asociaciones claras entre etiquetas y campos, así como mensajes de error comprensibles. El elemento <label>
debe estar correctamente vinculado con su campo correspondiente.
<form>
<div>
<label for="email">Email address</label>
<input type="email" id="email" required aria-describedby="email-error">
<div id="email-error" role="alert" aria-live="polite">
Please enter a valid email address
</div>
</div>
<fieldset>
<legend>Preferred contact method</legend>
<input type="radio" id="contact-email" name="contact" value="email">
<label for="contact-email">Email</label>
<input type="radio" id="contact-phone" name="contact" value="phone">
<label for="contact-phone">Phone</label>
</fieldset>
</form>
Los mensajes de error deben utilizar role="alert"
y aria-live="polite"
para ser anunciados automáticamente por los lectores de pantalla cuando aparecen.
Imágenes y contenido multimedia
Las imágenes informativas requieren texto alternativo descriptivo mediante el atributo alt
. Para imágenes decorativas, utiliza alt=""
para que sean ignoradas por las tecnologías asistivas.
<!-- Imagen informativa -->
<img src="chart.png" alt="Sales increased 25% from January to March 2024">
<!-- Imagen decorativa -->
<img src="decoration.png" alt="" role="presentation">
<!-- Imagen compleja -->
<figure>
<img src="complex-chart.png" alt="Quarterly sales data">
<figcaption>
Detailed description: Sales in Q1 were $50k, Q2 reached $75k,
Q3 maintained $70k, and Q4 peaked at $90k.
</figcaption>
</figure>
Para contenido multimedia, proporciona alternativas textuales como subtítulos y transcripciones:
<video controls>
<source src="presentation.mp4" type="video/mp4">
<track kind="captions" src="captions.vtt" srclang="en" label="English">
<p>Your browser doesn't support video.
<a href="transcript.html">Read the transcript</a>
</p>
</video>
Navegación por teclado
La navegación por teclado debe ser fluida y lógica. Todos los elementos interactivos deben ser accesibles mediante la tecla Tab, y el orden de navegación debe seguir el flujo visual del contenido.
<div class="custom-dropdown">
<button tabindex="0" aria-haspopup="true" aria-expanded="false">
Select option
</button>
<ul role="listbox" aria-hidden="true">
<li role="option" tabindex="-1">Option 1</li>
<li role="option" tabindex="-1">Option 2</li>
<li role="option" tabindex="-1">Option 3</li>
</ul>
</div>
Los elementos que no son naturalmente focalizables pero necesitan interactividad deben incluir tabindex="0"
para hacerlos accesibles por teclado.
Lecciones de este módulo
Explora todas las lecciones disponibles en Accesibilidad web
Explora más sobre HTML
Descubre más recursos de HTML

Alan Sastre
Ingeniero de Software y formador, CEO en CertiDevs
Ingeniero de software especializado en Full Stack y en Inteligencia Artificial. Como CEO de CertiDevs, HTML es una de sus áreas de expertise. Con más de 15 años programando, 6K seguidores en LinkedIn y experiencia como formador, Alan se dedica a crear contenido educativo de calidad para desarrolladores de todos los niveles.