Visually Hidden
화면에는 보이지 않지만 스크린리더가 읽을 수 있는 접근성 유틸리티 컴포넌트입니다.
개요
Visually Hidden 컴포넌트는 시각적으로는 숨겨지지만 스크린리더 사용자에게는 읽히는 콘텐츠를 제공합니다. 이를 통해 시각적 인터페이스를 깔끔하게 유지하면서도 보조 기술 사용자에게 필요한 정보를 전달할 수 있습니다.
설치
Import
기본 사용법
스크린리더에만 전달해야 하는 추가 설명이나 맥락 정보를 제공할 때 사용합니다.
아이콘 버튼에 적용
아이콘만 있는 버튼에 접근성 레이블을 제공합니다. aria-label을 사용하는 것도 좋은 대안입니다.
sr-only 클래스 사용
Tailwind CSS의 sr-only 클래스를 사용할 수도 있습니다. VisuallyHidden 컴포넌트와 동일한 효과를 냅니다.
피해야 할 패턴
다음 CSS 속성들은 스크린리더가 콘텐츠를 읽지 못하게 하므로 사용하면 안 됩니다:
display: none- 완전히 숨김visibility: hidden- 완전히 숨김width: 0; height: 0- 크기 0font-size: 0- 폰트 크기 0
사용 사례
Visually Hidden이 적절한 경우:
- 아이콘 버튼에 레이블 제공
- 복잡한 비텍스트 콘텐츠에 추가 설명 제공
- 상태 변화 정보 전달 (예: "3개 항목 선택됨")
- 조작 방법 안내 (예: "Enter 키를 눌러 제출")
Visually Hidden을 사용하지 않아야 하는 경우:
- 간단한 이미지 설명 →
alt속성 사용 - 요소의 접근성 이름 →
aria-label사용 - 연결된 레이블 →
aria-labelledby사용
접근성
KRDS 접근성 가이드라인:
- 시맨틱 HTML을 우선 사용하고, 숨긴 텍스트는 보조 수단으로 활용
- 다양한 스크린리더(센스리더, VoiceOver, TalkBack)로 테스트
- 다국어 서비스의 경우 숨긴 텍스트도 번역 제공
- CMS에서 숨긴 텍스트 작성 기능 지원 권장
API Reference
| 속성 | 타입 | 기본값 | 설명 |
|---|---|---|---|
children | React.ReactNode | 필수 | 스크린리더에 전달할 콘텐츠 |
as | "span" | "div" | "span" | 렌더링할 HTML 요소 |
focusable | boolean | false | 포커스 시 표시할지 여부 (인터랙티브 요소용) |