Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
최소한의 마크업으로 최대한의 접근성 확보하기
STEP1: 언어 설정하기
키워드
lang
속성https://developer.mozilla.org/ko/docs/Web/HTML/Global_attributes/lang
수정해보기
한글로 작성되어 있기 때문에 한국 언어 태그인
ko
로 수정한다.수정 전과 후 차이 비교하기
en
속성일 때는 스크린리더가 어떻게 해석하며,ko
속성일 때는 어떻게 해석하는지 파악하기en
속성 ⇒ 항공편 검색 ‘button’, 숫자를 영어로 발음한다.ko
속성 ⇒ 한글로 말해준다.STEP2: 시맨틱 태그 사용하기
키워드
App.tsx
대상으로만 고민하기main
tag: https://developer.mozilla.org/ko/docs/Web/HTML/Element/main앱의 핵심적인 기능을 담고있는
div
태그를main
태그로 수정합니다.다음으로, flight-booking-container라는 클래스명을 가진 div 태그를 수정해야합니다.
문서 내부에 독립적인 컨텐츠에 사용할 때는 대부분
article
태그를 사용하고, 문서의 구역을 나누어서 표현할 때는section
태그를 사용하기 때문에section
태그를 사용하는 것이 더 적합하다고 생각이 들었습니다. 따라서 해당 태그는section
으로 수정해줍니다.STEP3: 버튼 접근성 향상시키기
기본적으로 웹 표준을 준수하는 태그를 사용하는 것만으로도 네이티브 HTML이 지원해주는 접근성 기능을 활용할 수 있습니다. 예를 들어, 클릭할 수 있는 버튼 UI이라면 다른 태그를 사용하고 클릭 이벤트를 추가하는 것보다
<button>
태그를 사용하는 것이 명확합니다. 네이티브 HTML의 기본 동작만으로 접근성을 더 개선하기 어려울 때에만 WAI-ARIA 속성을 추가로 활용합니다.승객 감소/추가 버튼에 의미 있는 레이블을 추가하여, 스크린 리더 사용자도 각 버튼의 기능을 명확히 이해할 수 있도록 레이블을 설정하세요
키워드
aria-label
수정해보기
button
에aria-label
추가수정 전과 후 차이 비교하기
[수정 전]
-
버튼 일 때, “하이픈 버튼”이라고 안내+
버튼일 때, “더하기 부호 버튼”이라고 안내[수정 후]
-
버튼 일 때, “성인 1명 감소 버튼”이라고 안내+
버튼 일 때, “성인 1명 추가 버튼”이라고 안내💡 스크린 리더를 사용하는 사람은 어떤 버튼인지 정확하게 이해할 수 있다.
Step 4: 변경 사항에 대한 실시간 알림 추가하기
시각 사용자는 버튼을 클릭했을 때 변경된 승객 수를 자연스럽게 눈으로 같이 ‘볼’ 수 있습니다. 스크린 리더 사용자도 버튼을 클릭할 때 승객 수 변경 사항을 모바일 낭독기를 통해 실시간으로 '들을' 수 있게 해주세요.
키워드
aria-live
속성assertive
해당 지역의 업데이트가 가장 높은 우선순위를 가지며 사용자에게 즉시 제공되어야 함을 나타냅니다.
off
(기본)사용자가 현재 해당 지역에 집중하고 있지 않으면 해당 지역의 업데이트가 사용자에게 표시 되지 않음 을 나타냅니다.
polite
현재 문장을 말하는 것이 끝날 때나 사용자가 입력을 멈출 때 등 다음 적절한 기회에 해당 지역의 업데이트를 표시해야 함을 나타냅니다.*
aria-live="assertive"
사용자의 즉각적인 주의가 절대적으로 필요한 시간에 민감한/중요한 알림에만 사용해야 합니다. 일반적으로, 단언적 라이브 영역을 변경하면 화면 판독기가 현재 하는 모든 공지가 중단됩니다. 따라서 매우 성가시고 방해가 될 수 있으므로 아껴서 사용해야 합니다.항공권 예매 승객 수 증가/감소 버튼을 누르면 즉시 숫자가 바뀌어야 한다. 하지만, 사용자가 입력을 다 끝낸 것을 확인한 뒤에 하는 것이 더 좋다고 생각이 든다. 왜냐하면 목소리가 나오기 전에 버튼을 잘못 누르면 어떤 버튼이 눌렸는지도 모르게 voiceover에서 하는 말을 멈추고 숫자를 말하게 되기 때문이다. 따라서
polite
로 적용한다.하지만, 이상하게 polite 속성과 assertive 속성이 동일하게 동작한다. 버튼을 눌렀다는 것을 인지하게 하고 싶은데, 말을 끊고 변경된 숫자에 대해 안내한다. 이유는 아직 찾지 못했다.
Step 5: 최소/최대 값 도달 시 상태 메시지 알림 추가하기
최소/최대 값에 대한 알림도 추가해보겠습니다. 시각 사용자에게는 보이지 않지만, 스크린 리더에서만 필요한 메시지가 있다면 별도로 처리해줄 수 있습니다. 시각적 표현과 접근성을 모두 고려하여, 최소/최대 값 도달 시 시각 사용자와 스크린 리더 사용자 모두에게 적절한 상태 메시지를 전달할 수 있는 방법을 고민해보세요.
키워드
.visually-hidden
클래스role
속성FECONF2021에서 발표 시, Case 6: 소리 없는 토스트 섹션을 발표할 때, 어떤 방법으로 스크린리더 사용자에게 토스트를 안내할 수 있을 지 소개합니다. 사용자에게 안내하는 메시지를 전달하는데 사용하는
role='alert'
를 사용합니다.링크해당 요소는 시각 사용자에게는 보이지 않는 상태에서 스크린 리더 사용자에게도 메시지를 안내할 수 있어야합니다. 이 때 시각 사용자에게는 메시지가 보이지 않게 하면서 스크린 리더에 요소를 노출하기 위해서는 visually-hidden(sr-only) css를 적용합니다. 일반적으로 사용하는
visally-hidden
은 아래와 같이 구현합니다. 이렇게 구현하게 되면 스크린 리더에는 노출되면서 시각 사용자에게는 노출되지 않도록 구현할 수 있습니다.