아이콘 버튼
아이콘 버튼의 accessible name을 점검하는 실제 순서
텍스트 없는 SVG 아이콘 버튼의 Accessible Name 계산 방식, aria-hidden='true' 및 aria-label 적용 가이드를 다룹니다.
aria-label="동작 설명"처럼 버튼 자체에 접근 가능한 이름을 제공하거나, 화면에는 보이지 않지만 보조기술에 전달되는 동작 설명 텍스트를 배치할 수 있습니다. 장식용 SVG에는 aria-hidden="true"를 지정하는 방법을 검토하세요.실무 검증 기록
마크업 및 접근성 트리 대조
본 기록은 공개 fixture와 재현 조건을 기준으로 정리한 기술 설명입니다. 실제 브라우저·스크린리더 조합의 동작은 별도 수동 검토가 필요합니다.
| 검증 상태 | 공개 fixture 기반 재현 완료 |
|---|---|
| 검증 기준 | 공개 fixture 및 재현 조건 |
| 검증 범위 | SVG 아이콘 단독 버튼의 Accessible Name 계산 검증 및 명시된 입력값에 한정 |
| 수동 확인 | 실제 브라우저·키보드·스크린리더 환경에서 별도 확인 필요 |
| fixture에서 확인한 기대 결과 | [실패 상태] 접근 가능한 이름이 빈 문자열 ➔ [수정 목표] aria-label 또는 sr-only 이름 추가 |
검증에 사용된 실제 픽스처 / 재현 조건
텍스트 없는 button + SVG + aria-hidden- SVG 내부에 <title>과 버튼의 aria-label이 동시 존재할 때의 우선순위 브라우저별 미세 차이
- 다국어 번역 시 sr-only 텍스트 누락 위험
텍스트 없이 SVG 아이콘만 포함된 버튼에서 SVG에 aria-hidden='true'를 지정하고 버튼 자체에 대체 텍스트(aria-label 또는 .sr-only)를 제공하지 않으면 접근 가능한 이름이 빈 문자열(empty string)로 산출됩니다. 텍스트 없는 대화형 요소의 이름 계산 원리와 SVG 숨김·대체 텍스트 부여 방식을 분석합니다.
Accessible Name 산출 알고리즘과 SVG 아이콘의 문제
접근 가능한 이름은 보조기술이 컨트롤을 식별하는 데 사용되는 중요한 정보입니다.
버튼 내부의 <svg> 태그에 <title>이 지정되어 있더라도 브라우저와 스크린리더 조합에 따라 SVG의 이름 전파 동작이 다를 수 있으므로, 버튼 자체에 접근 가능한 이름을 제공하는 구현을 우선 검토하세요. 상위 button 요소에 명시적인 aria-label 또는 sr-only 텍스트를 제공하는 방법을 사용할 수 있으며, 지원 대상 환경에서 별도 확인이 필요합니다.
SVG 태그의 aria-hidden='true' 지정 필요성
<button aria-label='검색'><svg>...</svg></button> 구조를 작성할 때 내부 <svg> 요소에 aria-hidden='true' 속성을 주지 않으면, 일부 보조기술이 SVG 내부 경로(path)나 g 태그를 별도 그래픽 요소로 인지하여 자식 요소를 중복 탐색할 수 있습니다.
따라서 장식용 SVG 아이콘은 aria-hidden='true'로 브라우저 접근성 트리에서 숨기고, 버튼 상위 태그에 aria-label을 부여하는 것은 일반적으로 사용할 수 있는 구현 패턴 중 하나입니다.
아이콘 버튼 접근명 보완 구현 코드 모음
아이콘 버튼의 접근명을 보완하는 HTML/JSX 패턴 예시입니다.
- aria-label 권장 패턴: <button type='button' aria-label='검색'><svg aria-hidden='true'>...</svg></button>
- sr-only 권장 패턴: <button type='button'><svg aria-hidden='true'>...</svg><span class='sr-only'>검색</span></button>
- 주의 패턴: <button type='button'><svg>...</svg></button> (접근명 누락)
흔한 마크업 안티패턴과 올바른 예방책
| 잘못된 마크업 패턴 | 올바른 접근성 구현 |
|---|---|
| <button><svg>...</svg></button> 형태로 작성하고 aria-label 및 내부 대체 텍스트를 완전히 생략하는 것 | button 요소에 aria-label 속성을 추가하거나 내부 .sr-only span 텍스트를 배치합니다. |
| SVG 내부 <title> 태그만 작성하고 <button> 자체에는 아무런 접근성 속성을 주지 않는 것 | SVG title 속성의 스크린리더 호환성 공백을 고려하여 상위 button 요소에 aria-label을 명시합니다. |
보조공학 낭독 및 브라우저 파싱 한계
- 아이콘 버튼의 aria-label에 '검색 버튼'처럼 '버튼' 역할을 중복 기재하면 '검색 버튼, 버튼'으로 중복 낭독됩니다.
- 버튼 내부 SVG에 aria-hidden="true"를 빠뜨리면 일부 보조기술에서 그래픽 요소를 불필요하게 낭독할 수 있습니다.