` 요소를 사용하는 것.
올바른 예:
<table>
<caption>2024년 10월 달력</caption>
<thead>
<tr>
<th scope="col">일</th>
<th scope="col">월</th>
<th scope="col">화</th>
<th scope="col">수</th>
<th scope="col">목</th>
<th scope="col">금</th>
<th scope="col">토</th>
</tr>
</thead>
<tbody>
<tr>
<td>29</td>
<td>30</td>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
</tr>
<tr>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
<td>10</td>
<td>11</td>
<td>12</td>
</tr>
<!-- 추가 행 -->
</tbody>
</table>
2. ARIA 속성
ARIA(Accessible Rich Internet Applications) 속성은 보조 기술에 추가적인 시맨틱 정보를 제공하여 상호작용 요소에 대한 이해를 향상시킵니다. ARIA 속성을 사용하여 다음을 수행하세요:
- 역할 정의: 캘린더 그리드에는 `role="grid"`, 각 날짜 셀에는 `role="gridcell"`과 같이 요소의 목적을 나타냅니다.
- 레이블 제공: `aria-label` 또는 `aria-labelledby`를 사용하여 요소에 설명적인 레이블을 제공합니다. 특히 시각적 레이블이 불충분할 때 유용합니다.
- 상태 표시: `aria-selected`와 같은 속성을 사용하여 선택된 날짜를 나타내고, `aria-disabled`를 사용하여 비활성화된 날짜를 나타냅니다.
- 설명 제공: `aria-describedby`를 사용하여 날짜 형식 설명과 같은 추가 정보를 요소와 연결합니다.
예시:
<table role="grid" aria-labelledby="date-picker-label">
<caption id="date-picker-label">날짜를 선택하세요</caption>
<thead>
<tr>
<th scope="col">일</th>
<th scope="col">월</th>
<th scope="col">화</th>
<th scope="col">수</th>
<th scope="col">목</th>
<th scope="col">금</th>
<th scope="col">토</th>
</tr>
</thead>
<tbody>
<tr>
<td role="gridcell" aria-disabled="true">29</td>
<td role="gridcell" aria-disabled="true">30</td>
<td role="gridcell"><button aria-label="2024년 10월 1일">1</button></td>
<td role="gridcell"><button aria-label="2024년 10월 2일">2</button></td>
<td role="gridcell"><button aria-label="2024년 10월 3일">3</button></td>
<td role="gridcell"><button aria-label="2024년 10월 4일">4</button></td>
<td role="gridcell"><button aria-label="2024년 10월 5일">5</button></td>
</tr>
<tr>
<td role="gridcell"><button aria-label="2024년 10월 6일">6</button></td>
<td role="gridcell"><button aria-label="2024년 10월 7일">7</button></td>
<td role="gridcell"><button aria-label="2024년 10월 8일">8</button></td>
<td role="gridcell"><button aria-label="2024년 10월 9일">9</button></td>
<td role="gridcell"><button aria-label="2024년 10월 10일">10</button></td>
<td role="gridcell"><button aria-label="2024년 10월 11일">11</button></td>
<td role="gridcell"><button aria-label="2024년 10월 12일">12</button></td>
</tr>
<!-- 추가 행 -->
</tbody>
</table>
참고: ARIA 속성이 올바르게 해석되는지 확인하기 위해 항상 실제 스크린 리더로 테스트하세요.
3. 키보드 탐색
키보드 탐색은 마우스나 다른 포인팅 장치를 사용할 수 없는 사용자에게 필수적입니다. 날짜 선택기 내의 모든 상호작용 요소가 키보드를 통해 접근 가능하도록 보장하세요.
- 포커스 관리: `tabindex` 속성을 사용하여 포커스 순서를 제어하세요. 포커스가 날짜 선택기를 통해 논리적으로 이동하도록 하세요. 사용자가 위젯과 상호작용할 때 JavaScript를 사용하여 포커스를 관리하세요.
- 화살표 키: 화살표 키를 사용하여 날짜 간 이동을 구현하세요. 왼쪽 및 오른쪽 화살표 키는 각각 이전 날짜와 다음 날짜로 이동해야 합니다. 위쪽 및 아래쪽 화살표 키는 각각 이전 주와 다음 주의 같은 요일로 이동해야 합니다.
- Home 및 End 키: Home 키는 현재 주의 첫째 날로, End 키는 현재 주의 마지막 날로 이동해야 합니다.
- Page Up 및 Page Down 키: Page Up 키는 이전 달로, Page Down 키는 다음 달로 이동해야 합니다.
- Enter 키: Enter 키는 포커스된 날짜를 선택해야 합니다.
- Escape 키: Escape 키는 날짜 선택기를 닫고 이를 트리거한 입력 필드나 버튼으로 포커스를 돌려보내야 합니다.
예시 (JavaScript):
// 키보드 탐색 처리 예시
const datePicker = document.getElementById('date-picker');
datePicker.addEventListener('keydown', function(event) {
switch (event.key) {
case 'ArrowLeft':
// 이전 날짜로 포커스 이동
break;
case 'ArrowRight':
// 다음 날짜로 포커스 이동
break;
case 'ArrowUp':
// 이전 주의 같은 요일로 포커스 이동
break;
case 'ArrowDown':
// 다음 주의 같은 요일로 포커스 이동
break;
case 'Enter':
// 포커스된 날짜 선택
break;
case 'Escape':
// 날짜 선택기 닫기
break;
}
});
4. 스크린 리더 호환성
스크린 리더는 사용자에게 정보를 제공하기 위해 시맨틱 HTML과 ARIA 속성에 의존합니다. 날짜 선택기가 NVDA, JAWS, VoiceOver와 같은 인기 있는 스크린 리더와 호환되는지 확인하세요.
- 설명적인 레이블: 모든 상호작용 요소에 명확하고 간결한 레이블을 제공하세요. `aria-label` 또는 `aria-labelledby`를 사용하여 추가적인 맥락을 제공하세요.
- 상태 알림: ARIA 속성을 사용하여 선택된 날짜에 대한 `aria-selected`, 비활성화된 날짜에 대한 `aria-disabled`와 같이 요소의 상태를 나타내세요. 스크린 리더는 이러한 상태를 사용자에게 알려줍니다.
- 라이브 리전(Live Regions): ARIA 라이브 리전(예: `aria-live="polite"`)을 사용하여 사용자가 다른 달로 이동할 때와 같이 날짜 선택기의 동적 변경 사항을 알리세요. 이를 통해 스크린 리더는 사용자의 작업 흐름을 방해하지 않고 변경 사항을 사용자에게 알릴 수 있습니다.
- 오류 처리: 오류나 유효성 검사 문제가 있는 경우, 스크린 리더가 접근할 수 있는 명확하고 유익한 오류 메시지를 제공하세요. `aria-describedby`를 사용하여 오류 메시지를 관련 입력 필드와 연결하세요.
예시:
<div aria-live="polite">
<!-- 월 이동과 같은 동적 콘텐츠 -->
</div>
5. 시각적 디자인
날짜 선택기의 시각적 디자인 또한 접근 가능해야 합니다. 다음을 고려하세요:
- 색상 대비: WCAG(Web Content Accessibility Guidelines) 2.1 레벨 AA 표준을 충족하도록 텍스트와 배경색 간의 충분한 색상 대비를 보장하세요. 색상 대비 검사 도구를 사용하여 대비 비율을 확인하세요.
- 포커스 표시기: 모든 상호작용 요소에 대해 명확하고 눈에 잘 띄는 포커스 표시기를 제공하세요. 포커스 표시기는 주변 요소와 구별되어야 하며 다른 요소에 의해 가려져서는 안 됩니다.
- 글꼴 크기 및 간격: 가독성과 사용성을 향상시키기 위해 읽기 쉬운 글꼴 크기와 요소 간 충분한 간격을 사용하세요.
- 색상에만 의존하지 않기: 정보를 전달하기 위해 색상에만 의존하지 마세요. 아이콘이나 텍스트와 같은 다른 시각적 신호를 사용하여 색상 코딩을 보완하세요.
6. 지역화 및 국제화
날짜 형식, 달력 시스템 및 언어 관행은 문화와 지역에 따라 다릅니다. 전 세계 사용자를 지원하기 위해 날짜 선택기가 적절하게 지역화 및 국제화되었는지 확인하세요.
- 날짜 형식: 유럽 및 아시아 일부 지역에서 흔한 DD/MM/YYYY와 북미에서 흔한 MM/DD/YYYY와 같은 다양한 날짜 형식을 지원하는 유연한 날짜 형식 라이브러리를 사용하세요. 사용자가 자신의 선호에 따라 날짜 형식을 사용자 정의할 수 있도록 하세요.
- 달력 시스템: 가장 널리 사용되는 그레고리력과 많은 이슬람 국가에서 사용되는 히즈리력과 같은 다양한 달력 시스템을 지원하세요.
- 언어 지원: 월 이름, 요일 이름 및 레이블을 포함한 날짜 선택기의 모든 텍스트 요소에 대한 번역을 제공하세요.
- 오른쪽에서 왼쪽(RTL) 지원: 아랍어 및 히브리어와 같은 RTL 언어에서 날짜 선택기가 올바르게 표시되는지 확인하세요. 이를 위해 위젯의 레이아웃과 스타일을 조정해야 할 수 있습니다.
- 시간대: 날짜를 처리할 때 시간대의 영향을 고려하세요. 날짜를 일관된 시간대(예: UTC)에 저장하고 표시할 때 사용자의 현지 시간대로 변환하세요.
예시: 날짜 형식 및 지역화를 처리하기 위해 `moment.js` 또는 `date-fns`와 같은 JavaScript 라이브러리를 사용하세요.
7. 모바일 접근성
모바일 기기 사용이 증가함에 따라 날짜 선택기가 모바일 플랫폼에서 접근 가능하도록 보장하는 것이 중요합니다. 다음을 고려하세요:
- 터치 대상: 모든 상호작용 요소가 모바일 기기에서 쉽게 탭할 수 있도록 충분히 큰 터치 대상을 갖도록 하세요. Apple은 최소 44x44 픽셀의 터치 대상 크기를 권장합니다.
- 반응형 디자인: 반응형 디자인 기술을 사용하여 날짜 선택기가 다양한 화면 크기와 방향에 적응하도록 하세요.
- 키보드 입력: 날짜 선택기에 키보드 입력이 필요한 경우, 날짜 입력에 최적화된 모바일 친화적인 키보드를 제공하세요.
- 제스처: 운동 장애가 있는 사용자가 사용하기 어려울 수 있는 제스처에만 의존하지 마세요. 키보드 탐색이나 음성 제어와 같은 대체 입력 방법을 제공하세요.
테스트 및 검증
날짜 선택기의 접근성을 보장하기 위해서는 철저한 테스트가 중요합니다. 자동 및 수동 테스트 방법을 조합하여 사용하세요:
- 자동화된 테스트: Axe 또는 WAVE와 같은 접근성 테스트 도구를 사용하여 일반적인 접근성 문제를 식별하세요.
- 수동 테스트: 스크린 리더와 키보드 탐색을 사용하여 날짜 선택기를 수동으로 테스트하여 장애가 있는 사람들이 사용할 수 있는지 확인하세요.
- 사용자 테스트: 장애가 있는 사람들과 사용자 테스트를 수행하여 피드백을 수집하고 개선할 영역을 식별하세요.
- WCAG 준수: 날짜 선택기가 WCAG 2.1 레벨 AA의 요구사항을 충족하는지 확인하세요.
접근성 있는 날짜 선택기 예시
몇몇 오픈 소스 및 상용 날짜 선택기 라이브러리는 우수한 접근성 지원을 제공합니다. 몇 가지 예는 다음과 같습니다:
- React Datepicker: ARIA 지원 및 키보드 탐색 기능을 갖춘 인기 있는 React 컴포넌트입니다.
- Air Datepicker: 우수한 접근성 기능을 갖춘 가볍고 사용자 정의 가능한 날짜 선택기입니다.
- FullCalendar: 포괄적인 접근성 지원을 제공하는 모든 기능을 갖춘 캘린더 컴포넌트입니다.
날짜 선택기 라이브러리를 선택할 때 접근성 기능을 신중하게 평가하고 특정 요구사항을 충족하는지 확인하세요.
접근성 있는 날짜 선택기 구축을 위한 모범 사례
다음은 접근성 있는 날짜 선택기 구축을 위한 모범 사례 요약입니다:
- 시맨틱 HTML을 사용하여 날짜 선택기를 구조화하세요.
- ARIA 속성을 사용하여 추가적인 시맨틱 정보를 제공하세요.
- 키보드 탐색이 완전히 구현되었는지 확인하세요.
- 스크린 리더로 테스트하여 호환성을 확인하세요.
- 충분한 색상 대비와 명확한 포커스 표시기를 제공하세요.
- 전 세계 사용자를 위해 날짜 선택기를 지역화하고 국제화하세요.
- 모바일 기기에 맞게 날짜 선택기를 최적화하세요.
- 철저한 테스트와 검증을 수행하세요.
결론
접근성 있는 날짜 선택기를 구축하는 것은 복잡하지만 필수적인 작업입니다. 이 가이드에 설명된 지침과 모범 사례를 따르면, 다양한 문화적, 기술적 환경에 걸쳐 모든 능력의 사용자를 만족시키는 포용적인 캘린더 위젯을 만들 수 있습니다. 접근성은 지속적인 과정이며, 날짜 선택기가 시간이 지나도 접근성을 유지하도록 보장하기 위해서는 지속적인 테스트와 개선이 중요합니다. 접근성을 우선시함으로써 모든 사람을 위한 더 포용적이고 사용자 친화적인 웹 경험을 만들 수 있습니다.
추가 자료