WCAG 2.1 항공사 WAI-ARIA 적용 사례
  • 모두를 위한 디자인
  • 항공사의 웹 접근성 준수 의무
  • 국내 접근성과 국제 접근성은 어떻게 다를까?
  • 항공사 접근성 위배로 인한 벌금 부과 사례
  • AOA 2023~
    • 주요 UI별 ARIA 적용 사례 (2022~2024)
      • 호버 콘텐츠 적용사례
      • 입력 글자 수 제한 사례
      • 🕹️Form 그룹의 오류 적용 사례
      • 비밀번호 실시간 오류 적용 사례
      • 🖼️SVG 이미지의 접근성 향상 방법
      • 오류메시지 종류별 적용 사례
      • 스낵바(Snack bar) 적용 사례
  • AOA 2019
    • 주요 UI별 ARIA 적용 사례 (2019)
      • 스핀 버튼 적용 사례
      • 페이지 네비게이터 적용 사례
      • 메인 네비게이션 구현 사례
      • 메뉴 적용 사례
      • 캐러셀 적용 사례
      • 채팅 상담 적용 사례
      • 툴팁 적용 사례
      • 그룹명 필수 항목 적용 사례
      • 이해하기 쉬운 데이터 테이블 적용 사례
      • 날짜 입력 적용 사례
    • 알아두면 좋은 TIP!
      • dl, dt, dd 태그를 남용하지 마세요.
      • 제발 나를 무시해 주세요.
      • 띄어쓰기를 주의하세요!
  • AOA 2018
    • 주요 UI별 ARIA 적용 사례 (2018)
      • 로딩 적용 사례
      • Date Picker 적용사례
      • 좌석선택 적용사례
      • 탭 UI 적용 사례
      • 모달 다이얼로그 적용 사례
      • 확장과 축소 콘텐츠 적용 사례
      • 정렬할 수 있는 table 적용 사례
      • 자동완성 적용 사례
      • 접근성 주요 개선 항목
        • 버튼을 왜 링크로 쓰는거지?
        • 그룹에게는 그룹명을 알려주자
        • 에러메세지는 왜 보이기만 하지?
        • 이해하기 어려운 폼 레이블
        • 화면을 보는 스크린리더 사용자
        • 전환되지 않는 페이지의 포커스
        • 동일한 기능의 서로 다른 UI
    • 알아두면 좋은 것들
      • role=application은 언제 사용할까?
      • 대문자로만 표현해야 할 때
      • 화면의 정렬을 위해 중복 태그를 사용하지 말 것
    • Screen Reader 테스트
      • Screen Reader와 Browser 조합
      • Screen Reader 버그
  • WAI-ARIA
    • Landmark Role
    • Widget Role & Attributes
  • Contact
    • 무엇이 궁금하세요?
Powered by GitBook
On this page

Was this helpful?

Edit on Git
  1. AOA 2019
  2. 주요 UI별 ARIA 적용 사례 (2019)

스핀 버튼 적용 사례

Previous주요 UI별 ARIA 적용 사례 (2019)Next페이지 네비게이터 적용 사례

Last updated 2 years ago

Was this helpful?

빠르고 편리하게 개수를 조정하는 스핀 버튼!

소량의 상품의 수량을 조정하기에 가장 쉽고 편리한 스핀 버튼은 쇼핑몰에서 흔하게 사용한다.

항공사에서도 승객 수를 선택할 때 스핀 버튼을 사용하는데 제대로 구현하지 않으면 스크린리더 사용자는 현재 상태를 알 수 없어 사용하기가 아주 어렵게 된다.

접근성을 준수한 스핀버튼을 제작해보자.

기본 마크업은 다음과 같다.

제작된 소스는 시맨틱하지 않은 <dl>, <dt>, <dd>로 되어 있어 role="presentation" 속성을 삽입하여 의미를 삭제했다. 물론 태그를 시맨틱하게 변경하여 수정할 수도 있었지만.......... 일정이..... 또르르...(변명 중)

 <dl role="presentation">
   <dt><span>성인</span></dt>
   <dd>
     <button>성인 탑승자 한 명 줄이기</button>       
     <label for="KE" class="offscreen">성인</label>
     <input type="text" id="KE" value="0" maxlength="1">        
     <div class="offscreen" aria-live="assertive" 
      aria-relevant="additions" aria-atomic="true">
      </div>        
     <button>성인 탑승자 한 명 늘리기</button>    
   </dd>
 </dl>          

+와 -의 버튼명은 각 레이블에 맞게 변경하여 성인인 경우 "성인 탑승자 한 명 줄이기", " 성인 탑승자 한 명 늘리기"로 적용하였다. 각 버튼을 클릭하면 aria-live="assertive", aria-relevant="additions", aria-atomic="true" 속성을 갖고 있는 비어있는 <div> 안에 현재의 탑승객 수를 읽는 노드가 들어오게 구현하였다.

탭키로 이동하여 승객을 3명으로 늘리기까지 스크린리더(NVDA)는 아래와 같이 읽게 된다.

성인 탑승자 한명 줄이기( - 버튼) 성인 편집창 1 (입력박스) 성인 탑승자 한명 늘리기 ( + 버튼) 성인 탑승자 2명으로 변경됨 성인 탑승자 3명으로 변경됨

항공사는 최대 9명까지만 신청이 가능하기 때문에 9명에 도달하면 + 버튼은 비활성 버튼으로 변경되고 해당 버튼에 aria-disabled="true"속성이 삽입되고 비활성화된 디자인으로 변경된다.

aria-disabled="true"속성을 사용하게 되면 사용할 수 없는 버튼으로 스크린리더가 읽게 되므로 버튼명을 사용할 수 없다는 버튼명으로 변경하거나 숨김 텍스트로 사용할 수 없음을 알려주지 않도록 주의해야 한다.

위 버튼을 토글 버튼으로 제작하지 않도록 주의해야 한다. 토글 버튼은 눌려진 상태와 눌려지지 않은 상태로 2가지 상태가 있을 때만 사용해야 하고, aria-disabled 속성을 사용하지 않는 것이 일반적이다.