Components - Pagination

comment

  • 기본 구조: .ui-pagination__controls (이전/다음 + 페이지 리스트) + __size(선택) 순으로 배치
  • 네비게이션: .ui-pagination__navdata-page="first|prev|next|last" 부여, aria-label로 동작 명시
  • 페이지 버튼: .ui-pagination__page에 페이지 번호 표기, 현재 페이지에는 is-active + aria-current="page" 속성 설정
  • 표시 개수 선택: .ui-pagination__size 안에 기본 .ui-select-box 컴포넌트 사용
  • 가변 레이아웃: CSS 변수 --ui-pagination-gap, --ui-pagination-controls-gap 등으로 여백 조정 가능
  • 접근성: role="group", aria-label, aria-current 지정으로 스크린 리더가 현재 위치와 동작 파악 가능
  • 비활성화 규칙: 현재 페이지가 첫 페이지면 first/prev 버튼에 is-disabledaria-disabled="true" 부여, 마지막 페이지면 next/last 버튼에도 동일 적용
Pagination

HTML 구조

<div class="ui-pagination">
  <div class="ui-pagination__controls" role="group" aria-label="페이지 이동">
    <button type="button" class="ui-pagination__nav ui-pagination__nav--first is-disabled" data-page="first" aria-label="처음으로" aria-disabled="true" disabled></button>
    <button type="button" class="ui-pagination__nav ui-pagination__nav--prev is-disabled" data-page="prev" aria-label="이전 페이지" aria-disabled="true" disabled></button>
    <ol class="ui-pagination__pagers" role="list">
      <li>
        <button type="button" class="ui-pagination__page is-active" aria-current="page">1</button>
      </li>
      <li>
        <button type="button" class="ui-pagination__page">2</button>
      </li>
      <li>
        <span class="ui-pagination__ellipsis" aria-hidden="true">&hellip;</span>
      </li>
      <li>
        <button type="button" class="ui-pagination__page">10</button>
      </li>
    </ol>
    <button type="button" class="ui-pagination__nav ui-pagination__nav--next" data-page="next" aria-label="다음 페이지"></button>
    <button type="button" class="ui-pagination__nav ui-pagination__nav--last" data-page="last" aria-label="마지막으로"></button>
  </div>
  <div class="ui-pagination__size">
    <div class="ui-select-box" data-page-size-select aria-label="페이지당 항목 수 선택">
      <div class="ui-select-box__trigger js-select-value">
        <span data-selected-text>10개씩</span>
      </div>
      <div class="ui-select-box__panel js-select-box-panel">
        <div class="ui-select-box__list">
          <div class="ui-select-box__option js-select-option"><span>10개씩</span></div>
          <div class="ui-select-box__option js-select-option"><span>25개씩</span></div>
          <div class="ui-select-box__option js-select-option"><span>50개씩</span></div>
        </div>
      </div>
    </div>
  </div>
</div>