Get StartedFoundationsComponentsPatternsRulesDevelopAI & ToolsUpdates

Pagination

여러 페이지로 나뉜 콘텐츠를 탐색할 수 있도록 돕는 네비게이션 컴포넌트예요.

설치

pnpm dlx shadcn@latest add https://rebar.conmarket-landing.workers.dev/r/pagination.json

Anatomy

  • Root: 전체 Pagination을 감싸는 최상위 컨테이너예요. 접근성을 위해 <nav> 요소로 렌더링돼요.
  • Previous Button: 이전 페이지로 이동해요. 첫 번째 페이지에서는 숨겨져요.
  • Next Button: 다음 페이지로 이동해요. 마지막 페이지에서는 숨겨져요.
  • Page Link: 특정 페이지 번호로 직접 이동하는 버튼이에요. 현재 페이지는 Selected 상태로 표시돼요.
  • Ellipsis: 표시할 수 없는 페이지 범위를 …으로 축약해 나타내요. 인터랙션이 없는 요소예요.

Properties

State

  • Enabled: 기본 상태예요.
  • Hover: 커서가 올라간 상태예요.
  • Focus: 키보드 탐색 시 포커스를 받은 상태예요.
  • Pressed: 클릭하는 순간의 상태예요.
  • Selected: 현재 페이지를 나타내는 상태예요.
  • Disabled: disabled 로 모든 페이지 이동을 막은 상태예요.

슬롯 수와 Ellipsis

총 슬롯 수는 화살표와 빈 내비게이션 슬롯을 포함해 화면 크기별로 고정돼요. 첫 페이지와 마지막 페이지에서는 사용할 수 없는 화살표 대신 40px 빈 슬롯을 유지해, 페이지가 바뀌어도 버튼 위치와 전체 너비가 흔들리지 않아요.

  • 기본 (480px 이상): 총 슬롯 9개
  • 좁은 화면 (480px 미만): 총 슬롯 7개. 페이지 영역은 5개 슬롯을 유지하며, 현재 페이지의 앞뒤 페이지를 직접 선택할 수 있도록 첫 페이지와 마지막 페이지는 필요한 구간에서만 표시해요.

totalPages 가 0 또는 1이면 Pagination을 표시하지 않아요.

Controlled

page 와 onPageChange 로 페이지 상태를 외부에서 제어할 수 있어요. 바뀐 목록의 로딩, 포커스 이동, 결과 안내는 Pagination이 아니라 목록 영역에서 처리해요.

onPageChange 의 두 번째 인자는 변경 원인을 나타내는 reason 과 변경 전 페이지인 previousPage 를 제공해요.

reason발생 조건
page-item페이지 번호를 선택했을 때
previous이전 페이지 버튼을 선택했을 때
next다음 페이지 버튼을 선택했을 때
constraint외부에서 전달한 페이지가 유효 범위를 벗어나 보정됐을 때

Guidelines

Pagination 사용하기

콘텐츠가 여러 페이지로 나뉘어 있고, 사용자가 특정 페이지로 직접 이동하거나 현재 위치를 파악해야 할 때 사용해요. 검색 결과, 게시판 목록이 대표적인 사용 맥락이에요.

Pagination은 콘텐츠 목록 하단에 배치하며, 가운데 정렬을 기본으로 해요.

아래와 같은 경우에는 Pagination 대신 다른 방법을 고려해요.

  • 데이터 테이블: Table Pagination을 사용해요.
  • 단계적 흐름 (온보딩, 폼 진행 등): 스텝 인디케이터나 버튼 조합을 사용해요.
  • 콘텐츠 양이 적은 경우: 전체 길이가 화면 3~4개 분량 이하라면 페이지를 나누지 않고 한 번에 보여주는 것을 권장해요.
123
Do· 목록 하단 가운데

콘텐츠 목록 아래에 가운데 정렬로 배치해요.

12
Don't· 데이터 테이블에 사용

데이터 테이블에는 Table Pagination을 사용해요.

Pagination VS Table Pagination

데이터 테이블에서 사용자의 주요 행동은 페이지 번호로 이동하는 것보다 정렬, 필터로 원하는 데이터를 찾거나 순차적으로 훑어보는 것이에요. 그래서 한 번에 몇 개를 볼지(Rows Per Page)와 현재 범위(Page Range)를 제어할 수 있는 별도 컴포넌트가 필요해요.

PaginationTable Pagination
사용 맥락검색 결과, 게시판, 콘텐츠 목록데이터 테이블
핵심 컨트롤Page Link + Previous/Next ButtonRows Per Page + Page Range Select
현재 위치 표시Page Link에 Selected 상태 표시Page Range Select
페이지 이동Page Link 클릭Page Range Select로 선택
이전/다음 끝 처리hiddendisabled

접근성

루트는 nav 로 렌더링되며 기본 접근성 이름은 페이지 탐색 이에요. 같은 화면에 Pagination이 여러 개 있으면 aria-label 이나 aria-labelledby 로 대상을 구분해요.

현재 페이지 버튼에는 aria-current="page" 가 적용돼요. 키보드 사용자는 Tab으로 버튼 사이를 이동하고 Enter 또는 Space로 페이지를 선택할 수 있어요.

Props

Prop

Type

PaginationButton / PaginationPageItem

Pagination을 구성하는 버튼도 따로 내보내요. 직접 레이아웃을 만들거나 Table Pagination처럼 이전·다음 버튼만 필요할 때 사용해요.

Prop

Type

On this page