aria-posinset
Posición de un elemento dentro de un conjunto cuando el DOM no puede expresarla — habitualmente porque los elementos están virtualizados, paginados o filtrados. Siempre se debe combinar con aria-setsize para que los lectores de pantalla puedan anunciar «3 de 47».
Cuándo utilizarlo
Cuando el DOM no contiene el conjunto completo — listas virtualizadas que solo renderizan los elementos visibles, cuadrículas paginadas, comboboxes filtrados o feeds de desplazamiento infinito. Sin aria-posinset y aria-setsize, el lector de pantalla debe deducir la posición a partir del número de elementos hermanos y anunciará «elemento 1 de 10» cuando en realidad la persona usuaria está en el elemento 327 de 5.000.
Es válido en elementos dentro de contenedores que son inherentemente conjuntos: option dentro de listbox, menuitem dentro de menu, treeitem dentro de tree, tab dentro de tablist, article dentro de feed, row dentro de grid.
Si el DOM sí incluye naturalmente todos los elementos en el orden de la fuente, no es necesario usar aria-posinset; la tecnología de apoyo cuenta los elementos hermanos de forma automática.
Comportamiento
El valor es un entero positivo — el índice de base 1 de este elemento en el conjunto completo. Se debe combinar con aria-setsize en el mismo elemento; ambos atributos pertenecen a los elementos, no al contenedor.
Cuando los elementos se filtran, se deben actualizar ambos atributos para reflejar el conjunto visible y relevante, no la lista completa original. De lo contrario, las personas usuarias escuchan posiciones que no coinciden con lo que pueden navegar.
aria-setsize="-1" es válido en los casos en que el total es genuinamente desconocido (un feed de búsqueda en tiempo real sin límite definido). Algunas tecnologías de apoyo lo anuncian como «muchos»; otras permanecen en silencio.
Errores frecuentes
- Establecer
aria-posinsetsinaria-setsize. Falta la mitad de la información; la tecnología de apoyo no puede indicar «3 de cuántos». - Olvidar actualizar los valores tras un ordenamiento o filtrado. Las personas usuarias escuchan posiciones obsoletas.
- Colocar los atributos en el contenedor en lugar de en los elementos.
- Usar
aria-posinsetcuando el DOM ya refleja el conjunto completo — la tecnología de apoyo iba a contar correctamente y ahora existen dos fuentes de verdad que pueden desincronizarse. - Valores cero o negativos para
aria-posinset(los negativos no están permitidos; soloaria-setsizeacepta-1). - Números de posición que no coinciden con el orden visual — una persona usuaria de lector de pantalla escucha «elemento 5» mientras el tercer elemento visible está resaltado.
Ejemplo
<!-- Listbox virtualizado: solo los elementos 12-16 están en el DOM, pero el conjunto tiene 5.000 -->
<div role="listbox" aria-label="Customers">
<div role="option" aria-posinset="12" aria-setsize="5000">Customer 12</div>
<div role="option" aria-posinset="13" aria-setsize="5000">Customer 13</div>
<div role="option" aria-posinset="14" aria-setsize="5000" aria-selected="true">Customer 14</div>
<div role="option" aria-posinset="15" aria-setsize="5000">Customer 15</div>
<div role="option" aria-posinset="16" aria-setsize="5000">Customer 16</div>
</div>