역할 · 위젯
role="scrollbar"
어떤 영역의 내용이 얼마나 스크롤되었는지 보여 주고 조절하는 스크롤 막대입니다. 브라우저 기본 스크롤바로 충분하면 쓰지 않습니다.
한눈에 보기
- 분류
- 위젯
- 대응 HTML
- 없음 (브라우저·운영체제의 기본 스크롤바가 자동으로 제공됨)
- 이름 정하는 방법
- 작성자
- 이름 필수
- 아니요
- 필수 상위 요소
- 없음
- 필수 하위 요소
- 없음
설명
scrollbar는 스크롤 가능한 영역의 현재 위치를 범위 값으로 표현합니다. 필수 속성은 두 가지입니다.
aria-controls— 이 스크롤바가 스크롤하는 영역의id.aria-valuenow— 현재 스크롤 위치.aria-valuemin·aria-valuemax의 기본값은 0과 100이고,aria-orientation의 기본값은 세로(vertical)입니다(슬라이더는 가로가 기본).
브라우저 기본 스크롤바는 이미 접근 가능하고, 키보드 사용자는 스크롤 영역에 포커스를 두고 방향키·Page Down으로 스크롤합니다. 그래서 대부분은 이 역할이 필요 없습니다. 디자인 때문에 기본 스크롤바를 숨기고 가짜 막대를 그렸을 때, 그 막대가 실제 스크롤 위치를 나타낸다는 것을 알릴 때만 씁니다.
스크롤 영역 자체를 키보드로 쓸 수 있어야 합니다
커스텀 스크롤바를 만들 때 가장 흔한 결함은 키보드로 스크롤할 방법이 없어지는 것입니다. 스크롤 영역에 tabindex="0"과 이름(예: role="region" + aria-label)을 주어 포커스를 받게 하면 브라우저 기본 키보드 스크롤이 그대로 동작합니다. 스크롤바 막대를 별도로 포커스 가능하게 만든다면 슬라이더처럼 방향키·Home·End를 구현해야 합니다. APG에는 scrollbar 전용 패턴이 없습니다.
테스터 관점
- 마우스 없이 내용 끝까지 스크롤할 수 있는지 확인합니다(WCAG 2.1.1 키보드).
aria-valuenow가 실제 스크롤 위치에 맞게 갱신되는지 확인합니다.
함께 쓰는 속성
필수 속성
지원 속성
전역 속성(이름·설명 등)은 모든 역할에 쓸 수 있어 생략했습니다.
키보드 동작
| 키 | 동작 |
|---|---|
| ↓ | (스크롤 영역 또는 포커스 가능한 스크롤바) 아래로 조금 스크롤합니다. 가로 스크롤바는 →. |
| ↑ | 위로 조금 스크롤합니다. 가로 스크롤바는 ←. |
| Page Down | 한 화면만큼 아래로 스크롤합니다. |
| Page Up | 한 화면만큼 위로 스크롤합니다. |
| Home | 맨 처음으로 스크롤합니다. |
| End | 맨 끝으로 스크롤합니다. |
사용 예
커스텀 세로 스크롤바
<div id="log" role="region" aria-label="채팅 기록" tabindex="0" class="no-native-scrollbar">
...
</div>
<div role="scrollbar" aria-controls="log" aria-orientation="vertical"
aria-valuemin="0" aria-valuemax="100" aria-valuenow="0">
<div class="thumb"></div>
</div>스크롤 위치 동기화
log.addEventListener('scroll', function () {
var max = log.scrollHeight - log.clientHeight;
var pct = max ? Math.round(log.scrollTop / max * 100) : 0;
bar.setAttribute('aria-valuenow', String(pct));
});aria-controls 누락
<div role="scrollbar" aria-valuenow="30"></div>
<!-- 무엇을 스크롤하는지 알 수 없습니다 -->직접 해 보기
아래 영역에 포커스를 두고 ↓·Page Down·End로 스크롤해 보세요(마우스 휠도 됩니다). 오른쪽의 커스텀 스크롤바는 포커스를 받지 않고, 스크롤 위치에 맞춰 aria-valuenow만 갱신됩니다. 막대를 클릭해도 이동합니다.
제1조 목적 — 이 약관은 서비스 이용 조건을 정합니다.
제2조 정의 — 회원이란 약관에 동의한 사람입니다.
제3조 약관의 효력 — 게시한 날부터 효력이 생깁니다.
제4조 회원 가입 — 가입 신청서를 작성해 신청합니다.
제5조 개인정보 — 관련 법령에 따라 보호합니다.
제6조 서비스 변경 — 변경 7일 전에 알립니다.
제7조 계약 해지 — 언제든 탈퇴할 수 있습니다.
제8조 분쟁 해결 — 관할 법원은 민사소송법에 따릅니다.
실시간 코드 — 조작하면 속성 값이 바뀌는 모습을 볼 수 있습니다
화면낭독기에서는
| 상황 | 들리는 안내 (예) |
|---|---|
| 가상 커서로 스크롤바에 도달 | 스크롤 막대, 세로, 40 |
사용 지침
이렇게 쓰세요
- 기본 스크롤바를 숨겼다면 스크롤 영역이 키보드 포커스를 받게 합니다.
aria-controls와aria-valuenow를 반드시 넣고, 스크롤할 때마다 값을 갱신합니다.
이렇게 쓰지 마세요
- 기본 스크롤바로 충분한데 커스텀 스크롤바를 만들지 않습니다.
- 스크롤바를 포커스 가능하게 만들고 키보드 동작을 빠뜨리지 않습니다.