Gerador de Loader CSS

Próximo

Um spinner mostra ao usuário que algo está acontecendo. Este gerador cria um spinner circular em CSS: defina o diâmetro, a espessura da borda, a cor de destaque e a velocidade de rotação, observe a pré-visualização ao vivo e copie o CSS. Tudo é CSS puro, sem SVG, sem JavaScript e sem bibliotecas externas.

Como usar o gerador

  1. 1

    Defina o tamanho

    Diâmetro do spinner em pixels. De 40 a 80 px serve para a maioria dos botões e áreas de conteúdo.

  2. 2

    Defina a espessura da borda

    O anel é uma borda desenhada sobre um círculo. Uma borda mais grossa deixa o arco mais marcado; de 4 a 8 px fica bem com 60 px.

  3. 3

    Escolha a cor

    A cor de destaque do arco que gira. O resto do anel permanece cinza claro para o arco se destacar.

  4. 4

    Defina a velocidade e copie o CSS

    Tempo de uma volta completa em segundos. Cerca de 1 segundo é o ponto ideal mais comum; abaixo de 500 ms parece frenético, acima de 2 s parece lento.

Como funciona o CSS gerado

.loader {
  width: 60px;
  height: 60px;
  border: 6px solid #eee;
  border-top-color: #10b981;
  border-radius: 50%;
  animation: spin 1s linear infinite;
}

@keyframes spin {
  to { transform: rotate(360deg); }
}

O spinner é um círculo desenhado com uma borda grossa. A regra border-top-color pinta apenas a parte superior do anel com a cor de destaque, de modo que o anel é lido como um arco, e a regra @keyframes spin o gira em torno do centro. Girar com transform: rotate() mantém a animação leve, porque o navegador move o elemento no compositor em vez de redesenhar quadro a quadro.

Para exibi-lo em uma página, adicione um elemento e carregue o CSS:

<div class="loader" role="status" aria-label="Carregando"></div>

Torne-o acessível

  • Adicione role="status" para que os leitores de tela anunciem o spinner.
  • Defina aria-label com o texto de status, por exemplo “Carregando”.
  • Não esconda conteúdo atrás de um spinner por mais de alguns segundos sem um fallback de timeout.
  • Respeite prefers-reduced-motion. Para quem desativou as animações, substitua a rotação por um simples fade ou um texto estático “Carregando…”:
@media (prefers-reduced-motion: reduce) {
  .loader { animation: none; background: currentColor; opacity: .4; }
}

Quando usar um spinner em vez de uma UI otimista

  • Resposta abaixo de 100 ms: dispensa spinner; o olho humano mal percebe o atraso.
  • 100 ms – 1 s: um spinner discreto (círculo pequeno, texto do botão “Carregando…”) evita cliques duplos.
  • 1 s – 10 s: um spinner bem visível, de preferência com progresso se for mensurável.
  • > 10 s: não é um problema de spinner; descubra o que está lento e conserte.

Em envios de formulários e cliques em botões, um spinner dentro do botão costuma ser melhor do que uma sobreposição em tela cheia.

Perguntas frequentes

CSS para spinners simples de elemento único (o truque de rotação de quatro bordas). SVG quando você precisa de um rastro afunilado, animações de múltiplos traços de dasharray, ou segmentos preenchidos que parecem pinceladas. CSS é menor e mais simples; SVG é mais flexível.

Provavelmente porque você está girando um elemento grande ou animando uma propriedade não composta. Mantenha o tamanho do spinner pequeno, use transform: rotate() (não top/margin), e evite acioná-lo enquanto outras animações pesadas estão em execução.

Quase universalmente no sentido horário. Spinners anti-horários parecem sutilmente errados porque a maioria das pistas de rotação reais (relógios, moinhos de vento) giram no sentido horário. Fique com a convenção, a menos que você tenha um motivo específico.

Com um setTimeout(..., 300) em JavaScript que adiciona a classe do loader, além de um clearTimeout se a operação terminar primeiro. Previne o piscar em respostas rápidas sem esconder atrasos reais.

Ferramentas relacionadas

Ferramenta disponível em outros idiomas