Lliçó 3 de 10 · 14 min de lectura · Revisada el 26/10/2026
Com s'anuncia un camp: nom accessible, estats i 2.5.3 Etiqueta en el nom
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.
A la lliçó anterior vam aprendre a associar etiquetes, grups i ajudes amb <label>, <fieldset> i aria-describedby. Ara mirem el resultat des de l'altre costat: què rep de debò la tecnologia de suport. Com vam veure al curs N3-C1, el navegador construeix un arbre d'accessibilitat i, per a cada camp, exposa un rol, un nom, una descripció, uns estats i un valor. Si entens com es calcula cadascun, depuraràs en minuts errades que semblen misterioses i compliràs dos criteris que s'incompleixen sovint sense que ningú se n'adoni: el 4.1.2 Nom, funció, valor (A) i el 2.5.3 Etiqueta en el nom (A).
Què anuncia un lector de pantalla en arribar a un camp
Quan el focus entra en un camp, el lector compon el seu anunci amb les propietats que li lliura el navegador. L'ordre i la redacció canvien entre NVDA, JAWS, VoiceOver i TalkBack, però els ingredients són els mateixos.
| Propietat | D'on surt | Exemple d'anunci |
|---|---|---|
| Rol | L'element i el seu type | «quadre d'edició», «casella de selecció», «quadre combinat» |
| Nom | aria-labelledby, aria-label, <label>, title, placeholder | «Correu electrònic» |
| Descripció | aria-describedby (o title si no s'ha fet servir com a nom) | «T'enviarem aquí el justificant» |
| Estats | required, aria-invalid, disabled, readonly, checked | «obligatori», «no vàlid», «no disponible», «marcat» |
| Valor | El que s'ha escrit o l'opció triada | «30001» |
Sense nom, el lector només diu «quadre d'edició». Amb un nom equivocat, la persona escriu amb tota confiança la dada que no és. Tots dos casos incompleixen el 4.1.2, i el segon és més traïdor perquè ningú no el detecta mirant la pantalla.
Com calcula el navegador el nom
El càlcul el defineixen dues especificacions del W3C: Accessible Name and Description Computation (l'algorisme general) i HTML Accessibility API Mappings (com s'aplica a cada element HTML). Per a un camp de text, el navegador prova les fonts en un ordre fix i es queda amb la primera que dona un text no buit. Les altres es descarten: no se sumen.
Infografia · Procés
Com calcula el navegador el nom d'un camp
Prova les fonts en aquest ordre i es queda amb la primera que dona text; les altres no se sumen
- Pas 1: aria-labelledbyGuanya a tot: uneix els textos dels id citats, en l'ordre en què s'escriuen
- Pas 2: aria-labelText literal invisible; si existeix, l'etiqueta visible deixa de comptar
- Pas 3: label o legend natiusEl recomanat: label amb for a cada camp i legend a cada fieldset
- Pas 4: titleÚltim recurs: només es veu en passar el ratolí, mai amb teclat ni tàctil
- Pas 5: placeholderSi no hi ha res més; desapareix en escriure i no és una etiqueta
- Pas 6: Sense nomEl lector només diu «quadre d'edició»: incompleix el 4.1.2
Llegeix la infografia com a text
Procés de sis passos que segueix el navegador per calcular el nom accessible d'un camp de text. Primer mira aria-labelledby: si existeix, guanya a tot i uneix els textos dels id citats en l'ordre escrit. Si no, fa servir aria-label, un text invisible que anul·la l'etiqueta visible. Després, l'opció recomanada: el label associat amb for o, en un fieldset, la seva legend. Si no hi ha res d'això, recorre a l'atribut title, que només es veu en passar el ratolí. En penúltim lloc fa servir el placeholder, que desapareix en escriure. Si cap font no dona text, el camp queda sense nom i el lector només diu «quadre d'edició», cosa que incompleix el 4.1.2 Nom, funció, valor.
aria-labelledby substitueix, no afegeix
aria-labelledby guanya a tot, inclòs el <label> visible. És útil per compondre el nom amb diversos textos de la pàgina, però fet servir a la lleugera esborra l'etiqueta original.
Exemple
Incorrecte: es va voler «afegir context» i el camp va passar a dir-se només «Dades del sol·licitant».
<h2 id="sec-solicitante">Dades del sol·licitant</h2>
<label for="dni">DNI o NIE</label>
<input id="dni" name="dni" aria-labelledby="sec-solicitante">Correcte, quan de debò cal compondre el nom: una taula de comanda on cada fila té un camp de quantitat. Els id es concatenen en l'ordre en què s'escriuen.
<th id="col-cantidad" scope="col">Quantitat</th>
…
<th id="prod-3" scope="row">Motxilla escolar blava</th>
<td><input type="text" inputmode="numeric"
aria-labelledby="col-cantidad prod-3"></td>
<!-- Nom calculat: «Quantitat Motxilla escolar blava» -->aria-label trepitja l'etiqueta visible
aria-label va segon. Si un camp té alhora un <label> visible i un aria-label, el lector anuncia l'aria-label i l'etiqueta que veu la persona deixa de fer-se servir com a nom del camp. És la causa més comuna d'incompliment del 2.5.3, com veurem de seguida.
title i placeholder: els últims recursos
Només quan no hi ha res de l'anterior es recorre a title i, en últim lloc, al placeholder. Que el navegador els faci servir com a nom no els converteix en bones etiquetes: title només es veu en passar el ratolí (mai amb teclat ni a les pantalles tàctils) i el placeholder desapareix en escriure, com vam veure a la lliçó anterior.
Error freqüent
Components reutilitzables que generen sempre el mateix id. Si un formulari inclou dues vegades el component «Adreça» (enviament i facturació) i tots dos fan servir id="cp", els dos <label for="cp"> apunten al primer camp i el segon queda sense nom. A React fes servir useId(); en altres entorns, genera els id amb un prefix per instància. El validador d'HTML del W3C i axe detecten els id duplicats.
2.5.3 Etiqueta en el nom: el que es veu és el que es diu
Qui fa servir control per veu (Voice Control a macOS i iOS, Voice Access a Android, Dragon a Windows) activa els controls dient-ne el nom: veu un botó que diu «Envia la sol·licitud» i ho diu en veu alta. Si el nom accessible d'aquest botó és un altre, el programa no el troba. Per això el 2.5.3 exigeix que, als components que tenen una etiqueta visible amb text, el nom accessible contingui aquest text. La tècnica recomanada és que el nom comenci pel text visible.
- Visible «Envia la sol·licitud» i
aria-label="Envia la sol·licitud d'ajuda escolar": compleix, perquè el conté i comença igual. - Visible «Envia la sol·licitud» i
aria-label="Tramita": incompleix. - Visible «Codi postal» i
aria-label="CP": incompleix, i a més el lector anuncia una sigla que la persona no ha vist. - Visible «Nom:» amb el nom accessible «Nom»: compleix; la puntuació i les majúscules no es consideren rellevants per a aquest criteri.
Els botons que només tenen una icona (una lupa, una paperera) no tenen etiqueta visible amb text, així que el 2.5.3 no s'hi aplica, però continuen necessitant un nom pel 4.1.2. Tria el que diria qualsevol persona en veure'l: «Cerca», «Elimina».
Punt clau
La regla pràctica és senzilla: si el control ja té text visible, no hi afegeixis aria-label. Si de debò necessites més context per a qui fa servir lector de pantalla, afegeix-lo darrere del text visible (amb aria-describedby o amb text visualment ocult al final), mai en el seu lloc.
Mode formulari: per què es perden les instruccions
Els lectors de pantalla d'escriptori tenen dues maneres de treballar. En el mode de navegació (o exploració), la persona recorre tot el contingut amb fletxes i dreceres. En entrar en un camp de text passen al mode de focus (NVDA) o de formularis (JAWS) perquè les tecles escriguin en lloc de navegar. En aquest mode, i sempre que s'avança amb Tab, només se sent el que pertany al control enfocat: nom, rol, estats i descripció.
Conseqüència directa: un paràgraf solt entre dos camps («La contrasenya ha de tenir almenys 8 caràcters») no se sent si ningú no l'associa al camp. La persona no ho sabrà fins que el formulari la rebutgi. El mateix passa amb les instruccions col·locades després del botó d'enviar o en una columna lateral.
- L'imprescindible per emplenar el camp va al seu nom o a la seva descripció.
- El nom, curt i estable: «Contrasenya nova». El format i les regles, a la descripció.
- Les instruccions generals del formulari, abans del primer camp, perquè es llegeixin en el mode de navegació abans de començar.
Estats que també s'anuncien
Els estats completen l'anunci i tenen els seus propis paranys:
requiredexposa l'estat «obligatori» i activa la validació nativa;aria-required="true"només exposa l'estat. Fes servir el primer: encara que desactivis les bombolles natives ambnovalidate,requiredcontinua exposant l'estat «obligatori»;aria-requiredqueda per a controls personalitzats que no admetenrequired.aria-invalid="true"es posa només després de validar i només als camps que fallen. Un formulari que neix amb tots els camps «no vàlids» resta credibilitat a l'estat.disabledtreu el camp de l'ordre de tabulació: qui navega amb Tab no el sent. Si una dada precarregada importa (el NIF del titular que no es pot canviar), fes servirreadonly, que es pot enfocar i llegir.
Error freqüent
Deshabilitar el botó «Envia» fins que el formulari sigui vàlid. Qui fa servir lector de pantalla no el troba en tabular, qui hi veu bé no sap què li falta i ningú no rep un missatge d'error que l'orienti. Deixa el botó actiu i mostra els errors quan es prem, com vam veure a la lliçó de validació. Si per algun motiu necessites indicar que no està disponible, aria-disabled="true" el manté enfocable i anunciat.
Com inspeccionar-ho
No cal endevinar: el navegador mostra el resultat del càlcul. A les eines per a desenvolupadors de Chrome i Edge, pestanya Elements, tauler Accessibility, l'apartat de propietats calculades indica el rol, el nom i de quina font ha sortit cada part (aria-labelledby, aria-label, label, title o placeholder), a més de la descripció i els estats. Firefox té el seu propi inspector d'accessibilitat. Després, escolta el camp amb un lector de pantalla real: és el que sentirà la persona.
Prova-ho tu
Obre a Chrome un formulari que coneguis (el de contacte del teu web o el d'una seu electrònica). Fes clic amb el botó dret sobre tres camps, tria «Inspecciona» i, al tauler Accessibility, anota per a cadascun el nom calculat i la seva font. N'hi ha algun que agafi el nom del placeholder o del title? N'hi ha algun que tingui un aria-label diferent del text visible? Aquestes són les teves primeres troballes.
Resum
- El lector anuncia rol, nom, estats, descripció i valor; tot surt del codi, no de la pantalla.
- El nom s'agafa de la primera font disponible:
aria-labelledby,aria-label,<label>,titleiplaceholder, en aquest ordre; no se sumen. - El 2.5.3 exigeix que el nom contingui el text visible, idealment al principi: si hi ha text visible, no hi afegeixis
aria-label. - En mode formulari només se sent el que està associat al camp: les instruccions soltes entre camps es perden.
- Comprova el nom calculat al tauler d'accessibilitat del navegador i escolta'l amb un lector de pantalla.
Portes 8 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.