Spinner .mv-spinner

currentColor로 그리는 단일 요소 로딩 표시기 모음입니다. ring, trailing arc, wave dots, equalizer bars, orbit, pulse와 5가지 크기를 제공합니다.

카테고리피드백
유형CSS 전용 (.mv-spinner)
상태안정
Keywordsspinner, loader, loading, chargement, dots, bars, orbit, pulse, ring

When to use

  • A button or inline area waits on a short action of unknown duration, such as saving or submitting
  • A small, neutral loading cue must inherit the surrounding text color at any size

Avoid when

  • The loading content has a known layout that placeholders could preview → use Skeleton instead
  • The completion percentage is known and should be shown → use Progress instead
  • An AI assistant is generating a reply and needs a branded thinking indicator with a label → use Pixel Loader instead

설치

node scripts/add.mjs spinner --out ./src/marvelous

Marvelous UI MCP 서버를 사용하는 AI 에이전트: install_components({ slugs: ["spinner"], target_dir: "<absolute path>/src/marvelous", framework: "react" }).

복사되는 파일(의존성 포함): tokens/tokens.css, core/base.css, components/spinner/spinner.css.

사용법

기본 마크업입니다. 여기서 시작해 속성, data-*, CSS 변수로 커스터마이즈하세요:

<div style="display:grid;gap:2rem;justify-items:center;width:100%">
  <!-- Variants -->
  <div style="display:flex;flex-wrap:wrap;justify-content:center;gap:1rem">
    <figure style="margin:0;display:grid;justify-items:center;gap:.75rem;width:6.5rem;padding:1.25rem .5rem 1rem;border:1px solid var(--mv-border);border-radius:var(--mv-radius-lg);background:var(--mv-surface)">
      <span class="mv-spinner" data-size="lg" role="status"><span class="mv-sr-only">Loading…</span></span>
      <figcaption style="font-size:.75rem;color:var(--mv-fg-muted)">ring</figcaption>
    </figure>
    <figure style="margin:0;display:grid;justify-items:center;gap:.75rem;width:6.5rem;padding:1.25rem .5rem 1rem;border:1px solid var(--mv-border);border-radius:var(--mv-radius-lg);background:var(--mv-surface)">
      <span class="mv-spinner" data-variant="arc" data-size="lg" role="status"><span class="mv-sr-only">Loading…</span></span>
      <figcaption style="font-size:.75rem;color:var(--mv-fg-muted)">arc</figcaption>
    </figure>
    <figure style="margin:0;display:grid;justify-items:center;gap:.75rem;width:6.5rem;padding:1.25rem .5rem 1rem;border:1px solid var(--mv-border);border-radius:var(--mv-radius-lg);background:var(--mv-surface)">
      <span class="mv-spinner" data-variant="dots" data-size="lg" role="status"><span class="mv-sr-only">Loading…</span></span>
      <figcaption style="font-size:.75rem;color:var(--mv-fg-muted)">dots</figcaption>
    </figure>
    <figure style="margin:0;display:grid;justify-items:center;gap:.75rem;width:6.5rem;padding:1.25rem .5rem 1rem;border:1px solid var(--mv-border);border-radius:var(--mv-radius-lg);background:var(--mv-surface)">
      <span class="mv-spinner" data-variant="bars" data-size="lg" role="status"><span class="mv-sr-only">Loading…</span></span>
      <figcaption style="font-size:.75rem;color:var(--mv-fg-muted)">bars</figcaption>
    </figure>
    <figure style="margin:0;display:grid;justify-items:center;gap:.75rem;width:6.5rem;padding:1.25rem .5rem 1rem;border:1px solid var(--mv-border);border-radius:var(--mv-radius-lg);background:var(--mv-surface)">
      <span class="mv-spinner" data-variant="orbit" data-size="lg" role="status"><span class="mv-sr-only">Loading…</span></span>
      <figcaption style="font-size:.75rem;color:var(--mv-fg-muted)">orbit</figcaption>
    </figure>
    <figure style="margin:0;display:grid;justify-items:center;gap:.75rem;width:6.5rem;padding:1.25rem .5rem 1rem;border:1px solid var(--mv-border);border-radius:var(--mv-radius-lg);background:var(--mv-surface)">
      <span class="mv-spinner" data-variant="pulse" data-size="lg" role="status"><span class="mv-sr-only">Loading…</span></span>
      <figcaption style="font-size:.75rem;color:var(--mv-fg-muted)">pulse</figcaption>
    </figure>
  </div>

  <!-- Sizes + colors (inherit currentColor) -->
  <div style="display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:1.5rem;color:var(--mv-accent)">
    <span class="mv-spinner" data-size="xs" role="status"><span class="mv-sr-only">Loading…</span></span>
    <span class="mv-spinner" data-size="sm" role="status"><span class="mv-sr-only">Loading…</span></span>
    <span class="mv-spinner" role="status"><span class="mv-sr-only">Loading…</span></span>
    <span class="mv-spinner" data-size="lg" role="status"><span class="mv-sr-only">Loading…</span></span>
    <span class="mv-spinner" data-size="xl" data-variant="arc" role="status"><span class="mv-sr-only">Loading…</span></span>
    <span class="mv-spinner" data-size="xl" data-variant="bars" role="status" style="color:var(--mv-success)"><span class="mv-sr-only">Now playing</span></span>
  </div>

  <!-- In context -->
  <div style="display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:1rem">
    <button class="mv-button" disabled style="opacity:1">
      <span class="mv-spinner" data-size="sm" aria-hidden="true"></span>
      Saving…
    </button>
    <button class="mv-button" data-variant="outline" disabled style="opacity:1">
      <span class="mv-spinner" data-variant="dots" data-size="sm" aria-hidden="true"></span>
      Generating
    </button>
    <span class="mv-spinner-label" role="status">
      <span class="mv-spinner" data-variant="arc" data-size="sm" aria-hidden="true"></span>
      Syncing 3 files…
    </span>
  </div>
</div>

API

Attributes

Name유형DefaultDescription
data-variantring | arc | dots | bars | orbit | pulseringAnimation shape.
data-sizexs | sm | lg | xl(1.25rem)Size: 0.875, 1, 1.25, 2 or 3 rem.

CSS classes

NameDescription
mv-spinnerOn a <span role="status"> containing a .mv-sr-only label (or aria-hidden="true" when paired with visible text).
mv-spinner-labelSpinner + visible text row (put role="status" on this container).

CSS variables

NameDefaultDescription
--mv-spinner-size1.25remCustom size (overrides data-size).
--mv-spinner-colorcurrentColorColor (inherits the text color by default).
--mv-spinner-speed1Speed multiplier (2 = twice as fast).

Accessibility

role="status" + a .mv-sr-only label (“Loading…”) for a polite announcement; inside a button or next to visible text, set aria-hidden="true" on the spinner and let the text carry the information. Reduced motion: animations stop, the static shape stays visible.

이 페이지는 AI로 번역되었습니다. 번역 문제 신고