② 목록 — 표 · 필터 · 선택 액션
가장 많이 만드는 화면입니다. 위에서부터 찾기 → 좁히기 → 고르기 → 처리하기 순서로 배치합니다.
배치 순서
| # | 구획 | 쓰는 컴포넌트 |
|---|---|---|
| 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건 선택됨”이 읽힙니다