FreeToGenerate.com

81 de 139 elementos já têm um role. Escrevê-lo de novo é desaconselhado.

Você precisa mesmo escrever esse role?

Não precisa: o elemento já tem esse role

Isso é marcação válida, não um erro. A especificação marca como NOT RECOMMENDED atribuir o role implícito de um elemento, porque não acrescenta nada e pode se desencontrar se a marcação mudar depois.

Role implícito
button
Aceita
Somente um conjunto específico

A especificação diz: 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

Quais elementos lhe dão esse role

Já têm, sem atributo nenhum

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

Aceitam se você pedir

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

O que a tabela diz no conjunto

elementos HTML cobertos
139
já têm um role
81
não aceitam outro role
51
têm regra condicional
10

A resposta mais útil costuma ser que você não precisa de role algum. 81 dos 139 elementos já carregam um, e o cabeçalho da própria tabela diz que escrevê-lo na marcação é NOT RECOMMENDED: um elemento button já é um botão, um h1 já é um cabeçalho.

Dez elementos têm regras que dependem do entorno, e esta página se recusa a dar um veredito sobre eles em vez de chutar. td, th e tr dependem do role da tabela que os contém; div depende de ser filho direto de um dl; figure depende de ter um figcaption.

Todos os elementos da tabela

Mostrando 139 / 139

ElementoRole implícitoAceita
a with hreflinkbutton, checkbox, menuitem, menuitemcheckbox, menuitemradio, option, radio, switch, tab, treeitem
a without hrefgenericQualquer role
abbrnenhumQualquer role
addressgroupQualquer role
area with hreflinkNenhum role além do próprio
area without hrefgenericbutton, link
articlearticleapplication, document, feed, main, none, presentation, region
asidecomplementaryfeed, none, note, presentation, region, search
audionenhumapplication
autonomous custom elementnenhumCondicional
bgenericQualquer role
basenenhumNenhum role além do próprio
bdigenericQualquer role
bdogenericQualquer role
blockquoteblockquoteQualquer role
bodygenericNenhum role além do próprio
brnenhumnone, presentation
buttonbuttoncheckbox, combobox, gridcell, link, menuitem, menuitemcheckbox, menuitemradio, option, radio, separator, slider, switch, tab, treeitem
canvasnenhumQualquer role
captioncaptionNenhum role além do próprio
citenenhumQualquer role
codecodeQualquer role
colnenhumNenhum role além do próprio
colgroupnenhumNenhum role além do próprio
datagenericQualquer role
datalistlistboxNenhum role além do próprio
ddnenhumNenhum role além do próprio
deldeletionQualquer role
detailsgroupNenhum role além do próprio
dfntermQualquer role
dialogdialogalertdialog
divgenericCondicional
dlnenhumgroup, list, none, presentation
dtnenhumlistitem
ememphasisQualquer role
embednenhumapplication, document, img, image, none, presentation
fieldsetgroupnone, presentation, radiogroup
figcaptionnenhumgroup, none
figurefigureCondicional
footernenhumgroup, presentation, none
formformnone, presentation, search
form-associated custom elementnenhumCondicional
h1 to h6headingnone, presentation, tab
headnenhumNenhum role além do próprio
headernenhumgroup, none, presentation
hgroupgroupQualquer role
hrseparatornone, presentation
htmlgenericNenhum role além do próprio
igenericQualquer role
iframenenhumapplication, document, img, image, none, presentation
imgnenhumbutton, checkbox, link, math, menuitem, menuitemcheckbox, menuitemradio, meter, option, progressbar, radio, scrollbar, separator, slider, switch, tab, treeitem
img with no accessible namenenhumCondicional
input type=buttonbuttoncheckbox, combobox, gridcell, link, menuitem, menuitemcheckbox, menuitemradio, option, radio, separator, slider, switch, tab, treeitem
input type=checkboxcheckboxmenuitemcheckbox, option, switch
input type=colornenhumNenhum role além do próprio
input type=datenenhumNenhum role além do próprio
input type=datetime-localnenhumNenhum role além do próprio
input type=email with no list attributetextboxNenhum role além do próprio
input type=filenenhumNenhum role além do próprio
input type=hiddennenhumNenhum role além do próprio
input type=imagebuttonbutton, checkbox, gridcell, link, menuitem, menuitemcheckbox, menuitemradio, option, radio, separator, slider, switch, tab, treeitem
input type=monthnenhumNenhum role além do próprio
input type=numberspinbuttonNenhum role além do próprio
input type=passwordnenhumNenhum role além do próprio
input type=radioradiomenuitemradio
input type=rangesliderNenhum role além do próprio
input type=resetbuttonbutton, checkbox, combobox, gridcell, link, menuitem, menuitemcheckbox, menuitemradio, option, radio, separator, slider, switch, tab, treeitem
input type=search , with no list attributesearchboxNenhum role além do próprio
input type=submitbuttonbutton, checkbox, combobox, gridcell, link, menuitem, menuitemcheckbox, menuitemradio, option, radio, separator, slider, switch, tab, treeitem
input type=tel , with no list attributetextboxNenhum role além do próprio
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 attributecomboboxNenhum role além do próprio
input type=timenenhumNenhum role além do próprio
input type=url with no list attributetextboxNenhum role além do próprio
input type=weeknenhumNenhum role além do próprio
insinsertionQualquer role
kbdnenhumQualquer role
labelnenhumCondicional
legendnenhumNenhum role além do próprio
linenhumNenhum role além do próprio
linknenhumNenhum role além do próprio
mainmainNenhum role além do próprio
mapnenhumNenhum role além do próprio
marknenhumQualquer role
mathmathNenhum role além do próprio
menulistgroup, listbox, menu, menubar, none, presentation, radiogroup, tablist, toolbar, tree
metanenhumNenhum role além do próprio
metermeterNenhum role além do próprio
navnavigationmenu, menubar, none, presentation, tablist
noscriptnenhumNenhum role além do próprio
objectnenhumapplication, document, img, image
ollistgroup, listbox, menu, menubar, none, presentation, radiogroup, tablist, toolbar, tree
optgroupgroupNenhum role além do próprio
option element that is in a list of options or that represents a suggestion in a datalistoptionNenhum role além do próprio
outputstatusQualquer role
pparagraphQualquer role
paramnenhumNenhum role além do próprio
picturenenhumNenhum role além do próprio
pregenericQualquer role
progressprogressbarNenhum role além do próprio
qgenericQualquer role
rpnenhumQualquer role
rtnenhumQualquer role
rubynenhumQualquer role
sdeletionQualquer role
sampgenericQualquer role
scriptnenhumNenhum role além do próprio
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 )listboxNenhum role além do próprio
selectedcontentgenericCondicional
slotnenhumNenhum role além do próprio
smallgenericQualquer role
sourcenenhumNenhum role além do próprio
spangenericQualquer role
strongstrongQualquer role
stylenenhumNenhum role além do próprio
subsubscriptQualquer role
summarynenhumNenhum role além do próprio
supsuperscriptQualquer role
SVGgraphics-documentQualquer role
tabletableQualquer role
tbodyrowgroupQualquer role
tdnenhumCondicional
templatenenhumNenhum role além do próprio
textareatextboxNenhum role além do próprio
tfootrowgroupQualquer role
thnenhumCondicional
theadrowgroupQualquer role
timetimeQualquer role
titlenenhumNenhum role além do próprio
trrowCondicional
tracknenhumNenhum role além do próprio
ugenericQualquer role
ullistgroup, listbox, menu, menubar, none, presentation, radiogroup, tablist, toolbar, tree
varnenhumQualquer role
videonenhumapplication
wbrnenhumnone, presentation

Tudo vem da tabela de uso de atributos ARIA por elemento HTML da especificação ARIA in HTML, e cada linha traz a frase original. Nada é enviado. Retrato tirado em 2026-08-03

Também disponível em: English · Español · Français · العربية

Roles ARIA: qual elemento precisa de um e qual já tem

Consulte qualquer elemento HTML e qualquer role ARIA e descubra se você deve escrevê-lo, se pode, ou se o elemento já é aquilo.

O que é um role do ARIA?

Um role do ARIA diz à tecnologia assistiva o que é um pedaço de marcação: um botão, uma região de navegação, um cabeçalho, um diálogo. Você escreve role="button" e isso muda como um leitor de tela anuncia o elemento e o que a pessoa pode fazer com ele.

O WAI-ARIA define os roles. Uma segunda especificação, ARIA in HTML, responde à pergunta com que as pessoas realmente chegam — quais roles podem ir em qual elemento HTML — e faz isso numa tabela que cobre 139 elementos. É essa tabela que sustenta esta página, e é ela que vale ler, porque roles não são intercambiáveis entre elementos.

A coisa mais útil dela passa fácil despercebida: 81 desses 139 elementos já carregam um role sem atributo nenhum, e o cabeçalho da própria tabela diz que atribuí-los na marcação é desaconselhado. Um elemento button já é um botão. Um h1 já é um cabeçalho com nível. Na maior parte das vezes, a resposta certa para “qual role vai aqui” é nenhum.

Como usar

  1. Digite o elemento. Só o nome da tag — sinais de menor e maior e maiúsculas não atrapalham. Onde a especificação qualifica um elemento, o nome puro leva à linha qualificada: digitar a traz a regra de a with href.
  2. Digite o role que você ia escrever. Você recebe uma de quatro respostas: o elemento já o tem, é permitido, não é permitido aqui, ou a regra é condicional e não existe resposta direta.
  3. Depois olhe o índice inverso abaixo. Ele lista os elementos que já têm aquele role sem atributo, separados dos que apenas o aceitam. Costuma ser o melhor jeito de resolver o problema.

Redundante não é o mesmo que errado

Escrever role="button" num elemento button é marcação válida. Não é erro e nada quebra. A especificação marca isso como desaconselhado porque não acrescenta nada e porque pode se desencontrar: mude o elemento depois e o role fica lá, descrevendo algo que não existe mais. Esta página relata esse caso como veredito próprio em vez de misturá-lo com os erros de verdade, porque dizer a alguém que a marcação correta dele está quebrada é pior do que não dizer nada.

Os casos realmente proibidos são outra história. 51 elementos não aceitam role algum além do que já têm — main, body, html, base, caption e companhia —, então role="navigation" num main simplesmente não é permitido. Outros 37 aceitam só um conjunto específico: um a with href aceita button, checkbox, menuitem, menuitemcheckbox, menuitemradio, option, radio, switch, tab ou tree, e nada mais. E 41 elementos, as folhas em branco como span e abbr, aceitam qualquer role.

Sobram os roles em si, dos quais a tabela nomeia 75. Se você precisa de um, o índice inverso é o atalho: pergunte quais elementos já são um botão antes de decidir fabricar um com uma div.

Dez elementos sobre os quais esta página não se pronuncia

Dez das 139 regras são escritas com uma condição, e a ferramenta se recusa a dar um veredito sobre elas em vez de chutar. td, th e tr dependem do role do elemento table que os contém. div depende de ser filho direto de um dl. figure depende de ter um figcaption como descendente. label depende de estar associado a um elemento rotulável.

Em todos esses casos a especificação evita dar uma regra incondicional, então uma ferramenta que soltasse um sim ou não confiante estaria inventando uma. No lugar aparece a frase original, para ser lida contra a sua marcação real. Essa é a resposta honesta, e é por isso que a página mostra o texto de origem de cada elemento e não só o próprio resumo.

Mais dois limites que vale dizer. Isto é apenas a tabela de elementos: a ARIA in HTML tem outras duas, uma sobre recursos do HTML e outra sobre quais descendentes cada role admite, e nenhuma está coberta aqui. E a página diz o que é permitido, não o que é boa ideia: um role permitido ainda pode ser o errado, e nenhuma tabela sabe se o seu componente se comporta mesmo como uma aba.

Por que é grátis?

A tabela viaja com a página como alguns kilobytes e cada consulta roda no seu próprio navegador. Nada do que você digita é enviado, nada é registrado e não há conta a criar.

Sem cadastro, sem limites e sem marca d'água em nada que você copiar.