Skeleton

Skeleton

콘텐츠가 로드되기 전 레이아웃을 미리 보여 주는 Next.js Client Component입니다. 텍스트·아바타·이미지· 버튼 형태와 조합 레이아웃을 지원하며 role="status" ·aria-busy · aria-label로 접근성을 보장합니다.

기본

`skeleton`에 `skeleton_text` · `skeleton_title` 형태 클래스를 조합합니다.

형태

아바타·이미지·버튼·블록 등 콘텐츠 유형에 맞는 형태 클래스를 사용합니다.

카드

카드·대시보드 위젯 로딩 시 실제 콘텐츠 구조와 유사하게 배치합니다.

정적

`skeleton_static`을 지정하면 쉬머 애니메이션 없이 고정 플레이스홀더만 표시합니다. `prefers-reduced-motion` 환경에서도 애니메이션이 비활성화됩니다.

마크업

스켈레톤 그룹에 role="status"aria-busy="true"를 지정하고, 장식용 막대에는aria-hidden="true"를 추가합니다. 실제 콘텐츠가 로드되면 스켈레톤을 제거하고 aria-busy="false"로 변경합니다.

<!-- 문단 -->
<div class="skeleton_group" role="status"
  aria-live="polite" aria-busy="true" aria-label="콘텐츠 로딩 중">
  <span class="skeleton skeleton_title" aria-hidden="true"></span>
  <span class="skeleton skeleton_text" aria-hidden="true"></span>
  <span class="skeleton skeleton_text skeleton_w-md" aria-hidden="true"></span>
</div>

<!-- 아바타 + 텍스트 행 -->
<div class="skeleton_row">
  <span class="skeleton skeleton_circle" aria-hidden="true"></span>
  <div class="skeleton_row-body">
    <span class="skeleton skeleton_text skeleton_w-lg" aria-hidden="true"></span>
    <span class="skeleton skeleton_text skeleton_w-sm" aria-hidden="true"></span>
  </div>
</div>

API · Props

Prop타입기본값설명
activebooleantrue쉬머 애니메이션. false면 skeleton_static
avatarbooleanfalse아바타 + 본문 행 레이아웃
paragraphboolean | numberfalse본문 줄 수. false·true는 기본 3줄, 0은 자동 콘텐츠 숨김
roundbooleanfalse원형만 표시
ariaLabelstring콘텐츠 로딩 중role=status 라벨
classNamestringskeleton_group 루트에 추가 클래스

API · Children

Children설명
children커스텀 Skeleton 막대를 전달하는 React children. paragraph={0}으로 자동 콘텐츠 숨김

클래스 · 속성

React 컴포넌트가 렌더하는 OOCSS 클래스입니다. HTML 마크업으로 직접 작성할 때 동일하게 조합합니다.

클래스설명
skeleton · skeleton_text · skeleton_title · skeleton_circle막대·제목·원형
skeleton_button · skeleton_image · skeleton_block버튼·이미지·블록 형태
skeleton_w-sm · skeleton_w-md · skeleton_w-lg줄 너비
skeleton_group · skeleton_row · skeleton_row-body레이아웃
skeleton_static · skeleton_sm · skeleton_lg애니메이션·크기

전체 영역 스피너·오버레이는 Spin 컴포넌트를, 빈 상태 UI는 Empty 컴포넌트를 사용하세요.

디자인 토큰

토큰기본값설명
--skeleton-bg · --skeleton-shine배경·쉬머
--skeleton-text-height · --skeleton-title-height0.875rem · 1.125rem줄 높이
--skeleton-avatar-size · --skeleton-gap · --skeleton-duration아바타·간격·주기