웹 접근성이란 장애인, 고령자 등이 웹 사이트에서 제공하는 정보에 비장애인과 동등하게 접근하고 이해할 수 있도록 보장하는 것입니다.
이를 향상시키기 위해서 시멘틱한 코드를 작성할 필요가 있는데, 단순히 alt를 적고 aria 태그를 이용하고 시멘틱 태그를 사용한다고 해서 과연 적절하게 작성했는지에 대해서는 확신할 수 없습니다.
따라서 저는 NVDA의 Screen Reader를 통해서 시각 장애인이 실제 내 사이트에 접근했을 때 어떻게 읽을지에 대해서 확인해 보았습니다.
사이트는 간단하게 학원 주소 이미지, 학원 이름, 오시는 길, 연락처등이 있는 페이지입니다.
(상호가 일점육수학과학전문학원이라서 검색에 불편함을 겪는 학부모님들을 위한 사이트)
사이트 기능이 단순한 만큼 Screen Reader로 읽었을 때 큰 문제가 없을거라 생각했는데, 2가지 불편함을 확인하여 이를 개선하였습니다.
#1. --> 으로 인한 불편함
오시는 길 옆에 화살표는 마우스를 호버했을 때 버튼이라는 시각적 효과를 주기 위해서 삽입하였습니다.
하지만 이를 스크린리더가 읽게 되면
오시는 길 언더바 언더바 그레이터댄 이라고 읽습니다
따라서 불필요한 내용에 대해서 Screen Reader가 읽지 않도록 설정할 필요성이 있습니다.
이때 사용하는 것이 aria-hidden 속성입니다.
<span
className="inline-block transition-transform group-hover:translate-x-1 motion-reduce:transform-none"
aria-hidden="true"
>
이후 위의 연락처 -> 052-261- 5515를 Screen Reader에 읽게 하면
연락처 052 언더바 261 언더바 5515 버튼 이라고 읽게 됩니다.
(Children Presentational이라고 자식요소를 한꺼번에 읽은 후 자신의 역할을 설명하는 요소들이 있습니다.
이때 버튼도 해당 요소중 하나라서 위와 같이 읽습니다.)
#2. 연락처 버튼을 클릭시 번호가 클립보드에 저장되는 이를 시각장애자 입장에서 알기 힘들다
function CardClipWrapper({ text, children }: CardClip) {
const copylink = () => {
navigator.clipboard.writeText(text);
alert(text + '가 클립보드에 복사되었습니다');
};
return (
<button
onClick={copylink}
className="flex flex-col items-start lg:text-left group rounded-lg border h-full px-5 py-4 transition-color border-gray-300 hover:bg-gray-100 hover:dark:border-neutral-700 hover:dark:bg-neutral-800/30 w-full max-w-96"
>
<span className="sr-only">클릭시 번호가 클립보드에 저장됩니다</span>
{children}
</button>
);
}
이를 위해 sr-only class를 활용하여 스크린 리더만 읽는 text를 추가하였습니다.
참고문헌
추가적인 학습을 하고 싶다면 FE 컴프 영상을 참고하거나,
https://www.youtube.com/watch?v=tKj3xsXy9KM
http://www.websoul.co.kr/accessibility/WA_guide22.asp
웹 접근성 지침 2.2 | Web Soul Lab
웹 접근성 지침 2.2 한국형 웹 콘텐츠 접근성 지침 2.2은 4가지 원칙과 각 원칙을 준수하기 위한 14개 지침 및 해당 지침의 준수여부를 확인하기 위해 33개의 검사항목으로 구성되어 있습니다. ※ 20
www.websoul.co.kr
에서 내용을 확인해도 좋다고 생각합니다.
'프론트엔드 > 최적화' 카테고리의 다른 글
Next.js SEO 최적화 및 검색엔진에 노출시키기 (2) | 2024.05.03 |
---|---|
react-lazy-load-image-component 을 활용해서 캐러셀 이미지 로드 최적화 (1) | 2024.01.13 |
react-helmet-async 활용하여 동적으로 메타데이터 처리하기( SEO최적화) (1) | 2024.01.13 |
React lazy,와 Suspense를 활용하여 Code Splitting 하기 (0) | 2024.01.12 |
Skeleton UI 로 Layout Shift 관리하기 (0) | 2023.12.25 |