Generatore di Loader CSS

Avanti

Uno spinner dice all’utente che qualcosa sta succedendo. Questo generatore crea un singolo spinner circolare in CSS: imposta diametro, spessore del bordo, colore di accento e velocità di rotazione, osserva l’anteprima dal vivo e copia il CSS. È tutto CSS puro, senza SVG, senza JavaScript e senza librerie esterne.

Come usare il generatore

  1. 1

    Imposta la dimensione

    Diametro dello spinner in pixel. Da 40 a 80 px si adatta alla maggior parte dei pulsanti e delle aree di contenuto.

  2. 2

    Imposta lo spessore del bordo

    L'anello è un bordo disegnato su un cerchio. Un bordo più spesso rende l'arco più deciso; da 4 a 8 px funziona bene a 60 px.

  3. 3

    Scegli il colore

    Il colore di accento dell'arco che ruota. Il resto dell'anello resta grigio chiaro per far risaltare l'arco.

  4. 4

    Imposta la velocità e copia il CSS

    Durata di un giro completo in secondi. Circa 1 secondo è il punto ideale più comune; sotto i 500 ms sembra frenetico, sopra i 2 s sembra lento.

Come funziona il CSS generato

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

Lo spinner è un cerchio disegnato con un bordo spesso. La regola border-top-color colora solo la parte superiore dell’anello con il colore di accento, così l’anello si legge come un arco, e la regola @keyframes spin lo ruota attorno al suo centro. Ruotare con transform: rotate() mantiene l’animazione leggera, perché il browser sposta l’elemento sul compositore invece di ridisegnarlo fotogramma per fotogramma.

Per mostrarlo in una pagina, aggiungi un elemento e carica il CSS:

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

Rendilo accessibile

  • Aggiungi role="status" così gli screen reader annunciano lo spinner.
  • Imposta aria-label con il testo di stato, ad esempio “Caricamento”.
  • Non nascondere contenuti dietro uno spinner per più di qualche secondo senza un fallback di timeout.
  • Rispetta prefers-reduced-motion. Per chi l’ha disattivata, sostituisci l’animazione rotante con una semplice dissolvenza o un testo statico “Caricamento…”:
@media (prefers-reduced-motion: reduce) {
  .loader { animation: none; background: currentColor; opacity: .4; }
}

Quando usare uno spinner e quando un’interfaccia ottimistica

  • Risposta sotto i 100 ms: nessuno spinner necessario; l’occhio umano percepisce a malapena il ritardo.
  • 100 ms – 1 s: uno spinner discreto (piccolo cerchio, testo del pulsante “Caricamento…”) evita i doppi clic.
  • 1 s – 10 s: uno spinner ben visibile, idealmente con avanzamento se misurabile.
  • > 10 s: non è un problema di spinner; scopri cosa è lento e risolvilo.

Per gli invii di moduli e i clic sui pulsanti, uno spinner dentro il pulsante di solito è meglio di una sovrapposizione a schermo intero.

Domande frequenti

CSS per spinner semplici a elemento singolo (il trucco della rotazione a quattro bordi). SVG quando hai bisogno di una scia affusolata, animazioni multiple di stroke dasharray, o segmenti riempiti che sembrano colpi di vernice. CSS è più piccolo e semplice; SVG è più flessibile.

Probabilmente perché stai ruotando un grande elemento o animando una proprietà non compositata. Mantieni la dimensione dello spinner piccola, usa transform: rotate() (non top/margin), e evita di attivarlo mentre altre animazioni pesanti sono in esecuzione.

Quasi universalmente in senso orario. Gli spinner antiorari sembrano leggermente sbagliati perché la maggior parte dei segnali di rotazione reali (orologi, mulini a vento) vanno in senso orario. Attieniti alla convenzione a meno che tu non abbia un motivo specifico.

Con un setTimeout(..., 300) in JavaScript che aggiunge la classe loader, più un clearTimeout se l’operazione termina prima. Previene il lampeggiamento su risposte veloci senza nascondere ritardi reali.

Strumenti correlati