-
Notifications
You must be signed in to change notification settings - Fork 371
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Usando tags mais adequadas para acessibilidade e SEO #1580
Conversation
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Trabalho sensacional, @Rafatcb! 👏👏👏
E muito importante também! 🎉🎉🎉
Já estou enviando alguns comentários e dúvidas para adiantar, mas ainda não revisei tudo 👍
@@ -453,8 +463,7 @@ function EditMode({ contentObject, setContentObject, setComponentMode, localStor | |||
autoCorrect="off" | |||
autoCapitalize="off" | |||
spellCheck={false} | |||
placeholder="Título" | |||
aria-label="Título" | |||
placeholder="e.g. Desafios que tive no meu primeiro ano empreendendo com software" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ótimo exemplo, e eu acredito que isso pode estimular bastante publicações do mesmo tipo do exemplo, então seria legal vermos outras sugestões 🤝
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Você pensou em sugestões rotativas? Por exemplo, um array com sugestões e ao carregar a página ele pega uma aleatória e mostra? Isso passou pela minha cabeça, quando estava fazendo. Parece uma ideia legal.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Eu não tinha pensado em sugestões rotativas, mas adorei a ideia. 🎉
Dada a importância, talvez isso mereça até um PR separado.
Obrigado pela revisão, @aprendendofelipe. Já adiantei correções com alguns de seus comentários e deixei respostas para discutirmos outros. Conforme você ou outras pessoas forem comentando, vou corrigindo e deixando em commits separados para ficar mais fácil de avaliar, depois que estiver tudo certo, faço o squash. Edit: Testei o Speedreader do Brave nesse comentário e mesmo usando Acho que fizemos o melhor que podemos com as tags, e isso me parece "má implementação" do próprio leitor. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Testei o Speedreader do Brave nesse comentário e mesmo usando
article
s corretamente, ele acabou juntando todos osarticle
s como se fossem do autor do comentário principal:
Isso está me fazendo considerar melhor a ideia de deixar as tags article
não aninhadas. Talvez no TabNews, dada a importância dos comentários, faça mais sentido deixar cada tag article
isolada e com sua respectiva tag address
, data etc.
E seria até mais simples fazer isso, pois acho que resolveria tudo no ViewMode
do Contents
.
E, nesse caso, pode desconsiderar alguns dos novos comentários, pois são para o caso de continuar aninhando as tags. 🤝
Sobre o box atual dos TabCoins estarem dentro ou fora da tag, acredito que é indiferente, mas seria bom ter um outro item com o saldo de TabCoins e que ficasse "visível" para as ferramentas de acessibilidade.
@@ -453,8 +463,7 @@ function EditMode({ contentObject, setContentObject, setComponentMode, localStor | |||
autoCorrect="off" | |||
autoCapitalize="off" | |||
spellCheck={false} | |||
placeholder="Título" | |||
aria-label="Título" | |||
placeholder="e.g. Desafios que tive no meu primeiro ano empreendendo com software" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Eu não tinha pensado em sugestões rotativas, mas adorei a ideia. 🎉
Dada a importância, talvez isso mereça até um PR separado.
Fiz a modificação. Não sei se é o ideal cada comentário ser tratado como um Deixei cada conteúdo com um Acho que só ficou em aberto entrarmos em consenso sobre o Header (#1580 (comment)) e a revisão do novo código. Depois de aprovado, faço o squash e, quando em produção, abro um |
Seria legal ter a opinião de utilizadores, mas nos testes que fiz com o leitor NVDA me parece que a lista só acrescenta tempo na leitura sem acrescentar informação útil, já que sem a lista já é lido que está no marcador de navegação e avisa que cada item é um link. Com a lista, só é adicionada a informação de que entrou na lista com X itens, e depois que saiu da lista.
O melhor é colocar a Logo, o "TabNews" e "Relevantes" dentro do mesmo <PrimerHeader.Item sx={{ mr: 0 }}>
<HeaderLink href="/" aria-label="Página inicial Relevantes" aria-current={asPath === '/'}>
<CgTab size={32} />
<Box sx={{ ml: 2, display: ['none', 'block'] }}>TabNews</Box>
<Box sx={asPath === '/' || asPath.startsWith('/pagina') ? activeLinkStyle : { ml: 3 }}>
Relevantes
</Box>
</HeaderLink>
</PrimerHeader.Item>
<PrimerHeader.Item full sx={{ mr: 0 }}>
<HeaderLink
href="/recentes"
aria-current={asPath === '/recentes'}
sx={asPath.startsWith('/recentes') ? activeLinkStyle : { ml: 3 }}>
Recentes
</HeaderLink>
</PrimerHeader.Item> Note que mudei o
Em telas grandes o GitHub está assim, mas em telas pequenas não tem nem a tag
Acho que podemos começar assim. Chegou a testar no Speedreader? |
E sobre os TabCoins e TabCash, talvez seja suficiente adicionar const modes = {
tooltip: {
iconLabel: 'TabCoins',
iconSize: 16,
// ...
const { iconLabel, iconSize, text } = modes[mode];
// ...
<SquareFillIcon aria-label={iconLabel} fill="#0969da" size={iconSize} /> |
Amanhã farei as alterações no
Resposta atualizada 03/01 às 09:40 Ficou do mesmo jeito que antes. Acho que os leitores não levam as tags tão em consideração quanto deveriam. Abaixo coloquei como ficou no Firefox e no Brave, o resultado dos dois últimos commits é igual para a mesma árvore de comentários.
O resultado é:
O texto exibido no Firefox é do quarto conteúdo da página, e não é do mesmo autor que é mostrado o nome 😅. No Brave, todos os comentários são exibidos como um único texto. |
@aprendendofelipe estava implementando as modificações e surgiram umas dúvidas.
E, se for para eu colocar a mesma condição, então é melhor criar uma variável para cada cenário, certo? Por exemplo,
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Tem algum motivo para a condição do
aria-current
ser diferente da condição para aplicar oactiveLinkStyle
? Fiquei com a impressão que deveria ser a mesma condição:
O que estamos fazendo com activeLinkStyle
não está totalmente correto, pois a gente está identificando visualmente se estamos vendo a lista de "Relevantes" ou de "Recentes", independentemente da paginação, mas isso não está coerente com os links ali presentes, pois eles sempre direcionam para a página 1. Por exemplo, se estou na página 3 dos "recentes", e clicar em "recentes", que já está "ativo" pelo activeLinkStyle
, mesmo assim vai ocorrer uma navegação para a primeira página. Por todas as informações complementares presentes visualmente, não vejo isso como problema para a interface visual, mas acho que não podemos fazer da mesma forma para a acessibilidade.
Também devemos usar o aria-current
de forma coerente com o aria-label
. E a particularidade do TabNews é que a página inicial é, ao mesmo tempo, a primeira página dos relevantes. Por isso sugeri usar o aria-label="Página inicial Relevantes"
.
Então ao visitar /pagina/2
não ficaria coerente o aria-current={true}
com o aria-label="Página inicial Relevantes"
. E para ficar ainda mais correto, ao visitar a página inicial, é melhor passar aria-current="page"
no lugar de true
(diferente da minha sugestão inicial).
E vale o mesmo para os "recentes", como o link sempre vai para a primeira página, é melhor passar aria-current="page"
na primeira e false
nas demais.
Assim o aria-current
cuida de identificar corretamente quando já estamos na página daquele link, e a tag <title>
fica responsável por identificar em qual página estamos. E por falar na tag title
, precisa mudar o texto antigo de "Melhores" para "Relevantes" aqui:
<DefaultLayout metadata={{ title: `Página ${pagination.currentPage} · Melhores` }}> |
- O estilo do
hover
noTabNews
eRelevantes
me causou um pouco de estranheza por ficar uma coisa só. O que você acha?
Eu também estranhei um pouco, mas acho que foi só por estar acostumado com um comportamento diferente. Mas agora está informando corretamente que o resultado será o mesmo ao clicar em qualquer daqueles itens. Uma informação que parece óbvia, mas não é.
- Tentei usar o Orca do Linux como leitor de tela, mas digamos que não consegui fazer ele funcionar de um jeito que me ajudasse. O
aria-label
é necessário noTabCashCount
eTabCoinCount
porque oTooltip
ainda não está acessível? Entrei na documentação e lá diz Not reviewed for accessibility, mas queria confirmar.
Isso mesmo! Testei com o JAWS e com o NVDA e não é lido o aria-label
do Tooltip
.
Use article, address, list and nav. Additionally, mark the form fields that are mandatory, display the label and use the placeholder for examples.
e74a064
to
683c9eb
Compare
As melhorias de acessibilidade já foram pra produção! 🚀🚀🚀 |
Mudanças realizadas
Esse PR é um "sucessor espiritual" do #992, implementando os comentários que não foram resolvidos. Acabei realizando alguns estudos para usar as tags de forma mais adequada e vou compartilhar aqui o que descobri.
O objetivo do PR é não ter nenhuma alteração visual, mas usar tags semanticamente corretas, o que deve ter um impacto positivo tanto na acessibilidade quanto no SEO.
label
aoinput
nos formulários, mas vi na documentação do FormControl que ele já cuida disso.label
visível e o marcador derequired
, respeitando a documentação do Text Input e Forms do Primer. Deixei oform
da criação de conteúdo comonoValidate
porque o navegador conseguia realizar a validação dotitle
(com estilização do próprio navegador), mas não dobody
, então ficava sem padrão.required
porque já é algo bem esperado. Eu também não coloquei no Cadastro, mas talvez faça sentido por existir um campo “email”, que a pessoa pode pensar que é opcional.nav
nofooter
.article
s aninhados é para designar conteúdos relacionados, e inclusive é exemplificado que isso serve para comentários num blog.address
deve ser usado uma única vez porarticle
. Ou seja, em caso de terarticle
s aninhados, apenas o raiz deve teraddress
. Referência.as={viewFrame ? 'article' : undefined}
para que uma nova resposta seja umarticle
também.list-style
nos itens do header por precaução. Testando localmente no Firefox não precisava.Correção extra
!errorObject?.type
.e.g.
porque acho que ficou meio estranho sem ele, e na fonte achei o contrário hehe.Ponto em dúvida para melhoria
Corpo
fica estranho e deveria serResposta
ouComentário
. Discutimos no PR Filtro de conteúdos na página do usuário #1577 de usarComentário
para o substantivo eResponder
para a ação, mas clicar emResponder
e ver um campo escritoComentário
pode causar confusão.Tipo de mudança
Checklist: