CSS-laddningsgenerator

Nästa

En spinnare visar användaren att något händer. Den här generatorn skapar en enda cirkulär CSS-spinnare: ställ in diametern, kanttjockleken, accentfärgen och rotationshastigheten, titta på förhandsvisningen och kopiera CSS-koden. Allt är ren CSS, utan SVG, utan JavaScript och utan externa bibliotek.

Så här använder du generatorn

  1. 1

    Ställ in storleken

    Spinnarens diameter i pixlar. 40-80 px passar de flesta knappar och innehållsytor.

  2. 2

    Ställ in kanttjockleken

    Ringen är en kantlinje som ritas på en cirkel. Tjockare kant ger en kraftfullare båge; 4-8 px fungerar bra vid 60 px.

  3. 3

    Välj färg

    Accentfärgen på den roterande bågen. Resten av ringen hålls ljusgrå så att bågen sticker ut.

  4. 4

    Ställ in hastigheten och kopiera CSS

    Tid per helt varv i sekunder. Runt 1 sekund är den vanliga bästa punkten; under 500 ms känns det stressigt, över 2 s trögt.

Så fungerar den genererade CSS-koden

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

Spinnaren är en cirkel som ritas med en tjock kantlinje. Regeln border-top-color färgar bara toppen av ringen med accentfärgen, så ringen uppfattas som en båge, och regeln @keyframes spin roterar den runt sin mittpunkt. Rotation med transform: rotate() håller animeringen billig, eftersom webbläsaren flyttar elementet på kompositorn i stället för att rita om det bildruta för bildruta.

För att visa den på en sida lägger du till ett element och laddar CSS:

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

Gör den tillgänglig

  • Lägg till role="status" så att skärmläsare läser upp spinnaren.
  • Sätt aria-label till statustexten, till exempel “Laddar”.
  • Dölj inte innehåll bakom en spinnare i mer än några sekunder utan en reservlösning vid timeout.
  • Respektera prefers-reduced-motion. Ersätt roterande animation med en enkel toning eller en statisk text “Laddar…” för användare som valt bort rörelse:
@media (prefers-reduced-motion: reduce) {
  .loader { animation: none; background: currentColor; opacity: .4; }
}

När du ska använda en spinnare i stället för ett optimistiskt gränssnitt

  • Svar under 100 ms: ingen spinnare behövs; det mänskliga ögat märker knappt fördröjningen.
  • 100 ms – 1 s: en diskret spinnare (litet ring, knapptext “Laddar…”) förhindrar dubbelklick.
  • 1 s – 10 s: en tydlig spinnare, helst med förlopp om det går att mäta.
  • > 10 s: det är inte ett spinnarproblem; ta reda på vad som är långsamt och åtgärda det.

Vid formulärskick och knappklick är en spinnare inuti knappen oftast bättre än ett lager över hela sidan.

Vanliga frågor

CSS för enkla spinnare med ett enda element (tricket med att rotera fyra kantlinjer). SVG när du behöver en avsmalnande svans, flera stroke-dasharray-animationer eller fyllda segment som ser ut som penseldrag. CSS är mindre och enklare; SVG är mer flexibel.

Troligen för att du roterar ett stort element eller animerar en egenskap som inte komponeras separat. Håll spinnaren liten, använd transform: rotate() (inte top/margin) och undvik att starta den medan andra tunga animationer körs.

Nästan alltid medurs. Spinnare som roterar moturs känns subtilt fel, eftersom de flesta verkliga rotationsledtrådar (klockor, väderkvarnar) går medurs. Håll dig till konventionen om du inte har ett särskilt skäl.

Med en setTimeout(..., 300) i JavaScript som lägger till laddarens klass, plus en clearTimeout om åtgärden hinner bli klar först. Det förhindrar flimmer vid snabba svar utan att dölja verkliga fördröjningar.

Relaterade verktyg

Verktyget finns på andra språk