MeDo

Generador de Spinners de Carga con IA.

Dile a MeDo qué tipo de animación de carga necesitas — anillo, puntos rebotando, círculo pulsante, overlay skeleton — y obtén código de componente listo para producción al instante. Sin buscar en CodePen, sin ajustar keyframes a mano.

Indicador de Carga
Indicador de Carga

Un spinner de carga es lo primero que ven los usuarios cuando tu app es lenta.

Cada operación asíncrona — obtención de datos, envío de formulario, subida de archivos — necesita un estado de carga. Un spinner ausente o brusco erosiona la confianza y hace que la app parezca rota. Uno bien diseñado comunica progreso, se integra con tu sistema de diseño y mantiene a los usuarios pacientes. Es un componente pequeño con un impacto desproporcionado en el rendimiento percibido.

6 plantillas

Plantillas de Indicador de Carga que puedes generar

Cada plantilla es un prompt real, no una captura de pantalla. Cópialo en cualquier editor de IA o ejecútalo en MeDo y obtén código React + Tailwind.

BasicRing

Rotating Ring Spinner

One arc rotating on a faint track. The default for anything under about a second, where a skeleton would flash in and out faster than the eye can resolve it.

Create a circular ring spinner with size variants sm 32px, md 48px and lg 64px, each keeping stroke width proportional so the small variant does not read as a thin grey circle. Render one visible arc over a low-contrast full track so the direction of rotation is legible. Wrap it in an element with role="status" and a visually hidden "Loading" label, and set aria-live="polite" so completion is announced once rather than repeatedly. Under prefers-reduced-motion: reduce, replace the rotation with a two-second opacity pulse rather than removing the indicator. Give the wrapper a fixed height matching the largest variant so mounting the spinner does not shift the surrounding layout.

Prueba en MeDo
IndeterminateDots

Three Bouncing Dots

Reads as activity rather than progress, which is honest when you have no idea how long the request will take. Better than a ring inside a chat bubble or a narrow row.

Create a three-dot loading indicator: dots of 8px with 6px gaps, each animating a 400ms vertical bounce staggered by 120ms so the sequence reads left to right. Keep the total width fixed so the row does not reflow as dots move. Wrap it in role="status" with a visually hidden label describing what is loading — "Loading messages" rather than "Loading" — and set aria-live="polite". Under prefers-reduced-motion: reduce, hold the dots static and cross-fade their opacity instead of translating them. Provide a colour prop that inherits currentColor by default so the indicator matches whatever text it sits beside.

Prueba en MeDo
InlineButton

Button With a Pending Spinner

The spinner that prevents the most damage, because the alternative is a double-submitted order. Keep the button width fixed or the layout jumps at the worst possible moment.

Create a button component with a pending state: when pending is true, prepend a 16px ring spinner before the label, set aria-busy="true" and the disabled attribute, and keep the button width identical to its idle state by reserving the spinner space in both. Do not remove the label text — swapping "Place order" for a bare spinner destroys the accessible name mid-interaction. Announce the state change through a separate role="status" element rather than an aria-live on the button itself. Under prefers-reduced-motion: reduce, use an opacity pulse. Block repeat clicks in the handler as well as via the disabled attribute, since disabled arrives one render late.

Prueba en MeDo
Content shapeSkeleton

Skeleton Blocks Instead of a Spinner

Past roughly 500ms a spinner stops reassuring and starts reading as a stall. Skeletons show the shape of what is coming, which shortens the wait without shortening the request.

Create a skeleton loader for a card list: rounded grey blocks matching the real layout — a 40px circle for the avatar, two text bars at 60% and 40% width, and a 160px image block — with a slow left-to-right shimmer. Match the block heights to the rendered content exactly so swapping in real data causes no layout shift. Mark the container aria-busy="true" and aria-hidden on the blocks themselves so screen readers get one status announcement rather than a stream of empty elements. Under prefers-reduced-motion: reduce, drop the shimmer and hold a flat tint. Add a threshold prop so the skeleton only appears after 300ms and never flashes on a fast response.

Prueba en MeDo
Full pageOverlay

Blocking Route Transition Overlay

A centered spinner over a scrim for the rare case where the whole view is unusable. Use it sparingly — blocking the page for a partial fetch makes a fast app feel slow.

Create a full-page loading overlay: a translucent scrim over the app with a 64px ring spinner and a short label centered in the viewport. Lock body scroll while visible, mark the underlying content aria-hidden="true", and use role="status" with aria-live="polite" on the overlay so the state is announced once. Trap focus inside the overlay or move focus to the status text so the keyboard cannot reach controls behind the scrim. Delay the appearance by 300ms so a fast response never produces a flash, and fade out over 150ms rather than snapping. Under prefers-reduced-motion: reduce, hold a static indicator with a text label instead of rotating.

Prueba en MeDo
DeterminateProgress

Ring With a Percentage Value

When you know the fraction complete — an upload, a multi-step import — show it. A spinning ring on a 40MB upload hides the one number the user wants.

Create a determinate circular progress ring driven by a value prop from 0 to 100: an SVG circle whose stroke-dashoffset is computed from the value, with the percentage rendered in the center. Use role="progressbar" with aria-valuenow, aria-valuemin and aria-valuemax, and an aria-label describing the operation. When value is null, fall back to the indeterminate spinning arc with role="status" instead. Animate stroke-dashoffset transitions over 200ms so incremental updates do not appear to jump, and under prefers-reduced-motion: reduce apply the value changes without a transition. Reserve the full ring diameter in layout from the first render.

Prueba en MeDo

Cómo personalizar tu Indicador de Carga

Adapta la paleta de tu marca

Especifica tu color primario y grosor de trazo en el prompt. Un spinner que usa tu azul de marca o color de acento se siente intencional; uno gris predeterminado se siente como un placeholder que nunca se reemplazó.

Elige el patrón de animación correcto

Los spinners de anillo funcionan para carga precisa y enfocada (envío de botón). Los puntos rebotando sugieren actividad sin implicar progreso. Los overlays pulsantes funcionan para transiciones de página completa. Dile a MeDo el contexto y elegirá el patrón de movimiento adecuado.

Añade variantes de tamaño desde el inicio

Pide a MeDo que genere props de tamaño sm, md y lg para que el mismo componente funcione como spinner inline de botón, loader skeleton de tarjeta y overlay de pantalla completa — todo desde una sola fuente.

Incluye una etiqueta accesible

Los spinners son invisibles para lectores de pantalla sin un aria-label o texto visualmente oculto. Pide a MeDo que incluya una etiqueta "Cargando" visualmente oculta y una región aria-live para que la tecnología asistiva anuncie cuando la carga se complete.

Quién usa el componente Indicador de Carga

Dashboard SaaS

Spinners de anillo inline dentro de celdas de tablas de datos y un spinner overlay de pantalla completa en el login inicial — dando a los usuarios retroalimentación clara sin bloquear toda la interfaz para pequeñas peticiones.

Checkout de e-commerce

Un spinner de botón pulsante que reemplaza la etiqueta "Realizar Pedido" al enviar, previniendo doble clic mientras asegura al cliente que su pedido se está procesando.

App web mobile-first

Spinners de puntos rebotando estilizados para coincidir con el tema de la app, apareciendo en skeletons de tarjetas durante la carga de contenido — común en feeds sociales e interfaces de mensajería.

Herramienta de desarrollo o dashboard CLI

Un spinner de anillo monocromo mínimo en gris tenue, de tamaño pequeño para ubicarse dentro de paneles de salida de logs o badges de estado sin robar atención del contenido.

Patrones de Indicador de Carga para distintos sitios web

El mismo componente indicador de carga, adaptado al tipo de sitio donde se publica.

01 / 06

SaaS Dashboard Loading

Skeleton the widget grid rather than covering the whole dashboard, so the shell, nav and filters stay usable while one chart resolves. A full-page overlay on a dashboard punishes the user for the slowest panel on the screen.

Estilos y variantes de Indicador de Carga

Elige la variante que encaje con el resto de la página y genérala.

01 / 06

Ring Spinner

A single arc over a faint track. Keep the stroke proportional across size variants — a 32px ring with the same 4px stroke as the 64px one reads as a solid donut, not a spinner. The right choice under a second.

Indicador de Carga en React, Next.js, Vue y Svelte

React, Next.js, Vue 3, SvelteKit, Astro o HTML puro: el mismo indicador de carga, seis formas de integrarlo.

01 / 06

React Loading Spinner

No state and no effects — a spinner is pure markup plus a keyframe, so it never needs a hook. Put the delay threshold in the parent that owns the fetch, not in the spinner itself.

src/components/Spinner.tsx

export function Spinner({ size = 'md', label = 'Loading' }) {
  return (
    <span role="status" className={ring[size]}>
      <span className="sr-only">{label}</span>
    </span>
  )
}

Cómo añadir tu Indicador de Carga a un proyecto

Cuatro pasos, desde elegir una plantilla de indicador de carga hasta llevarlo a producción.

01~30s

Pick a Loading Pattern

Choose by expected duration and how much of the view is blocked — a ring under a second, a skeleton past 500ms, an inline button spinner for a submit, a determinate ring when you know the percentage.

02~10s

Copy the Prompt

Paste it into MeDo, Lovable, Bolt, v0 or Cursor. Name what is loading in the label — "Loading invoices" beats "Loading", because the hidden label is the only thing a screen reader gets.

03~1min

Generate and Refine

You get React + Tailwind with a live preview. Follow up in plain English — "add a 300ms delay before it shows", "swap rotation for a pulse under reduced motion", "keep the button width fixed".

04~1min

Wire It to Your Loading State

Hook it to Suspense, a route loading file or an isPending flag, and reserve the space it occupies. Throttle the network in devtools and confirm nothing shifts when the real content lands.

Preguntas frecuentes sobre Indicador de Carga

¿Cómo creo un spinner de carga con IA?

En MeDo, describe el spinner que necesitas — estilo de animación (anillo, puntos, pulso), tamaño, color, y si necesitas variantes de tamaño o una etiqueta. MeDo genera el código completo del componente, incluyendo keyframes CSS o clases de animación Tailwind, listo para pegar en tu proyecto.

¿Cuál es el mejor generador de spinners de carga con IA?

MeDo está diseñado específicamente para generar componentes UI listos para producción. A diferencia de herramientas IA genéricas que producen snippets toscos, MeDo produce componentes de spinner limpios y accesibles con atributos aria correctos, props configurables y animaciones que se integran con tu sistema de diseño.

¿Puedo generar un spinner de carga solo con CSS usando IA?

Sí. Especifica "solo CSS, sin JavaScript" en tu prompt de MeDo y generará un spinner usando animaciones CSS keyframe puras — sin dependencias, sin JavaScript requerido. Ideal para páginas de marketing ligeras o situaciones donde añadir una biblioteca de componentes no es una opción.

¿Cómo hago un spinner de carga accesible?

Pide a MeDo que incluya una etiqueta de texto visualmente oculta (ej., "Cargando, por favor espera") y establezca aria-busy en el contenedor de carga. MeDo generará el aria-label correcto, role="status", y una región live para que los lectores de pantalla anuncien cambios de estado de carga automáticamente.

¿Cómo añado un spinner de carga a un botón en React?

Usa este prompt en MeDo: "Crea un componente de botón React con un estado de carga que reemplace la etiqueta con un pequeño spinner inline cuando isLoading es true, deshabilite el botón y prevenga el envío doble." MeDo generará el componente completo con el spinner integrado y accesible.

¿Cuál es la diferencia entre un spinner de carga y un skeleton loader?

Un spinner de carga es una animación genérica que indica que algo se está cargando sin revelar el layout. Un skeleton loader imita la forma del contenido entrante, reduciendo el tiempo de espera percibido al mostrar estructura inmediatamente. MeDo puede generar cualquiera de los dos — o un spinner que transiciona a un skeleton — dependiendo de tu prompt.