Ir al contenido

Loader

.loader muestra un spinner y un texto mientras algo carga. Dentro van loader__content, el spinner (loader__spinner) y el texto (loader__text). No necesita JS del kit: agrégalo a la página al empezar la carga y quítalo al terminar (o usa el atributo hidden).

Por defecto cubre la pantalla con un velo que desenfoca la página. Aparece con 150 ms de retraso, así no parpadea si la carga es instantánea.

<div class="loader" role="status" aria-live="polite">
<div class="loader__content">
<span class="loader__spinner" aria-hidden="true"></span>
<p class="loader__text">Cargando…</p>
</div>
</div>

En la carga inicial, cuando aún no hay página detrás, agrega loader--instant para que aparezca sin retraso.

loader--inline lo muestra dentro de un bloque, sin velo: por ejemplo, mientras carga un listado.

<div class="loader loader--inline" role="status" aria-live="polite">
<div class="loader__content">
<span class="loader__spinner" aria-hidden="true"></span>
<p class="loader__text">Cargando artículos…</p>
</div>
</div>

loader--sm y loader--lg cambian el diámetro del spinner (28, 48 y 64 px).

<div class="loader loader--inline loader--sm" role="status" aria-live="polite">
<div class="loader__content">
<span class="loader__spinner" aria-hidden="true"></span>
<p class="loader__text">Pequeño</p>
</div>
</div>
<div class="loader loader--inline" role="status" aria-live="polite">
<div class="loader__content">
<span class="loader__spinner" aria-hidden="true"></span>
<p class="loader__text">Mediano</p>
</div>
</div>
<div class="loader loader--inline loader--lg" role="status" aria-live="polite">
<div class="loader__content">
<span class="loader__spinner" aria-hidden="true"></span>
<p class="loader__text">Grande</p>
</div>
</div>
  • El contenedor lleva role="status" y aria-live="polite": los lectores de pantalla leen el texto sin mover el foco. No le pongas aria-busy, porque algunos lectores dejan de anunciarlo; aria-busy="true" va en la zona que se está actualizando.
  • El spinner es decorativo (aria-hidden="true"). Incluye siempre loader__text, aunque sea corto.
  • A pantalla completa tapa la página, pero no bloquea el teclado. Si la carga es larga, pon inert en el contenido mientras dura.
  • Con movimiento reducido (prefers-reduced-motion), aparece sin transición y el spinner gira más lento.
Clase Uso
loader Base. Cubre la pantalla con un velo. Lleva role="status".
loader__content Agrupa spinner y texto.
loader__spinner Anillo que gira. Lleva aria-hidden="true".
loader__text Texto bajo el spinner.
loader--inline Dentro de un bloque, sin velo.
loader--instant Aparece sin retraso.
loader--sm Pequeño.
loader--lg Grande.
VariableValor por defectoUso
--ds-loader-colorvar(--ds-color-primary)Color del arco que gira.
--ds-loader-track-colorcolor-mix(in srgb, var(--ds-loader-color) 15%, transparent)Color del anillo de fondo.
--ds-loader-size3remDiámetro del spinner.
--ds-loader-thickness3pxGrosor del anillo.
--ds-loader-speed0.85sDuración de una vuelta.
--ds-loader-gapvar(--ds-space-4)Separación entre spinner y texto.
--ds-loader-text-colorvar(--ds-color-text)Color del texto.
--ds-loader-font-sizevar(--ds-font-size-sm)
--ds-loader-font-weightvar(--ds-font-weight-medium)
--ds-loader-paddingvar(--ds-space-6)Espacio interno.
--ds-loader-overlay-bgcolor-mix(in srgb, var(--ds-color-surface) 55%, transparent)Velo que cubre la página (pantalla completa).
--ds-loader-blur8pxDesenfoque de la página bajo el velo.
--ds-loader-delay150msEspera antes de aparecer (evita parpadeos en cargas rápidas).