ARIA 접근성 가이드

속성 · 이름·설명 · 전역

aria-labelledby

페이지에 있는 다른 요소의 텍스트를 ID로 참조해 접근 가능한 이름으로 씁니다.

기초

한눈에 보기

구분
속성 (Property)
분류
이름·설명
값 형식
ID 참조 목록 (공백으로 구분)
기본값
없음
적용 범위
모든 요소 (전역 속성)
HTML 대체
<label for>, <fieldset>+<legend>, <table>+<caption>, <figure>+<figcaption>

설명

aria-labelledby는 하나 이상의 요소 ID를 값으로 받아, 그 요소들의 텍스트를 이어 붙여 현재 요소의 접근 가능한 이름으로 만듭니다. 이름으로 쓸 텍스트가 이미 화면에 보이는 경우에 가장 알맞은 방법입니다. 보이는 텍스트와 들리는 이름이 자동으로 같아지고, 텍스트를 고치면 이름도 함께 바뀝니다.

대화상자(dialog)의 이름을 제목(<h2>)으로 정하거나, tabpanel의 이름을 해당 tab으로, region·listbox·radiogroup처럼 HTML <label>을 쓸 수 없는 사용자 정의 위젯의 이름을 정할 때 씁니다. 공백으로 구분해 여러 ID를 넣으면 나열한 순서대로 이어 붙습니다. 예를 들어 “삭제” 버튼에 aria-labelledby="btn-self row-title"를 주면 “삭제 2024년 결산 보고서”처럼 어떤 항목을 지우는지 알려 줄 수 있습니다. 자기 자신의 ID도 넣을 수 있습니다.

이름 계산에서 가장 우선순위가 높아 aria-label, <label>, 콘텐츠를 모두 덮어씁니다. 참조된 요소가 hidden이나 display: none으로 숨겨져 있어도 텍스트는 이름에 쓰입니다. 그래서 화면에 보이지 않는 이름 텍스트를 따로 둘 수도 있지만, 보이는 텍스트를 참조하는 것이 원래 목적에 맞습니다. 참조는 한 단계만 따라갑니다. 참조된 요소에 다시 aria-labelledby가 있어도 그것은 따라가지 않습니다.

주의할 점은 ID가 정확히 존재해야 한다는 것입니다. 오타가 있거나 참조 대상이 아직 DOM에 없으면 이름이 비어 버리며, 화면에서는 아무 차이가 없어 발견하기 어렵습니다. 컴포넌트를 반복 렌더링할 때 ID가 중복되면 엉뚱한 텍스트가 이름이 됩니다. aria-label과 마찬가지로 generic 등 이름이 금지된 역할에는 쓰지 않습니다.

테스트할 때는 값에 들어 있는 모든 ID가 페이지에 하나씩만 존재하는지, 개발자 도구 접근성 패널의 Name이 의도한 순서의 텍스트로 계산되는지 확인합니다. 자동 검사 도구(axe 등)는 존재하지 않는 ID 참조를 오류로 보고합니다.

값

값
값의미
ID 참조 목록이름으로 쓸 텍스트를 가진 요소의 ID입니다. 여러 개면 공백으로 구분하고, 나열한 순서대로 이어 붙습니다.

사용 예

대화상자 이름을 제목으로

권장HTML
<div role="dialog" aria-modal="true" aria-labelledby="dlg-title">
  <h2 id="dlg-title">배송지 변경</h2>
  …
</div>

여러 텍스트를 조합한 버튼 이름

목록에 같은 “삭제” 버튼이 반복될 때 어느 항목의 버튼인지 이름에 포함합니다.

HTML
<li>
  <span id="file-3">2024년 결산 보고서.pdf</span>
  <button type="button" id="del-3" aria-labelledby="del-3 file-3">삭제</button>
</li>

계산된 이름: “삭제 2024년 결산 보고서.pdf”. 보이는 “삭제”가 이름의 첫 단어라 음성 인식에도 유리합니다.

사용자 정의 라디오 그룹

HTML
<p id="ship-label">배송 방법</p>
<div role="radiogroup" aria-labelledby="ship-label">
  <div role="radio" aria-checked="true" tabindex="0">일반 배송</div>
  <div role="radio" aria-checked="false" tabindex="-1">새벽 배송</div>
</div>

존재하지 않는 ID 참조 (비권장)

비권장HTML
<section role="region" aria-labelledby="sec-titel">
  <h2 id="sec-title">이번 주 일정</h2>
</section>

오타로 참조가 깨지면 이름이 비어 region 랜드마크로 노출되지 않습니다.

직접 해 보기

체크 상자로 aria-labelledby에 넣을 ID를 고르면 영역의 이름이 바뀝니다. 나열 순서대로 이어 붙는 모습을 확인해 보세요.

참조할 요소

이번 주 일정

10월 넷째 주

계산된 이름: 이번 주 일정

화면낭독기에서는

화면낭독기 안내 예시 (표현은 화면낭독기·브라우저·버전에 따라 조금씩 다릅니다)
상황들리는 안내 (예)
aria-labelledby로 제목을 연결한 대화상자가 열림배송지 변경, 대화 상자
aria-labelledby="del-3 file-3" 버튼에 포커스삭제 2024년 결산 보고서.pdf, 버튼
이름이 있는 region 랜드마크로 이동이번 주 일정, 영역 랜드마크

사용 지침

이렇게 쓰세요

  • 이름으로 쓸 텍스트가 화면에 이미 보이면 aria-label 대신 이것을 씁니다.
  • 대화상자·탭 패널·영역 랜드마크의 이름을 제목 요소와 연결합니다.
  • 반복되는 버튼에 항목 이름을 함께 묶어 구체적인 이름을 만듭니다.
  • 참조하는 ID가 페이지에서 유일한지 확인합니다.

이렇게 쓰지 마세요

  • 존재하지 않거나 중복된 ID를 참조하지 않습니다.
  • HTML <label for>로 연결할 수 있는 입력 필드에 굳이 쓰지 않습니다.
  • 이름이 금지된 역할(generic, paragraph 등)에 쓰지 않습니다.
  • 긴 문단 전체를 참조하지 않습니다. 이름은 짧아야 하며, 긴 설명은 aria-describedby로 연결합니다.

사용할 수 있는 역할

전역 속성이므로 모든 역할과 HTML 요소에 쓸 수 있습니다. 특히 다음 역할과 자주 함께 씁니다.

이 속성을 쓰는 패턴

참고 자료