Spinner

El spinner es un indicador visual que informa a las personas usuarias que el contenido está cargando y/o siendo procesado.


Uso

Cuándo usar

  • Para indicar que el sistema está procesando una acción cuyo tiempo de resolución es indeterminado.

Cuándo no usar

  • Para indicar el progreso de una acción en curso con un tiempo definido predecible, utilizar la Barra de progreso.
  • Para acciones inmediatas, como enviar un formulario.

Tipos

Existen distintas variantes de color para el spinner, cada uno con un significado semántico asociado, y no meramente decorativo, que permiten mantener coherencia con el contexto de uso, como estados de carga, éxito o error. En fondos claros, se recomienda utilizar el spinner primario como opción predeterminada.

Tipos de spinner

Tamaños

Hay tres tamaños de spinner: grande, mediano y chico, tanto para dispositivos desktop, tablet y mobile, y su uso depende del espacio disponible en la interfaz.

Tamaños de spinner
  • Chico: se utiliza en elementos puntuales, como botones o inputs con carga.
  • Mediano: es ideal para modales o secciones de la interfaz.
  • Grande: se utiliza para pantallas completas o procesos de carga generales.

Patrones de uso

En el componente Botón

Utilizá la variante Loading del componente Botón para indicar que una acción está en progreso y aún no ha finalizado. Para reforzar el significado de la acción se puede configurar la variante de spinner correspondiente con la de cada botón.

Uso en botón

En línea con otros componentes

El spinner también puede utilizarse por fuera del botón, por ejemplo para indicar que se está subiendo un archivo.

Uso en componentes

Como única referencia visual

Una acción particular puede desencadenar la carga de todo el contenido de una página. En este caso, debe utilizarse el spinner grande centrado, para identificar el procesamiento de la acción. Además, debe ir acompañando de una etiqueta descriptiva que sirva de contexto sobre el contenido a cargar.

El spinner se puede colocar sobre un fondo sólido de color blanco o sobre un overlay (grayscale-950 con 35 % de opacidad), ocupando el cuerpo de la página, sin incluir el encabezado (header) del sitio.

Dado que este comportamiento interrumpe la navegación de la persona usuaria, se recomienda minimizar su uso.

Buena práctica de uso
check

La etiqueta debe indicar el estado del proceso, en un lenguaje claro y utilizando verbos en gerundio, como "Cargando solicitud..." o "Procesando el pago...".

Mala práctica de uso
close

No utilizar el spinner para la carga de contenidos multimedia como imágenes o videos. Tampoco utilizar más de 1 spinner a la vez.

Tipos

Cargando...
Cargando...
Cargando...
Cargando...
Cargando...
Cargando...
Cargando...

<div class="spinner-border text-primary" role="status">
  <span class="sr-only">Cargando...</span>
</div>
<div class="spinner-border text-secondary" role="status">
  <span class="sr-only">Cargando...</span>
</div>
<div class="spinner-border text-tertiary" role="status">
  <span class="sr-only">Cargando...</span>
</div>
<div class="spinner-border text-success" role="status">
  <span class="sr-only">Cargando...</span>
</div>
<div class="spinner-border text-danger" role="status">
  <span class="sr-only">Cargando...</span>
</div>
<div class="spinner-border text-light" role="status">
  <span class="sr-only">Cargando...</span>
</div>
<div class="spinner-border text-dark" role="status">
  <span class="sr-only">Cargando...</span>
</div>

Tamaños

Cargando...
Cargando...
Cargando...

<div class="spinner-border text-primary spinner-border-sm" role="status">
  <span class="sr-only">Cargando...</span>
</div>
<div class="spinner-border text-primary" role="status">
  <span class="sr-only">Cargando...</span>
</div>
<div class="spinner-border text-primary spinner-border-lg" role="status">
  <span class="sr-only">Cargando...</span>
</div>

Expandible

Cargando...

<div class="col-4 col-md-2 mx-auto">
  <div class="spinner-block text-primary" role="status">
    <span class="sr-only">Cargando...</span>
  </div>
</div>

Con descripción

Cargando...

Cargando...


<div class="text-center">
  <div class="spinner-border text-primary spinner-border-lg" role="status">
    <span class="sr-only">Cargando...</span>
  </div>
  <p class="spinner-description">Cargando...</p>
</div>

Anatomía

Anatomía
ElementoCarácter
Índicador de cargaObligatorio, indica visualmente el proceso de carga.
RecorridoObligatorio, necesario para el contraste entre el fondo y el indicador de carga.
EtiquetaOpcional, disponible solo para la variante de spinner grande cuando se requiera la carga del contenido dela página.

Variantes

Únicamente el tamaño de spinner grande admite dos variantes, con etiqueta o sin etiqueta, y se ubica por debajo del indicador.

Variantes

Medidas

Todos los tamaños de spinner se ajustan proporcionalmente para no perder calidad, el spinner chico tiene 16px de diámetro, el mediano 32px y el grande 48px.

Medidas

Espaciados

En la variante de tamaño grande, el espaciado entre la etiqueta y el indicador es de 8px.

Espaciados

Navegación alternativa

Al ser un elemento que irrumpe en la navegación de la persona usuaria, que solo aparece para indicar la carga de un proceso y/o contenido, el spinner no debe ser recorrido ni operado por teclado para evitar confusiones al navegar por medios alternativos, como lectores de pantalla.

Interactividad limitada

Para indicarle a la persona usuaria que comenzó un proceso de carga y debe esperar a que responda el contenido, debe agregarse el atributo “aria-live=assertive”. Con este atributo ARIA, medios alternativos para navegar un sitio web, como lectores de voz, anunciarán que se ha interrumpido el recorrido y que la interfaz está en un proceso de carga, por lo que deberá esperar y no podrá continuar navegando hasta que finalice.

<div class="spinner-border text-primary spinner-border-sm" role="status" aria-live="assertive">
  <span class="sr-only">Cargando...</span>
</div>

Etiquetado descriptivo

Para indicar a la persona usuaria, que utiliza medios alternativos para recorrer una página, sobre la aparición de un proceso de carga con spinner, como lectores de pantalla, debe agregarse la clase sr-only en una etiqueta span con el texto de “Cargando...”.

Adicionalmente, el spinner debe llevar el atributo de “role=status”, dentro del contenedor de la etiqueta div, para indicar el estado de carga que especifica la etiqueta span.

<div class="spinner-border text-primary spinner-border-sm" role="status">
  <span class="sr-only">Cargando...</span>
</div>

Criterios WCAG aplicables

Success Criterion 1.4.11 Non-Text Contrast (Level AA)

La presentación visual de elementos de la interfaz de usuario y objetos gráficos tiene por lo menos una relación de contraste de 3:1 con respecto a los colores adyacentes.

Success Criterion 1.4.3 Contrast (Minimum) (Level AA)

La presentación visual de texto y de imágenes de texto tiene una relación de contraste de por lo menos 4.5:1, excepto textos grandes e imágenes de texto grande que tienen un contraste de por lo menos 3:1, textos o imágenes que son parte de un componente inactivo de interfaz de usuario o son pura decoración, o logotipos.

Success Criterion 1.4.4 Resize Text (Level AA)

Excepto por los subtítulos e imágenes de texto, el texto puede redimensionarse hasta un 200 % sin tecnología de asistencia, sin pérdida de contenido ni funcionalidad.

Success Criterion 3.2.4 Consistent Identification (Level AA)

Los componentes que tienen la misma funcionalidad dentro de un conjunto de páginas web se identifican de manera consistente. Los enlaces que dirigen a un mismo lugar deben tener la misma identificación para no generar confusiones.

Success Criterion 4.1.2 Name, Role, Value (Level A)

Para todos los componentes de la interfaz de usuario (incluidos, entre otros: elementos de formulario, enlaces y componentes generados por scripts), el nombre y la función se pueden determinar mediante programación; los estados, propiedades y valores que puede establecer el usuario se pueden configurar mediante programación; y la notificación de cambios en estos elementos está disponible para los agentes de usuario, incluidas las tecnologías de asistencia.

Navegación de pie de página