Gerador de spinner CSS acessível
Um anel girando não significa nada para quem usa leitor de tela, e o movimento constante pode incomodar pessoas sensíveis a ele. Gere o spinner aqui e, em seguida, adicione a marcação e a regra de movimento reduzido abaixo.
Como tornar o spinner acessível
-
1
Gere o anel
Defina tamanho, espessura, cor e velocidade na ferramenta e, depois, copie o CSS.
-
2
Verifique o contraste de cor
Escolha uma cor para o arco que se destaque claramente da trilha cinza claro e do fundo da página.
-
3
Adicione a marcação de status
Coloque role e um rótulo no elemento do spinner, como mostrado nesta página.
-
4
Adicione a regra de movimento reduzido
Cole a media query abaixo do CSS gerado.
O que o CSS gerado cobre e o que não cobre
A ferramenta entrega a parte visual: um círculo com borda e uma rotação. Um loader apenas visual não tem significado para tecnologias assistivas, porque o elemento está vazio. A acessibilidade vem da marcação e de uma regra extra de CSS que você adiciona ao redor.
Marcação que anuncia o estado
<div class="loader" role="status" aria-label="Carregando resultados"></div>
role="status" marca o elemento como uma região dinâmica, então muitos leitores de tela anunciam o seu rótulo quando ele aparece. O aria-label deve dizer o que está carregando, como “Carregando resultados” ou “Salvando”, e não uma palavra genérica. Remova o elemento quando o trabalho terminar e mostre o novo conteúdo.
Você também pode colocar texto visível ao lado do anel. O texto visível ajuda todo mundo, inclusive quem não consegue perceber bem o movimento.
Respeite o movimento reduzido
Alguns visitantes ativam uma configuração do sistema que pede aos sites para limitar animações. Respeite-a com uma media query posicionada após o CSS gerado:
@media (prefers-reduced-motion: reduce) {
.loader {
animation-duration: 3s;
}
}
Isso deixa a rotação mais lenta em vez de removê-la, então o loader continua parecendo ativo sem movimento rápido. Se preferir um sinal estático, use animation: none; e mostre o texto “Carregando” ao lado do anel.
Checklist de contraste e tamanho
| Verificação | O que buscar |
|---|---|
| Arco sobre a página | Claramente visível, idealmente com proporção de 3:1 ou mais |
| Arco sobre a trilha cinza | Distinto, para que o arco possa ser acompanhado |
| Tamanho | No mínimo 24 px para qualquer coisa que o visitante precise perceber |
| Velocidade | Entre 0,8 e 1,5 segundo por volta |
Limites
- O gerador escolhe a cor da trilha (
#eee) para você. Edite-a no CSS colado se o fundo da sua página for parecido. - Um valor de velocidade muito alto faz o anel tremeluzir. Evite qualquer coisa abaixo de cerca de 0,5 segundo.
- Não confie só no spinner para esperas longas. Diga às pessoas o que está acontecendo, em texto.
Teste rápido
Ative a opção de movimento reduzido no seu sistema operacional e recarregue a página: o anel deve girar mais devagar. Depois, navegue pela página com o teclado para confirmar que o spinner nunca tira o foco do controle que o visitante estava usando. Por fim, ative um leitor de tela e dispare o estado de carregamento uma vez, para ouvir se o rótulo é anunciado quando o elemento aparece e se o novo conteúdo fica acessível depois.
Perguntas frequentes
Somente se você adicionar marcação. Um elemento vazio fica silencioso, então dê a ele role=“status” e um aria-label descritivo.
É uma media query de CSS que vale quando o visitante pediu ao dispositivo para reduzir animações. Você pode usá-la para desacelerar ou parar o spinner.
Qualquer uma das opções é aceitável. Desacelerar mantém uma sensação de atividade, enquanto parar é a escolha mais segura se você também mostrar uma mensagem de texto como “Carregando”.
Descreva a ação em palavras simples, por exemplo “Carregando resultados” ou “Salvando alterações”. Evite rótulos vagos como “spinner”.
Um tamanho maior e um contraste forte facilitam a visualização, mas não substituem o rótulo de texto que a tecnologia assistiva lê.
Ferramentas relacionadas
Contador de FPS
Meça o FPS do navegador com requestAnimationFrame: suavização, taxa de quadros mínima e máxima, limite de alerta e gráfico opcional. Roda localmente, sem upload nem API.
Gerador de Configuração Webpack
Crie um webpack.config.js para webpack 5 com JavaScript puro, React ou Vue: TypeScript, Babel, CSS ou Sass, imagens, HtmlWebpackPlugin, servidor de desenvolvimento e a linha de npm install.
Conversor de Tamanho de Arquivo
Converta entre bytes, KB, MB, GB, TB e as unidades binárias IEC (KiB, MiB, GiB, TiB), combinando decimal e binário como preferir.
Gerador de textura de ruído
Gere uma textura de ruído em SVG que se repete sem emendas, com opacidade, frequência do grão, tipo de ruído e cor de fundo ajustáveis, e copie o CSS já pronto.
Gerador de Licença
Gere o texto completo de licenças de código aberto com seu nome e ano preenchidos. Abrange licenças MIT, Apache 2.0, GPLv3, BSD-3, MPL-2.0 e CC.
Desofuscador de JavaScript
Desofusque JavaScript minificado ou empacotado com renomeação de variáveis, decodificação de arrays de strings, reversão de achatamento de fluxo de controle e embelezamento.
Ferramenta disponível em outros idiomas
- เครื่องมือสร้างสปินเนอร์ CSS ที่เข้าถึงได้ [TH]
- Generator dostępnego spinera CSS [PL]
- Trình tạo CSS spinner có khả năng truy cập [VI]
- Generator CSS Spinner yang Aksesibel [ID]
- مولّد دوّامة CSS يمكن الوصول إليها [AR]
- Barrierefreier CSS-Spinner Generator [DE]
- アクセシブルなCSSスピナー ジェネレーター [JA]
- Generador de spinner CSS accesible [ES]
- 접근성 있는 CSS 스피너 생성기 [KO]
- Generator för tillgänglig CSS-spinner [SV]
- Générateur de spinner CSS accessible [FR]
- Toegankelijke CSS-spinner generator [NL]
- Accessible CSS Spinner Generator [EN]
- Generatore di spinner CSS accessibile [IT]
- Генератор доступного CSS-спиннера [RU]
- Erişilebilir CSS Spinner Oluşturucu [TR]
- 无障碍 CSS 加载动画生成器 [ZH]