Acerca de este problema HTML
El atributo role expone el propósito de un elemento a las tecnologías de asistencia. ARIA define un conjunto fijo de valores de role; sidebar no está entre ellos, por lo que los validadores reportan un valor incorrecto. Las barras laterales típicamente contienen contenido relacionado o complementario, lo cual se corresponde con el role de landmark complementary. En HTML, el elemento <aside> ya representa este concepto e implícitamente se mapea al role complementary.
Dejar un role inválido perjudica la accesibilidad porque los lectores de pantalla pueden ignorar el landmark o reportarlo incorrectamente, y las herramientas automáticas no pueden construir un mapa confiable de landmarks. El cumplimiento de estándares también importa para un comportamiento consistente entre navegadores y tecnologías de asistencia.
Para solucionarlo:
-
Reemplaza
role="sidebar"conrole="complementary"en un contenedor genérico; añade un nombre accesible conaria-labelledbyoaria-labelcuando existan múltiples regiones complementarias. -
Prefiere
<aside>para HTML semántico. Implícitamente tiene el rolecomplementary; añade una etiqueta cuando haya más de un<aside>. -
No añadas
role="complementary"a<aside>a menos que necesites sobrescribir algo; los roles duplicados son innecesarios. -
Si el área es navegación de todo el sitio, usa
<nav>orole="navigation"en su lugar; elige el role que mejor coincida con la intención.
Ejemplos
Inválido: role ARIA inexistente
<div role="sidebar">
<!-- Enlaces relacionados y promociones -->
</div>
Corregido: usa el role complementary en un contenedor genérico
<div role="complementary" aria-labelledby="sidebar-title">
<h2 id="sidebar-title">Related</h2>
<ul>
<li><a href="/guide-a">Guide A</a></li>
<li><a href="/guide-b">Guide B</a></li>
</ul>
</div>
Corregido: usa HTML semántico con aside (complementary implícito)
<aside aria-labelledby="sidebar-title">
<h2 id="sidebar-title">Related</h2>
<ul>
<li><a href="/guide-a">Guide A</a></li>
<li><a href="/guide-b">Guide B</a></li>
</ul>
</aside>
Múltiples barras laterales: asegura etiquetas únicas y descriptivas
<aside aria-labelledby="filters-title">
<h2 id="filters-title">Filter results</h2>
<!-- controles de filtro -->
</aside>
<aside aria-labelledby="related-title">
<h2 id="related-title">Related articles</h2>
<!-- enlaces relacionados -->
</aside>
Cuando realmente es navegación: usa el landmark de navegación
<nav aria-label="Section navigation">
<ul>
<li><a href="#intro">Intro</a></li>
<li><a href="#examples">Examples</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</nav>
Consejos:
-
Usa
<aside>para contenido tangencial; es el enfoque más simple y basado en estándares. - Proporciona un nombre accesible cuando haya más de una región complementaria presente.
-
Evita inventar roles ARIA; adhiérete a valores definidos como
banner,main,navigation,complementary,contentinfo, y otros.
Encuentra problemas como este automáticamente
Rocket Validator escanea miles de páginas en segundos, detectando problemas de HTML en todo tu sitio web.