Generador de Cargadores CSS

Siguiente

Un spinner indica al usuario que algo está ocurriendo. Este generador crea un único spinner circular en CSS: define el diámetro, el grosor del borde, el color de acento y la velocidad de rotación, mira la previsualización en vivo y copia el CSS. Todo es CSS puro: sin SVG, sin JavaScript y sin librerías externas.

Cómo usar el generador

  1. 1

    Ajusta el tamaño

    Diámetro del spinner en píxeles. De 40 a 80 px encaja en la mayoría de botones y zonas de contenido.

  2. 2

    Ajusta el grosor del borde

    El anillo es un borde dibujado sobre un círculo. Un borde más grueso hace el arco más marcado; de 4 a 8 px se ve bien con 60 px.

  3. 3

    Elige el color

    El color de acento del arco que gira. El resto del anillo se mantiene en gris claro para que el arco destaque.

  4. 4

    Ajusta la velocidad y copia el CSS

    Tiempo de rotación en segundos por vuelta completa. Alrededor de 1 segundo es el punto ideal más común; por debajo de 500 ms resulta frenético y por encima de 2 s, lento.

Cómo funciona el CSS generado

.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); }
}

El cargador es un círculo dibujado con un borde grueso. La regla border-top-color pinta solo la parte superior del anillo con el color de acento, de modo que el anillo se lee como un arco, y la regla @keyframes spin lo rota alrededor de su centro. Rotar con transform: rotate() mantiene la animación barata, porque el navegador mueve el elemento en el compositor en lugar de redibujarlo fotograma a fotograma.

Para mostrarlo en una página, añade un elemento y carga el CSS:

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

Hazlo accesible

  • Añade role="status" para que los lectores de pantalla anuncien el cargador.
  • Pon aria-label con el texto de estado, por ejemplo “Cargando”.
  • No ocultes contenido detrás de un cargador durante más de unos segundos sin un tiempo de espera de respaldo.
  • Respeta prefers-reduced-motion. Para los usuarios que lo han desactivado, sustituye la animación giratoria por un simple desvanecimiento o un texto estático “Cargando…”:
@media (prefers-reduced-motion: reduce) {
  .loader { animation: none; background: currentColor; opacity: .4; }
}

Cuándo usar un cargador frente a una interfaz optimista

  • Respuesta < 100 ms: no hace falta cargador; el ojo humano apenas percibe el retraso.
  • 100 ms – 1 s: un cargador sutil (spinner pequeño, texto de botón “Cargando…”) evita los dobles clics.
  • 1 s – 10 s: un cargador visible, idealmente con progreso si es medible.
  • > 10 s: no es un problema de spinner; averigua qué es lo lento y corrígelo.

En envíos de formularios y clics de botón, un spinner dentro del botón suele ser mejor que una superposición a pantalla completa.

Preguntas frecuentes

CSS para spinners simples de un solo elemento (el truco de rotación de cuatro bordes). SVG cuando necesitas una estela en forma de cono, múltiples animaciones de trazo dasharray, o segmentos rellenos que parecen pinceladas. CSS es más pequeño y simple; SVG es más flexible.

Probablemente porque estás rotando un elemento grande o animando una propiedad no compuesta. Mantén el tamaño del spinner pequeño, usa transform: rotate() (no top/margin), y evita activarlo mientras se ejecutan otras animaciones pesadas.

Casi universalmente en sentido horario. Los spinners antihorarios se sienten sutilmente incorrectos porque la mayoría de las señales de rotación reales (relojes, molinos de viento) van en sentido horario. Adhiérete a la convención a menos que tengas una razón específica.

Con un setTimeout(..., 300) en JavaScript que añade la clase del cargador, más un clearTimeout si la operación termina primero. Previene el parpadeo en respuestas rápidas sin ocultar retrasos reales.

Herramientas relacionadas