Lliçó 8 de 10 · 17 min de lectura · Revisada el 26/10/2026
Carrusels, taules interactives i arrossegar i deixar anar (2.5.7)
Estàs llegint una lliçó oberta. Matricula't gratis per fer els tests i els exercicis, desar el teu progrés i aconseguir el certificat.
Aquesta lliçó reuneix tres components que combinen moviment, densitat d'informació i gestos: els carrusels de la portada, les taules amb ordenació i filtres, i les interfícies d'arrossegar i deixar anar. Són els que toquen més criteris diferents alhora: temps i moviment (2.2.2 Posar en pausa, aturar, amagar), teclat (2.1.1), nom i estat (4.1.2), gestos (2.5.1 Gestos del punter, 2.5.7 Moviments d'arrossegament) i mida de l'objectiu (2.5.8).
Carrusels
Els carrusels automàtics són un dels components pitjor valorats als estudis d'usabilitat i una font constant d'incompliments. Si l'equip de disseny hi insisteix, el patró Carousel de l'APG (s'obre en una finestra nova) marca el mínim:
- Contenidor amb
role="region"(o<section>),aria-roledescription="carrusel"i un nom ambaria-label(«Notícies destacades»). - Control de pausa com a primer element enfocable, amb
aria-pressedo text alternant («Posa en pausa la rotació» / «Reprèn la rotació»). És obligatori per 2.2.2 si el moviment dura més de 5 segons i és automàtic. A més, la rotació s'ha d'aturar mentre el punter o el focus siguin dins del carrusel. - Botons anterior i següent amb nom («Diapositiva anterior», «Diapositiva següent»), d'almenys 24 per 24 píxels CSS.
- Cada diapositiva en un contenidor amb
role="group",aria-roledescription="diapositiva"i nom («2 de 5» o el títol de la notícia). - Indicadors de posició (els punts) com a botons amb nom («Vés a la diapositiva 3») o com a pestanyes si segueixen el patró
tablist. - Diapositives no visibles amagades a l'arbre (
aria-hidden="true"ohidden) i sense elements enfocables, perquè Tab no recorri enllaços invisibles. - Anunci de canvis: si la persona prem «següent», la regió de diapositives pot portar
aria-live="polite"mentre la rotació automàtica estigui aturada, iaria-live="off"mentre giri tota sola, per no interrompre cada pocs segons.
Exemple
<section aria-roledescription="carrusel" aria-label="Notícies destacades">
<button type="button" aria-pressed="false">Posa en pausa la rotació</button>
<button type="button">Diapositiva anterior</button>
<button type="button">Diapositiva següent</button>
<div aria-live="off">
<div role="group" aria-roledescription="diapositiva" aria-label="1 de 3">…</div>
<div role="group" aria-roledescription="diapositiva" aria-label="2 de 3" hidden>…</div>
<div role="group" aria-roledescription="diapositiva" aria-label="3 de 3" hidden>…</div>
</div>
</section>I respecta prefers-reduced-motion: si la persona ha demanat menys moviment al seu sistema, el carrusel no ha de girar tot sol (ho veurem al curs de CSS).
L'alternativa més accessible, i sovint més eficaç, és no fer-lo girar: una graella estàtica amb les tres notícies.
Taules interactives
Sobre la base de la taula de dades accessible del primer curs, les taules amb ordenació, filtres i accions per fila hi afegeixen requisits:
- Ordenació: el control d'ordenar ha de ser un
<button>dins del<th>, amb nom («Ordena per data») i, al<th>,aria-sort="ascending|descending|none"actualitzat. En reordenar, anuncia el resultat en una regió d'estat («Ordenat per data, de la més recent a la més antiga»). - Accions per fila: cada botó necessita un nom que identifiqui la fila («Edita l'expedient 2024/0123»), perquè fora de context «Edita» repetit vint vegades no serveix. Es pot fer amb text amagat de manera accessible o amb
aria-labelledbycombinant el text del botó i la cel·la identificadora. - Selecció de files: caselles de selecció natives amb etiqueta («Selecciona l'expedient 2024/0123») i una casella de capçalera «Selecciona-ho tot» que reflecteixi l'estat mixt amb
indeterminate. - Paginació i filtres: anuncia en una regió d'estat el nombre de resultats després de cada canvi; la paginació és un
<nav aria-label="Paginació">amb enllaços o botons iaria-current="page"a la pàgina actual. - Graelles editables (full de càlcul): només llavors el rol
gridde l'APG, amb navegació per cel·les amb fletxes i una sola parada de Tab. Per a una taula que es llegeix, encara que tingui botons, el correcte és una<table>normal. Veuràs el patrógrida fons a la lliçó següent.
Error freqüent
Fer clicable tota la fila (<tr onclick>) per obrir-ne el detall, sense cap enllaç ni botó a dins. No s'hi pot arribar amb teclat ni té rol ni nom. Posa un enllaç real a la cel·la principal (l'identificador o el títol) i, si vols, amplia'n l'àrea clicable amb CSS; la fila sencera com a objectiu és un extra per al ratolí, mai l'únic camí.
Arrossegar i deixar anar i 2.5.7
WCAG 2.2 va afegir el criteri 2.5.7 Moviments d'arrossegament (AA): tota funcionalitat que faci servir un moviment d'arrossegament s'ha de poder fer amb un únic punter sense arrossegar (és a dir, amb clics o tocs), llevat que l'arrossegament sigui essencial o el determini l'agent d'usuari. Afecta reordenar llistes, moure targetes entre columnes (taulers kanban), controls lliscants, retallar imatges, ordenar prioritats i moure elements en un mapa.
Fixa't que 2.5.7 parla de punter, no de teclat: l'alternativa de teclat és exigible per 2.1.1, però a més cal una alternativa de punter sense arrossegament, perquè moltes persones amb tremolor, poca força o que fan servir un llapis o un ratolí de cap poden fer clic però no mantenir premut mentre mouen amb precisió.
Exemple
Llista de prioritats que es pot reordenar. A més de l'arrossegament, cada element ofereix botons per moure'l:
<ul aria-label="Ordre de prioritat">
<li>
Renovar el DNI
<button type="button" aria-label="Puja Renovar el DNI">↑</button>
<button type="button" aria-label="Baixa Renovar el DNI">↓</button>
</li>
…
</ul>
<p role="status"></p>Després de cada moviment s'anuncia «Renovar el DNI mogut a la posició 2 de 4» a la regió d'estat i el focus es manté al botó premut (que ara és a la nova posició; si l'script mou l'element al DOM, torna a cridar focus() sobre el botó, perquè el navegador el pot perdre). Altres alternatives conformes: un menú «Mou a…» amb destinacions, un camp numèric de posició, o seleccionar l'element i després prémer la destinació (dos clics).
Per als controls lliscants, l'<input type="range"> natiu compleix de sèrie: admet clic en qualsevol punt de la pista i fletxes amb teclat. Les excepcions de 2.5.7 són estretes: dibuixar a mà alçada és essencial; reordenar una llista, no.
Punt clau
Carrusel: pausa, botons amb nom, diapositives amagades a l'arbre i sense rotació si la persona prefereix menys moviment. Taula interactiva: botons d'ordenar amb aria-sort, noms d'acció que identifiquen la fila, anuncis d'estat. Arrossegament: sempre una alternativa de clics o botons (2.5.7) i de teclat (2.1.1).
Com comprovar-ho
- Carrega la pàgina i espera: si alguna cosa es mou més de 5 segons sense un control de pausa accessible amb teclat, falla 2.2.2.
- Tabula pel carrusel: no hi ha d'haver parades en diapositives invisibles.
- A la taula, ordena amb teclat i escolta l'anunci; obre la llista de botons del lector i verifica que cada acció identifica la seva fila.
- Intenta cada operació d'arrossegament només amb clics i només amb teclat; si alguna és impossible, falla 2.5.7 o 2.1.1.
- Mesura els botons petits dels carrusels i les taules: 24 per 24 píxels CSS o una separació equivalent (2.5.8).
Resum
- Un carrusel automàtic necessita control de pausa (2.2.2), botons amb nom, diapositives amagades a l'arbre i respecte per
prefers-reduced-motion; la graella estàtica sol ser millor. - A les taules interactives, els botons d'ordenar porten
aria-sort, les accions de fila identifiquen la fila i els canvis s'anuncien ambrole="status". - Una fila clicable sense enllaç ni botó a dins és inaccessible; l'enllaç real va a la cel·la principal.
- 2.5.7 exigeix una alternativa de punter sense arrossegament (clics, botons, menú «Mou a») per a tota funció d'arrossegar i deixar anar no essencial, a més del teclat.
- Els objectius d'aquests components han de mesurar almenys 24 per 24 píxels CSS (2.5.8).
Portes 6 lliçons d'aquest curs: que no es perdin
Crea el teu compte gratis i desa el que ja has llegit i segueix el curs amb tot:
- El test d'aquesta lliçó (3 preguntes) per comprovar el que has après
- Exercicis pràctics amb pàgines reals
- El teu progrés desat: continues on ho vas deixar, des de qualsevol dispositiu
- Constància del curs amb les hores i certificat gratuït del nivell 3 quan aprovis l'examen
Entres amb el teu compte de Google o només amb el teu correu electrònic. No cal contrasenya.