Carrosséis concentram depoimentos, cases e imagens num espaço pequeno. Também concentram falhas: rotação automática antes da leitura terminar, setas sem nome, pontos minúsculos, slides invisíveis que continuam no leitor de tela e foco que desaparece quando o item muda.
Um carrossel acessível precisa ser compreensível parado. A pessoa deve identificar o conjunto, escolher o item, pausar qualquer rotação e usar os controles por teclado, toque ou tecnologia assistiva. A revisão a seguir cobre estrutura, movimento, controles e o teste na página publicada.
Primeiro, questione o formato
Antes de corrigir ARIA, pergunte se o carrossel entrega valor real. Uma grade ou lista costuma expor mais conteúdo, facilitar comparação e exigir menos interação. Mantenha o carrossel quando a sequência tem sentido e a limitação de espaço é legítima, não porque o componente veio pronto no template.
Compare as opções:
| Necessidade | Formato mais direto |
|---|---|
| comparar planos ou recursos | tabela ou grade |
| ler vários depoimentos | lista ou grade |
| percorrer etapas em ordem | sequência numerada |
| explorar imagens relacionadas | galeria ou carrossel controlado |
| destacar uma única oferta | bloco estático |
Se remover a rotação destrói a compreensão, o conteúdo provavelmente depende demais do efeito. Reorganize a informação antes de adicionar controles.
Dê estrutura e nome ao conjunto
O padrão de carrossel da W3C recomenda um contêiner identificado, controles em botões e slides com nome e função compreensíveis. Dependendo da importância na arquitetura da página, o contêiner pode ser uma região ou um grupo.
Uma lista preserva a relação entre os itens mesmo antes do JavaScript:
<section aria-labelledby="depoimentos-titulo"> <h2 id="depoimentos-titulo">O que clientes dizem</h2> <ul> <li>...</li> <li>...</li> <li>...</li> </ul></section>Quando o script transforma essa lista em carrossel, mantenha títulos, parágrafos, links e imagens com a semântica própria. Não achate cada slide numa div sem relações.
Use aria-roledescription="carousel" apenas como complemento a uma função válida, como region ou group. Dê ao conjunto um nome com aria-labelledby quando já existe um título visível. O guia de títulos e regiões aprofunda essa decisão.
Esconda slides inativos de todos da mesma forma
Um slide fora da tela não deve continuar disponível para foco ou ser lido como se estivesse visível. Posição absoluta, transform ou opacity: 0 podem esconder visualmente sem remover controles da navegação por teclado.
Para cada slide inativo, confirme:
- o conteúdo não aparece visualmente;
- links e botões não recebem foco;
- o slide não entra na leitura como conteúdo atual;
- a mudança não apaga o item ativo antes do próximo estar pronto;
- desligar JavaScript ainda deixa uma lista utilizável ou uma alternativa coerente.
Não aplique aria-hidden="true" a um elemento que contém o foco. Troque o estado de maneira atômica: identifique o próximo slide, atualize visibilidade e acessibilidade e preserve o foco no controle que disparou a mudança.
Use botões com nomes que descrevem a ação
Setas desenhadas e bolinhas não têm nome por conta própria. Use button nativo para avançar, voltar, pausar e selecionar um item.
<button type="button" aria-label="Depoimento anterior">...</button><button type="button" aria-label="Próximo depoimento">...</button>Ao ativar “Próximo”, mantenha o foco no botão. Assim, a pessoa pode avançar mais de uma vez sem procurar o controle novamente. Se houver seletores de slide, o nome precisa indicar qual item será exibido e o estado atual precisa ser distinguível sem depender apenas de cor.
Evite criar uma parada de Tab para dezenas de pontos. O padrão com grupo de botões aumenta a sequência de foco a cada slide. Para muitos itens, controles anterior/próximo ou um padrão de abas bem implementado podem reduzir o custo de navegação.
O artigo sobre nomes acessíveis de links e botões ajuda a comparar o texto visível, o nome anunciado e a ação real.
Evite rotação automática
Autoplay raramente é necessário numa landing page. Ele muda o conteúdo antes de algumas pessoas terminarem a leitura, disputa atenção com o restante da página e pode deslocar o contexto de quem usa leitor de tela.
Se a rotação automática permanecer, o padrão da W3C para carrosséis estabelece controles importantes:
- um botão permite parar e reiniciar a rotação;
- o controle de rotação aparece antes do conteúdo rotativo na ordem de
Tab; - a rotação para quando o foco entra no carrossel;
- ela não recomeça após foco sem uma ação explícita da pessoa;
- a rotação também para enquanto o ponteiro está sobre o carrossel.
O rótulo do botão deve indicar a ação disponível, como “Pausar rotação” ou “Iniciar rotação”. Um ícone sozinho não comunica se o movimento está ativo.
A WCAG 2.2 exige um mecanismo para pausar, parar ou ocultar determinado conteúdo que começa automaticamente, dura mais de cinco segundos e aparece junto de outro conteúdo. Parar apenas enquanto o botão recebe foco não resolve: a pessoa ficaria presa nele para conseguir ler.
Respeite movimento reduzido sem esconder conteúdo
Quando prefers-reduced-motion: reduce estiver ativo, comece sem rotação automática e elimine transições amplas. A pessoa ainda precisa navegar por todos os slides manualmente.
@media (prefers-reduced-motion: reduce) { .carousel-track { transition-duration: 0.01ms; }}Não deixe slides em opacity: 0 esperando um evento que não ocorrerá. Não remova os controles junto com a animação. Movimento, acesso ao conteúdo e mudança de estado são responsabilidades diferentes.
O guia sobre movimento reduzido mostra como inventariar CSS, JavaScript, GIF, vídeo e bibliotecas de animação sem recorrer a um reset global.
Anuncie mudanças sem criar ruído
Quando a própria pessoa escolhe o próximo slide, ela precisa perceber qual conteúdo entrou. Isso não significa transformar todo o carrossel numa região aria-live permanente.
Defina uma estratégia:
- mantenha o foco no controle acionado;
- dê a cada slide um nome que o diferencie;
- anuncie a posição quando ela ajuda, como “3 de 5”;
- evite reler todo o conteúdo do slide a cada avanço;
- não anuncie mudanças automáticas enquanto a rotação está ativa;
- interrompa a rotação quando o foco entra no componente.
Uma região ao vivo muito falante disputa com a leitura atual. Um contador visual atualizado sem equivalente programático deixa outra parte do público sem contexto. Teste com o leitor de tela previsto para o produto e ajuste a quantidade de informação.
Preserve teclado, toque e foco visível
O fluxo básico deve funcionar com Tab, Shift+Tab, Enter e Espaço. Setas direcionais só entram quando o padrão escolhido as define claramente, como num conjunto de abas; não intercepte teclas de navegação da página por conveniência.
Teste também:
- swipe sem remover botões visíveis;
- foco sobre imagens claras e escuras;
- controles encostados na borda da tela;
- tamanho e espaçamento dos alvos;
- zoom e largura de 320 pixels CSS;
- texto maior e tradução;
- primeiro e último slide;
- conteúdo interativo dentro de cada slide.
A orientação da W3C sobre estilo de carrosséis destaca contraste, estado além da cor e controles grandes o suficiente para toque. O roteiro de alvos de toque ajuda a medir área e espaçamento no layout real.
Não confie só num teste automático
Scanners podem encontrar botão sem nome, contraste baixo e alguns estados ARIA inválidos. Eles não confirmam se um depoimento desapareceu antes da leitura terminar, se a pausa persiste ou se o foco entrou num slide oculto.
Use uma matriz curta:
| Evidência | O que verificar |
|---|---|
| sem JavaScript | lista e conteúdo continuam disponíveis? |
| teclado | controles funcionam e o foco fica previsível? |
| leitor de tela | conjunto, slide e estado atual são compreensíveis? |
| movimento reduzido | autoplay e transições dispensáveis param? |
| tela estreita | texto e controles permanecem visíveis? |
| URL publicada | hidratação preserva estrutura e estado? |
Faça ao menos duas voltas completas, pause no meio, saia do componente, volte e redimensione a janela. Estados quebrados aparecem nas transições, não numa captura estática.
Use um pedido de correção com limites
Revise os carrosséis desta landing page sem publicar ainda.
Escopo:- fonte e commit: [referência]- rotas e carrosséis: [inventário]- conteúdo e ordem de cada slide: [fonte aprovada]
1. Questione se lista ou grade comunica melhor o conteúdo.2. Registre nome, estrutura, slides ativos e inativos e todos os controles.3. Remova autoplay quando não for essencial; caso permaneça, inclua pausa persistente.4. Pare rotação ao receber foco e com movimento reduzido.5. Teste teclado, leitor de tela, toque, zoom e tela estreita.6. Preserve texto, imagens, links, tracking e ordem aprovada.7. Entregue o inventário, o diff e as evidências antes de publicar.Esse escopo evita que uma correção de acessibilidade troque depoimentos, reorganize campanhas ou altere eventos de analytics sem revisão.
Reteste a URL publicada
Depois de aprovar a implementação, siga a documentação de Publicação: publique uma nova Version, acompanhe o deploy e abra a URL final.
Na página servida, percorra todos os slides com teclado e leitor de tela, pare a rotação, ative movimento reduzido, redimensione e confirme cada link. Compare a ordem e o texto com a Version aprovada. Se scripts de build ou hidratação reintroduzirem slides focáveis ou autoplay, corrija a fonte e republique o mesmo Site. O carrossel está pronto quando continua utilizável mesmo parado, ampliado e operado sem gesto de arrastar.
