# Spinner Chỉ báo đang tải theo motif trân châu: ba viên trân châu nảy lần lượt. ## Khi nào dùng - Chờ một tác vụ ngắn, không biết trước thời lượng (tải dữ liệu, lưu). - Biết tiến độ thì dùng Progress; chờ bố cục dài thì dùng Skeleton. ## Biến thể | Biến thể | Lớp | Dùng khi | |---|---|---| | md (mặc định) | `tt-spinner` | Viên 12px | | sm | `tt-spinner tt-spinner--sm` | Viên 8px, đặt cạnh chữ hoặc trong nút | ## Cấu trúc ```html
Đang tải…
``` ## Trạng thái | Trạng thái | Hiệu ứng | |---|---| | Thường | Ba viên (`ink`, `pink`, `ink`) nảy 1s lệch .15s | | `prefers-reduced-motion` | Không nảy, hiện chữ "Đang tải…" bên cạnh | ## Token sử dụng `ink`, `pink`, `radius-round`, `space-4/6/8`. ## Khả năng tiếp cận - `role="status"` + nhãn ẩn "Đang tải…" đọc cho screen reader. - Giảm chuyển động: nhãn thành chữ nhìn thấy được. ## Nên / Không nên | Nên | Không nên | |---|---| | Đặt một spinner cho mỗi vùng đang tải | Đặt nhiều spinner chồng nhau | | Đổi nhãn nếu cần rõ nghĩa ("Đang lưu…") | Để spinner chạy mãi không báo lỗi | ## Nguồn Bổ sung có chủ đích: game không có spinner. Motif trân châu của tiệm; keyframes `tt-spinner-bounce`.