Generator loaderów CSS

Dalej

Spinner pokazuje użytkownikowi, że coś się dzieje. Ten generator tworzy jeden okrągły spinner w CSS: ustaw średnicę, grubość obramowania, kolor akcentu i prędkość obrotu, obserwuj podgląd na żywo i skopiuj kod CSS. Wszystko to czysty CSS, bez SVG, bez JavaScriptu i bez zewnętrznych bibliotek.

Jak korzystać z generatora

  1. 1

    Ustaw rozmiar

    Średnica spinnera w pikselach. 40-80 px pasuje do większości przycisków i obszarów treści.

  2. 2

    Ustaw grubość obramowania

    Pierścień to obramowanie narysowane na kole. Grubsze obramowanie daje wyraźniejszy łuk; 4-8 px wygląda dobrze przy 60 px.

  3. 3

    Wybierz kolor

    Kolor akcentu obracającego się łuku. Reszta pierścienia pozostaje jasnoszara, aby łuk się wyróżniał.

  4. 4

    Ustaw prędkość i skopiuj CSS

    Czas pełnego obrotu w sekundach. Około 1 sekundy to częsty złoty środek; poniżej 500 ms wygląda gorączkowo, a powyżej 2 s ospale.

Jak działa wygenerowany CSS

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

Spinner to koło narysowane grubym obramowaniem. Reguła border-top-color maluje tylko górną część pierścienia kolorem akcentu, dzięki czemu pierścień wygląda jak łuk, a reguła @keyframes spin obraca go wokół środka. Obrót przez transform: rotate() utrzymuje animację lekką, bo przeglądarka przesuwa element na kompozytorze zamiast rysować go klatka po klatce.

Aby wyświetlić go na stronie, dodaj jeden element i załaduj CSS:

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

Zadbaj o dostępność

  • Dodaj role="status", aby czytniki ekranu zapowiadały spinner.
  • Ustaw aria-label z tekstem stanu, na przykład “Ładowanie”.
  • Nie ukrywaj treści za spinnerem dłużej niż kilka sekund bez awaryjnego limitu czasu.
  • Szanuj prefers-reduced-motion. Użytkownikom, którzy wyłączyli animacje, zamiast obrotu pokaż proste wygaszenie lub statyczny tekst “Ładowanie…”:
@media (prefers-reduced-motion: reduce) {
  .loader { animation: none; background: currentColor; opacity: .4; }
}

Kiedy używać spinnera, a kiedy optymistycznego UI

  • Odpowiedź poniżej 100 ms: spinner zbędny; ludzkie oko ledwie dostrzega opóźnienie.
  • 100 ms – 1 s: subtelny spinner (małe kółko, tekst przycisku “Ładowanie…”) zapobiega podwójnym kliknięciom.
  • 1 s – 10 s: wyraźny spinner, najlepiej z postępem, jeśli da się go zmierzyć.
  • > 10 s: to nie problem spinnera; ustal, co jest wolne, i napraw to.

Przy wysyłaniu formularzy i klikaniu przycisków spinner wewnątrz przycisku zwykle sprawdza się lepiej niż nakładka na całą stronę.

Najczęściej zadawane pytania

CSS do prostych jednoelementowych spinnerów (sztuczka z obracaniem czterech obramowań). SVG, gdy potrzebujesz zwężającej się smugi, wielu animacji stroke-dasharray albo wypełnionych segmentów wyglądających jak pociągnięcia pędzla. CSS jest mniejszy i prostszy; SVG bardziej elastyczny.

Prawdopodobnie dlatego, że obracasz duży element albo animujesz właściwość niekompozytowaną. Utrzymuj mały rozmiar spinnera, używaj transform: rotate() (nie top/margin) i unikaj uruchamiania go, gdy działają inne ciężkie animacje.

Niemal powszechnie zgodnie z ruchem wskazówek zegara. Spinnery obracające się w przeciwną stronę wydają się subtelnie nie tak, bo większość rzeczywistych wskazówek obrotu (zegary, wiatraki) idzie zgodnie z ruchem zegara. Trzymaj się konwencji, chyba że masz konkretny powód.

Za pomocą setTimeout(..., 300) w JavaScripcie, który dodaje klasę loadera, plus clearTimeout, jeśli operacja skończy się wcześniej. Zapobiega migotaniu przy szybkich odpowiedziach, nie ukrywając realnych opóźnień.

Powiązane narzędzia