접근성 : SVG 및 MathML에 권장되는 대체 텍스트 규칙?


79

개요

HTML5는 이제 외부 네임 스페이스에 의존하지 않고 HTML 문서를 허용<svg> 하고 <math>마크 업합니다 ( 여기에서 괜찮은 개요 ). 둘 다 alt오늘날의 화면 판독기 소프트웨어에서 효과적으로 무시되는 고유 속성 아날로그 (아래 참조)를 가지고 있습니다. 따라서 시각 장애인은 이러한 요소에 액세스 할 수 없습니다.

이러한 새 요소에 대한 표준 대체 텍스트 규칙을 구현할 계획이 있습니까? 나는 문서를 샅샅이 뒤져서 말랐습니다!

추가 세부 정보

SVG와 관련 하여 SVG의 대체 텍스트는 루트 title또는 desc태그 의 내용으로 간주 될 수 있습니다 .

<svg>
  <title>An image title</title>
  <desc>This is the longer image description</desc>
  ...
</svg>

나는 그것을 읽는 스크린 리더를 하나 찾았 지만 이것이 표준입니까? SVG를 삽입하는 이전 방법<object>태그가 화면 판독기에 의해 일관성없이 취급 되기 때문에 접근성 문제 가있었습니다.

MathML 관련 : MathML의 대체 텍스트는 alttext속성에 저장되어야 합니다 .

<math alttext="A squared plus B squared equals C squared">
  ...
</math>

스크린 리더가이를 인식하지 못하는 것 같기 때문에 수학 렌더링 라이브러리 인 MathJaxaria-label 는 런타임에 텍스트를 속성에 삽입합니다 .

<span aria-label="[alttext contents]">...</span>

안타깝게도 NVDA, JAWS 등은 아직 이러한 레이블을 안정적으로 읽지 못합니다. ( WAI-ARIA 에 대한 추가 정보 )

두 가지 모두 지원되지 않는 ARIA 속성으로 성공하지 못한 경우 속성을 사용해 보았습니다 title. 이러한 "외부"HTML 요소에서도 무시되는 것 같습니다.

요약

빠른 해킹 이상 으로 이러한 새로운 HTML 요소에 대체 텍스트를 배치 하는 권장 방법 을 찾고 있습니다. 내가 간과하고있는 W3C 사양이 있습니까? 아니면 아직 게임 초반인가요?

답변:


87

파헤친 후, 공식적인 권장 사항을 찾았습니다. 안타깝게도 현재 대부분은 작동하지 않습니다. 브라우저와 화면 판독기는 Math 및 SVG가 액세스 가능한 것으로 간주되기 전에 구현해야 할 많은 사항 있지만 상황 조회되기 시작했습니다.

면책 조항 : 아래 권장 사항은 지난 몇 달 동안 코딩하면서 얻은 것입니다. 뭔가 잘못 되었다면 알려주세요. 나는 브라우저와 AT 소프트웨어가 진행됨에 따라 이것을 최신 상태로 유지하려고 노력할 것입니다.

MathML

추천

주변 태그 에 role="math"와 함께 사용합니다 ( docs 참조 ). 를 추가 하면 화면 판독기가이 요소에 특별히 집중할 수 있습니다. 이 요소 는 특수 키 단축키 (예 :)를 사용하여 말할 수 있습니다 .aria-labeldivtabindex="0"aria-labelNVDA+Tab

<div role="math" tabindex="0" aria-label="[spoken equivalent]">
  <math xmlns="http://www.w3.org/1998/Math/MathML">
    ...
  </math>
</div>

제한 / 고려 사항

  • 에 대한 스케치 스크린 리더 지원 aria-label(그리고 덜 중요 함 role="math").
    업데이트 : aria-label 여기여기 에 관한 관련 NVDA 티켓 .
  • 에 포장 div또는 span이후 태그는 불필요한 것 같습니다 mathA는 일류 요소 HTML5있다.
  • MathML alttext태그를 거의 참조하지 않았습니다 .
    업데이트 : 이것은 여기 에 설명 된 DAISY 특정 추가로 보입니다 .

참고 문헌

SVG

추천

최상위 <title><desc>태그를 루트 SVG 태그 role="img"와 함께 사용 aria-label합니다.

<svg role="img" aria-label="[title + description]">
  <title>[title]</title>
  <desc>[long description]</desc>
  ...
</svg>

제한 / 고려 사항

  • 2011 년 2 월 현재 IE 9 베타는 모든 <title><desc>태그를 읽으 므로 바람직하지 않을 수 있습니다. 그러나 NVDA, JAWS 및 WindowEyes는 aria-label요소에 role="img".
  • (하지 인라인 HTML에서, 그) SVG 파일을로드 할 경우, 루트 수준 <title>태그는 브라우저 페이지의 제목이 될 것이다 스크린 리더로 읽을 수.

참고 문헌


3
인라인 SVG는 어떻습니까?
Michał

흥미롭게도 Chrome (v69, Firefox는 테스트되지 않음) <svg>은 디스플레이 이미지가 꺼져있을 때 그대로 인라인 s를 표시합니다. 그것은 저에게는 엣지 케이스처럼 보였지만 이제 대답은 사용하기에 충분합니다.
Volker E.

3

일반적으로 HTML5는 (a) 시력이있는 사용자에게 유용 할 새로운 정보를 포함하는 경우가 많고, (b) (일반적으로) 사용자에 대한 피드백이 거의 없기 때문에 잘못 작성되는 경우가 많기 때문에 작성자가 시력이있는 사용자에게 숨겨진 콘텐츠를 제공하지 못하도록합니다. ) 눈에 보이는 저자, (c) 조심스럽게 관리되지 않아서 빨리 부실 할 수 있습니다.

따라서 속성에서 정보를 숨기는 대신 일반적으로 페이지 <p>에서 svg 또는 수학 섹션에 인접한 태그 의 캡션으로 배치 하거나 텍스트를 <figcaption>태그에 넣고 해당 정보와 svg / math 섹션을 <figure>요소.

눈에 보이는 사용자가 정보를 보지 못하도록하려면 최소한 화면 판독기가 HTML5를 따라 잡을 때까지 큰 음의 "왼쪽"값으로 캡션을 절대적으로 배치하는 것이 표준 기술이라고 생각합니다.


상기시켜 주셔서 감사합니다 <figcaption>. 이것은 아마도 SVG 이미지를위한 최상의 "당분간"솔루션 일 것입니다. 나는 여전히 최상위 <desc>태그를 말하는 스크린 리더 가 표준 인지 아닌지에 대한 언급을 찾지 못했습니다. 아마도 나는 NVDA 목록을 만들 것입니다. 나는 이것이 가장 완벽하기 때문에 받아 들여진 대답으로 표시 할 것입니다 (누구나 지적 할 수있는 명확한 표준이 없다고 생각했습니다).
Courtney Christensen

Alt 속성은 HTML 자체만큼 오래된 표준입니다. 그것들은 해킹도 아니고 "숨겨진 콘텐츠"도 아니며, 확실히 사용을 권장하지 않습니다. 그 외에도 아이콘과 같이 이미지와 텍스트를 모두 사용하는 것이 합리적이지 않은 경우가 많이 있습니다 (아이콘의 전체 포인트는 종종 텍스트를 완전히 대체하는 것입니다.)
Stephen R

@StephenR-내 대답의 목적은 당시 HTML5 디자인 메일 링리스트에 표현 된 생각을 설명하는 것이 었습니다. alt 속성은 실제로 약간의 압력을 받았으며 고맙게도 컷에서 살아남 았지만 예를 들어 테이블의 요약 속성은 내 대답에 설명 된 것과 같은 이유로 HTML5에서 제거되지 않았습니다.
Alohci

예를 들어 동영상의 포스터 이미지에 alt 속성이없는 이유도 설명합니다.
Alohci

일이 어떻게 발전했는지 흥미 롭습니다. 그들이 그것을 지키게되어 기쁘다 – Alt
Stephen R을

3

SVG와 관련하여 위의 제안과 유사하지만 동일하지는 않지만 현재 가장 좋은 방법은 '대체 텍스트'(대체 텍스트 자체가 아님)를 포함하는 요소의 ID를 참조하여 aria-labelled를 사용하는 것 같습니다.

<svg aria-labelledby="svg1title">
<title id="svg1title">A wide rectangle</title>
<rect width="70" height="10" fill="black" />
</svg>

aria-labelledby = "svg1title svg1desc"를 설정하여 title 및 desc 요소를 모두 사용할 수도 있습니다.

출처 : http://www.sitepoint.com/tips-accessible-svg/

귀찮게도 이렇게하면 ID가 전체 페이지 내에서 고유한지 확인해야합니다 (즉, SVG를 많이 사용하는 경우 모두 제목에 대해 다른 ID를 가져야 함). 이것은 SVG 내의 다른 ID에도 적용되며 인라인 SVG에서 일반적으로 심각한 성가심입니다.

(심각하게 문제가있는 경우 img 태그를 사용하여 SVG를 포함하는 방법을 살펴볼 수 있습니다. 데이터 URL을 사용하고 SVG를 base64로 인코딩하는 경우 외부 파일 없이도이 '인라인'을 수행 할 수 있습니다.)


2

이론적으로 svg 이미지는 alt 태그가있는 래스터 이미지보다 더 쉽게 액세스 할 수 있어야합니다. 한 가지 예를 들어 텍스트는 짧은 문장이 아닌 전체 텍스트 조각 인 svg의 텍스트로 유지 될 수 있습니다. 스크린 리더가 추가 정보를 무시하면 안타깝습니다. 그러나 html과 마찬가지로 모든 텍스트 콘텐츠가 항상 표시되는 것은 아닙니다. 많은 svg 이미지는 정적 인 이미지이지만 (개방형 웹에서 실제 사용을 기반으로) 점점 더 동적 인 SVG를 사용하는 경향이 있습니다 (예 : 편집 또는 접을 수있는 그래프 또는 다이어그램 표시).

주의해야 할 또 다른 사항은 <title>요소가 모든 svg 지원 브라우저 AFAIK (최소한 최신 세대)에서 도구 설명으로 표시되며 다른 svg 요소에도 넣을 수 있다는 것입니다 (제목은 직계 하위 요소).


0

이것을 테스트하지는 않았지만 컨테이너 DIV에 alt = "whatever"를 추가 할 수 있습니다. 예, DIV의 유효한 속성은 아니지만 이전 스크린 리더는 alt가 표시되는 위치를 신경 쓰지 않는 것을 볼 수 있습니다.

예를 들면 :

<div aria-label="Whatever" alt="Whatever" role="math">
    <math>...</math>
</div>

분명히 이것은 스크린 리더가 IMG 이외의 요소에서 alt 속성을 (잘못) 읽을 것이라는 가정하에 있습니다. 테스트하지 않았지만 화면 판독기가 작동하는지 기다리는 것보다 낫습니다.


주사위 없음 :-( 나는 그것을 시도했지만 작동하지 않습니다 (어쨌든 현대 스크린 리더에서는 작동하지 않습니다). aria-label그리고 aria-labelledby적절한 방법으로 보였습니다. 그래도 지원은 아직 스케치입니다.
Courtney Christensen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.