🎉 디자인 시스템 v5.0 — 본문 16px · 컴포넌트 47종 · 스타터 킷 제공
개발패턴 5종 ★② 목록 — 표·필터·선택

② 목록 — 표 · 필터 · 선택 액션

가장 많이 만드는 화면입니다. 위에서부터 찾기 → 좁히기 → 고르기 → 처리하기 순서로 배치합니다.

배치 순서

#구획쓰는 컴포넌트
1검색 · 보기 전환 · 등록검색 필드 · 콘텐츠 스위처 · 버튼
2적용된 필터필터 태그 .jt-tag
3선택 액션바 (선택했을 때만 나타남).jt-bulkbar
4표표 — 정렬·행 선택
5건수 · 페이지페이지네이션

규칙

필터는 “지금 무엇이 걸려 있는지” 보여야 합니다

드롭다운 안에만 두면 사용자는 왜 결과가 적은지 모릅니다. 적용된 필터를 태그로 꺼내 놓으세요. 각 태그에 제거 버튼(close 아이콘)과 aria-label을 붙입니다.

선택 액션바는 선택했을 때만

아무것도 선택하지 않았는데 “일괄 발행” 버튼이 떠 있으면 누를 수 없는 버튼이 화면을 차지합니다. 0건일 때는 숨기고, 1건 이상일 때 나타나게 하세요.

🚫

어두운 .jt-bulkbar 위의 ghost 버튼은 글자색만 바꾸면 흰 배경 + 흰 글자가 되어 사라집니다. 시스템이 --jt-btn-bg: transparent까지 처리해 두었으니 그대로 쓰세요.

건수를 반드시 보여주세요

전체 <span class="jt-num">128</span>건 중 <span class="jt-num">1–4</span>

무한 스크롤은 “전체 몇 건인지” 감이 없어 업무 화면에는 맞지 않습니다. 페이지네이션을 쓰고 총 건수를 함께 적으세요.

표는 반드시 감쌉니다

<div class="jt-table-wrap" data-sticky-head>
  <table class="jt-table">…</table>
</div>

jt-table-wrap이 없으면 좁은 화면에서 가로 스크롤이 페이지 전체로 번집니다. data-sticky-head는 긴 표에서 헤더를 고정합니다.

모바일에서는 표 대신 카드

열이 4개를 넘으면 모바일에서 표는 읽을 수 없습니다. .jt-card-row로 전환하세요. ⑤ 모바일 내비게이션의 왼쪽 예시가 그 형태입니다.

하지 말 것

  • 결과가 0건인데 빈 표만 보여주기 → ④ 빈 상태
  • 정렬 상태를 화살표 그림으로만 표시 → aria-sort 속성을 바꾸면 CSS가 알아서 그립니다
  • 행 전체를 div + onclick으로 만들기 → 키보드로 못 누릅니다
  • 말줄임을 버튼·메뉴에 적용 → 표 셀에서만 허용됩니다

접근성

  • 전체 선택 체크박스에 aria-label="전체 선택", 각 행에는 무엇을 선택하는지 담은 aria-label
  • 현재 페이지에 aria-current="page", 화살표 버튼에 aria-label
  • 선택 액션바는 aria-live="polite" 영역에 두면 “2건 선택됨”이 읽힙니다