링 스피너와 같은 비확정적 "처리 중" 신호지만, 호의 길이 자체가 늘었다 줄었다 하기 때문에 일정한 속도로만 도는 단순한 링보다 더 오래 봐도 지루하지 않습니다. 진행률을 실제로 알 수 있는 작업이라면 같은 SVG 원을 확정적으로 쓰는 progress-ring으로 바꾸세요.
SVG <circle>의 stroke-dasharray로 전체 둘레를 정하고 stroke-dashoffset을 keyframe으로 움직여 보이는 호의 길이를 짧게-길게 반복시키는 동시에, 감싸는 컨테이너 전체를 rotate로 계속 돌립니다. 길이 변화와 회전이 겹치면서 머티리얼 디자인의 시그니처 로딩 애니메이션이 만들어집니다.
200ms 이내로 끝나는 로딩이면 아예 생략하고, 화면 전체를 가리는 긴 대기라면 스켈레톤을 우선 검토하세요. 감싸는 요소에 role="status"·aria-live="polite"를 주고 SVG는 장식이므로 aria-hidden="true"로 숨깁니다. prefers-reduced-motion에서는 호 길이 변화를 멈추고 일정한 회전만 남기는 식으로 단순화할 수 있습니다.