CSS-loadergenerator

Volgende

Een spinner laat de gebruiker zien dat er iets gebeurt. Deze generator maakt één cirkelvormige CSS-spinner: stel de diameter, de randdikte, de accentkleur en de rotatiesnelheid in, bekijk het live voorbeeld en kopieer de CSS. Alles is pure CSS, zonder SVG, zonder JavaScript en zonder externe bibliotheken.

Zo gebruik je de generator

  1. 1

    Stel de grootte in

    Diameter van de spinner in pixels. 40-80 px past bij de meeste knoppen en inhoudsgebieden.

  2. 2

    Stel de randdikte in

    De ring is een rand die op een cirkel wordt getekend. Een dikkere rand geeft een krachtigere boog; 4-8 px staat goed bij 60 px.

  3. 3

    Kies de kleur

    De accentkleur van de draaiende boog. De rest van de ring blijft lichtgrijs, zodat de boog opvalt.

  4. 4

    Stel de snelheid in en kopieer de CSS

    Tijd per volledige omwenteling in seconden. Rond 1 seconde is meestal ideaal; onder 500 ms voelt het gehaast, boven 2 s traag.

Hoe de gegenereerde CSS werkt

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

De spinner is een cirkel die met een dikke rand wordt getekend. De regel border-top-color kleurt alleen de bovenkant van de ring met de accentkleur, zodat de ring als een boog leest, en de regel @keyframes spin draait hem om zijn middelpunt. Draaien met transform: rotate() houdt de animatie goedkoop, omdat de browser het element op de compositor beweegt in plaats van het beeld voor beeld opnieuw te tekenen.

Om hem op een pagina te tonen, voeg je één element toe en laad je de CSS:

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

Maak hem toegankelijk

  • Voeg role="status" toe, zodat schermlezers de spinner aankondigen.
  • Zet aria-label met de statustekst, bijvoorbeeld “Laden”.
  • Verberg inhoud niet langer dan een paar seconden achter een spinner zonder een fallback bij time-out.
  • Respecteer prefers-reduced-motion. Vervang de draaianimatie voor gebruikers die hem uit hebben gezet door een eenvoudige fade of een statische tekst “Laden…”:
@media (prefers-reduced-motion: reduce) {
  .loader { animation: none; background: currentColor; opacity: .4; }
}

Wanneer een spinner gebruiken en wanneer een optimistische UI

  • Reactie onder 100 ms: geen spinner nodig; het menselijk oog merkt de vertraging nauwelijks.
  • 100 ms – 1 s: een subtiele spinner (klein cirkeltje, knoptekst “Laden…”) voorkomt dubbelklikken.
  • 1 s – 10 s: een duidelijke spinner, bij voorkeur met voortgang als die meetbaar is.
  • > 10 s: dit is geen spinnerprobleem; zoek uit wat traag is en los dat op.

Bij het versturen van formulieren en het klikken op knoppen is een spinner in de knop meestal beter dan een overlay over de hele pagina.

Veelgestelde vragen

CSS voor eenvoudige spinners met één element (de rotatietruc met vier randen). SVG wanneer je een taps toelopende staart, meerdere stroke-dasharray-animaties of gevulde segmenten wilt die op penseelstreken lijken. CSS is kleiner en eenvoudiger; SVG is flexibeler.

Waarschijnlijk omdat je een groot element laat draaien of een niet-composietbare eigenschap animeert. Houd de spinner klein, gebruik transform: rotate() (niet top/margin) en start hem niet terwijl er andere zware animaties lopen.

Vrijwel altijd met de klok mee. Tegen de klok in voelt subtiel verkeerd, omdat de meeste echte rotatiereferenties (klokken, windmolens) met de klok mee gaan. Houd je aan de conventie, tenzij je een specifieke reden hebt.

Met een setTimeout(..., 300) in JavaScript die de loaderklasse toevoegt, plus een clearTimeout als de bewerking eerder klaar is. Dit voorkomt geflikker bij snelle reacties zonder echte vertragingen te verbergen.

Gerelateerde tools

Tool beschikbaar in andere talen