FreeToGenerate.com

81 de 139 elementos ya tienen un role. Volver a escribirlo está desaconsejado.

¿Hace falta que escribas ese role?

No hace falta: el elemento ya tiene ese role

Es marcado válido, no un error. La especificación marca como NOT RECOMMENDED asignar el role implícito de un elemento, porque no aporta nada y puede desincronizarse si el marcado cambia después.

Role implícito
button
Acepta
Solo un conjunto concreto

La especificación dice: Roles: checkbox , combobox , gridcell , link , menuitem , menuitemcheckbox , menuitemradio , option , radio , separator , slider , switch , tab , or treeitem . ( button is also allowed, but NOT RECOMMENDED .) Global aria-* attributes and any aria-* attributes applicable to the allowed roles. If the button is the first child of a select element: No role or aria-* attributes

Qué elementos te dan ese role

Ya lo tienen, sin atributo alguno

button, input type=button, input type=image, input type=reset, input type=submit

Lo aceptan si se lo pides

a with href, area without href, img, input type=image, input type=reset, input type=submit

Lo que dice la tabla en conjunto

elementos HTML cubiertos
139
ya tienen un role
81
no aceptan ningún otro role
51
tienen una regla condicional
10

La respuesta más útil suele ser que no necesitas role ninguno. 81 de los 139 elementos ya llevan uno, y la cabecera de la propia tabla dice que escribirlo en el marcado es NOT RECOMMENDED: un elemento button ya es un botón y un h1 ya es un encabezado.

Diez elementos tienen reglas que dependen de su entorno, y esta página se niega a dar un veredicto sobre ellos en vez de adivinar. td, th y tr dependen del role de la tabla que los contiene; div depende de si es hijo directo de un dl; figure depende de si tiene un figcaption.

Todos los elementos de la tabla

Mostrando 139 / 139

ElementoRole implícitoAcepta
a with hreflinkbutton, checkbox, menuitem, menuitemcheckbox, menuitemradio, option, radio, switch, tab, treeitem
a without hrefgenericCualquier role
abbrningunoCualquier role
addressgroupCualquier role
area with hreflinkNingún role más que el suyo
area without hrefgenericbutton, link
articlearticleapplication, document, feed, main, none, presentation, region
asidecomplementaryfeed, none, note, presentation, region, search
audioningunoapplication
autonomous custom elementningunoCondicional
bgenericCualquier role
baseningunoNingún role más que el suyo
bdigenericCualquier role
bdogenericCualquier role
blockquoteblockquoteCualquier role
bodygenericNingún role más que el suyo
brningunonone, presentation
buttonbuttoncheckbox, combobox, gridcell, link, menuitem, menuitemcheckbox, menuitemradio, option, radio, separator, slider, switch, tab, treeitem
canvasningunoCualquier role
captioncaptionNingún role más que el suyo
citeningunoCualquier role
codecodeCualquier role
colningunoNingún role más que el suyo
colgroupningunoNingún role más que el suyo
datagenericCualquier role
datalistlistboxNingún role más que el suyo
ddningunoNingún role más que el suyo
deldeletionCualquier role
detailsgroupNingún role más que el suyo
dfntermCualquier role
dialogdialogalertdialog
divgenericCondicional
dlningunogroup, list, none, presentation
dtningunolistitem
ememphasisCualquier role
embedningunoapplication, document, img, image, none, presentation
fieldsetgroupnone, presentation, radiogroup
figcaptionningunogroup, none
figurefigureCondicional
footerningunogroup, presentation, none
formformnone, presentation, search
form-associated custom elementningunoCondicional
h1 to h6headingnone, presentation, tab
headningunoNingún role más que el suyo
headerningunogroup, none, presentation
hgroupgroupCualquier role
hrseparatornone, presentation
htmlgenericNingún role más que el suyo
igenericCualquier role
iframeningunoapplication, document, img, image, none, presentation
imgningunobutton, checkbox, link, math, menuitem, menuitemcheckbox, menuitemradio, meter, option, progressbar, radio, scrollbar, separator, slider, switch, tab, treeitem
img with no accessible nameningunoCondicional
input type=buttonbuttoncheckbox, combobox, gridcell, link, menuitem, menuitemcheckbox, menuitemradio, option, radio, separator, slider, switch, tab, treeitem
input type=checkboxcheckboxmenuitemcheckbox, option, switch
input type=colorningunoNingún role más que el suyo
input type=dateningunoNingún role más que el suyo
input type=datetime-localningunoNingún role más que el suyo
input type=email with no list attributetextboxNingún role más que el suyo
input type=fileningunoNingún role más que el suyo
input type=hiddenningunoNingún role más que el suyo
input type=imagebuttonbutton, checkbox, gridcell, link, menuitem, menuitemcheckbox, menuitemradio, option, radio, separator, slider, switch, tab, treeitem
input type=monthningunoNingún role más que el suyo
input type=numberspinbuttonNingún role más que el suyo
input type=passwordningunoNingún role más que el suyo
input type=radioradiomenuitemradio
input type=rangesliderNingún role más que el suyo
input type=resetbuttonbutton, checkbox, combobox, gridcell, link, menuitem, menuitemcheckbox, menuitemradio, option, radio, separator, slider, switch, tab, treeitem
input type=search , with no list attributesearchboxNingún role más que el suyo
input type=submitbuttonbutton, checkbox, combobox, gridcell, link, menuitem, menuitemcheckbox, menuitemradio, option, radio, separator, slider, switch, tab, treeitem
input type=tel , with no list attributetextboxNingún role más que el suyo
input type=text or with a missing or invalid type , with no list attributetextboxcombobox, searchbox, spinbutton
input type=text , search , tel , url , email , or with a missing or invalid type , with a list attributecomboboxNingún role más que el suyo
input type=timeningunoNingún role más que el suyo
input type=url with no list attributetextboxNingún role más que el suyo
input type=weekningunoNingún role más que el suyo
insinsertionCualquier role
kbdningunoCualquier role
labelningunoCondicional
legendningunoNingún role más que el suyo
liningunoNingún role más que el suyo
linkningunoNingún role más que el suyo
mainmainNingún role más que el suyo
mapningunoNingún role más que el suyo
markningunoCualquier role
mathmathNingún role más que el suyo
menulistgroup, listbox, menu, menubar, none, presentation, radiogroup, tablist, toolbar, tree
metaningunoNingún role más que el suyo
metermeterNingún role más que el suyo
navnavigationmenu, menubar, none, presentation, tablist
noscriptningunoNingún role más que el suyo
objectningunoapplication, document, img, image
ollistgroup, listbox, menu, menubar, none, presentation, radiogroup, tablist, toolbar, tree
optgroupgroupNingún role más que el suyo
option element that is in a list of options or that represents a suggestion in a datalistoptionNingún role más que el suyo
outputstatusCualquier role
pparagraphCualquier role
paramningunoNingún role más que el suyo
pictureningunoNingún role más que el suyo
pregenericCualquier role
progressprogressbarNingún role más que el suyo
qgenericCualquier role
rpningunoCualquier role
rtningunoCualquier role
rubyningunoCualquier role
sdeletionCualquier role
sampgenericCualquier role
scriptningunoNingún role más que el suyo
searchsearchform, group, none, presentation, region
sectionregionalert, alertdialog, application, banner, complementary, contentinfo, dialog, document, feed, group, log, main, marquee, navigation, none, note, presentation, search, status, tabpanel
select (with NO multiple attribute and NO size attribute having value greater than 1 )comboboxmenu
select (with a multiple attribute or a size attribute having value greater than 1 )listboxNingún role más que el suyo
selectedcontentgenericCondicional
slotningunoNingún role más que el suyo
smallgenericCualquier role
sourceningunoNingún role más que el suyo
spangenericCualquier role
strongstrongCualquier role
styleningunoNingún role más que el suyo
subsubscriptCualquier role
summaryningunoNingún role más que el suyo
supsuperscriptCualquier role
SVGgraphics-documentCualquier role
tabletableCualquier role
tbodyrowgroupCualquier role
tdningunoCondicional
templateningunoNingún role más que el suyo
textareatextboxNingún role más que el suyo
tfootrowgroupCualquier role
thningunoCondicional
theadrowgroupCualquier role
timetimeCualquier role
titleningunoNingún role más que el suyo
trrowCondicional
trackningunoNingún role más que el suyo
ugenericCualquier role
ullistgroup, listbox, menu, menubar, none, presentation, radiogroup, tablist, toolbar, tree
varningunoCualquier role
videoningunoapplication
wbrningunonone, presentation

Todo sale de la tabla de uso de atributos ARIA por elemento HTML de la especificación ARIA in HTML, y cada fila lleva la frase original. No se sube nada. Instantánea tomada el 2026-08-03

También disponible en: English · Português · Français · العربية

Roles ARIA: cuál necesita cada elemento y cuál ya tiene

Consulta cualquier elemento HTML y cualquier role ARIA y averigua si debes escribirlo, si puedes, o si el elemento ya es esa cosa.

¿Qué es un role de ARIA?

Un role de ARIA le dice a la tecnología de asistencia qué es un trozo de marcado: un botón, una zona de navegación, un encabezado, un diálogo. Se escribe como role="button" y cambia cómo lo anuncia un lector de pantalla y qué puede hacer con él quien lo usa.

WAI-ARIA define los roles. Otra especificación distinta, ARIA in HTML, responde a la pregunta con la que llega la gente de verdad —qué roles pueden ir en qué elemento HTML— y lo hace en una tabla que cubre 139 elementos. Esa tabla es la base de esta página y es la que conviene leer, porque los roles no son intercambiables entre elementos.

Lo más útil de todo pasa fácilmente desapercibido: 81 de esos 139 elementos ya llevan un role sin atributo ninguno, y la cabecera de la propia tabla dice que asignarlos en el marcado está desaconsejado. Un elemento button ya es un botón. Un h1 ya es un encabezado con su nivel. Casi siempre, la respuesta correcta a «qué role pongo aquí» es ninguno.

Cómo usarla

  1. Escribe el elemento. Solo el nombre de la etiqueta; los signos de menor y mayor y las mayúsculas dan igual. Donde la especificación matiza un elemento, el nombre a secas lleva a la fila matizada: escribir a te da la regla de a with href.
  2. Escribe el role que ibas a poner. Obtienes una de cuatro respuestas: el elemento ya lo tiene, está permitido, no se permite aquí, o la regla es condicional y no hay respuesta rotunda.
  3. Y luego mira el índice inverso de abajo. Lista los elementos que ya tienen ese role sin atributo, aparte de los que simplemente lo aceptan. Suele ser la mejor forma de resolver el problema.

Redundante no es lo mismo que incorrecto

Escribir role="button" en un elemento button es marcado válido. No es un error y no rompe nada. La especificación lo marca como desaconsejado porque no aporta nada y porque puede desincronizarse: si luego cambias el elemento, el role se queda ahí describiendo algo que ya no existe. Esta página informa de ese caso como un veredicto propio en vez de mezclarlo con los errores de verdad, porque decirle a alguien que su marcado correcto está roto es peor que no decir nada.

Los casos realmente prohibidos son otra cosa. 51 elementos no aceptan ningún role más allá del que ya tienen —main, body, html, base, caption y compañía—, así que role="navigation" en un main sencillamente no se permite. Otros 37 solo aceptan un conjunto concreto: un a with href admite button, checkbox, menuitem, menuitemcheckbox, menuitemradio, option, radio, switch, tab o tree, y nada más. Y 41 elementos, los lienzos en blanco como span y abbr, aceptan cualquier role.

Quedan los roles en sí, de los que la tabla nombra 75. Si necesitas uno, el índice inverso es el atajo: pregunta qué elementos ya son un botón antes de decidir fabricar uno con un div.

Diez elementos sobre los que esta página no se pronuncia

Diez de las 139 reglas están escritas con una condición, y la herramienta se niega a dar un veredicto sobre ellas en vez de adivinar. td, th y tr dependen del role del elemento table que los contiene. div depende de si es hijo directo de un dl. figure depende de si tiene un figcaption como descendiente. label depende de si está asociado a un elemento etiquetable.

En todos esos casos la especificación se abstiene de dar una regla incondicional, así que una herramienta que soltara un sí o un no seguro se la estaría inventando. En su lugar se muestra la frase original, para que la leas contra tu marcado real. Esa es la respuesta honesta, y por eso la página enseña el texto de origen de cada elemento y no solo su propio resumen.

Dos límites más que conviene decir. Esto es solo la tabla de elementos: ARIA in HTML tiene otras dos, una sobre características de HTML y otra sobre qué descendientes admite cada role, y ninguna está cubierta aquí. Y la página te dice qué está permitido, no qué es buena idea: un role permitido puede seguir siendo el equivocado, y ninguna tabla sabe si tu componente se comporta de verdad como una pestaña.

¿Por qué es gratis?

La tabla viaja con la página como unos pocos kilobytes y cada consulta corre en tu propio navegador. Nada de lo que escribes se sube, no se registra nada y no hay cuenta que crear.

Sin registro, sin límites y sin marca de agua en nada de lo que copies.