2017-01-30 8 views
-1

의 당신이 유사한 사진 요소가 있다고 가정 해 봅시다 :각 중단 점에 대해 그림 요소에 액세스 할 수있게 만드는 방법은 무엇입니까?

<picture class='my-image'> 
    <source media="(min-width: 1024px)" srcset="large.jpg"> 
    <source media="(min-width: 768px)" srcset="med.jpg"> 
    <source srcset="small.jpg"> 
    <img src="small.jpg" alt=""> 
    <p>Accessible text</p> 
</picture> 

를하지만의 이미지의 컨텍스트는 각 중단 점에 대해 서로 다른 것을 가정 해 봅시다. 아마도 큰 사이즈 일 때, 그 그림은 나무 앞에 서있는 남자의 모습 일 것입니다. 그러나 모바일 크기에서, 그것은 단지 나무의 그림입니다.

때때로 특정 사진 만 전체를위한 하나의 장소에 alt= 속성을 지정할 수 있습니다 그림 요소와, 어쨌든 등, 페이지 레이아웃에

을 따라하지 않는 모바일 크기와 다른 사진에서 잘 작동 그림 요소. 그러나 각 중단 점 사이에서 이미지 컨텍스트가 변경되면 어떻게 든 다른 alt= 특성을 지정할 수 있습니까? 이를 위해 자바 스크립트를 사용해야합니까 (화면 판독기와 다를 수 있음)? <source> 요소에 대한 src

+1

지금은 ALT가 없습니다. 하지만 예, JS를 사용하여 src에 따라 alt를 변경할 수 있습니다 – mplungjan

+0

코드가 내 OSX Chrome https://jsfiddle.net/mplungjan/mjejpz9b/에서 아무것도 수행하지 않는 것 같습니다 (Hello를 alt로 추가하는 것 외에) – mplungjan

+0

@ mplungjan'src'는'source' 요소에서'srcset'이어야합니다. – guest271314

답변

0

대체 srcset<img> 소자 onerror 이벤트를 사용 window.matchMedia() 설정하는 alt 속성.

<script> 
    function handleError() { 
     var sources = document.querySelectorAll("picture source"); 
     var img = document.querySelector("picture img"); 
     for (var i = 0; i < sources.length; i++) { 
     if (window.matchMedia(sources[i].media).matches) { 
      img.setAttribute("alt", sources[i].dataset.alt); 
      break; 
     } 
     } 
    } 
    </script> 
    <picture class='my-image'> 
    <source media="(min-width: 1024px)" srcset="large.jpg" data-alt="large"> 
    <source media="(min-width: 768px)" srcset="med.jpg" data-alt="small"> 
    <source srcset="small.jpg" data-alt="small"> 
    <img src="small.jpg" alt="" onerror="handleError()"> 
    <p>Accessible text</p> 
    </picture> 

plnkr는 http://plnkr.co/edit/GwwHWujq1Nt8V33zmJLS?p=preview

+0

이 JavaScript는 화면 판독기와 같은 기능을 수행합니까? –

+0

@ JakeWilson "스크린 리더"가 무슨 뜻인지 모르시겠습니까? 시도해 봤어? – guest271314

+0

@ JakeWilson Answer에서'javascript'가 예상 결과를 반환합니까? 참고로, 원래 질문은 "스크린 리더"를 언급하지 않습니다. – guest271314

1

아마도 큰 크기로, 사진은 나무의 앞에 서있는 사람이다. 그러나 모바일 크기에서, 그것은 단지 나무의 그림입니다. 그것은 엄격하게 "decorative image".

를 사용하는 경우 그 이미지가 stictly 장식하고 당신이 CSS에서 특정 이유로 넣어 수없는 경우 이런 종류의 상황에만 나타납니다 나에게 보이는

후 대체 텍스트가 비어있다.

장식용 이미지가 아닌 경우 가장 쉬운 해결책은 자바가 필요없는 두 가지 picture 태그를 사용하는 것입니다.

+0

다른 예를 들어 보겠습니다. 어쩌면 버락 오바마에 관한 기사가있을 것입니다. 무대에서 연설하는 그림이 있습니다. 탁상용 배치에, 그림은 무대에 서있는 그의 그림이다. 대체 텍스트는 "무대에서 이야기하는 버락 오바마"일 것입니다. 하지만 모바일에서는 어쩌면 버락 이야기의 그림을 확대하는 것이 좋습니다. 확대 된 이후로 그는 무대에 있다는 것을 알 수 없습니다. 각기 다른 그림은 컨텍스트와 관련이 있지만 alt 태그에 대해서는 약간 다른 설명을 가지고 있습니다. –

+1

@JakeWilson이 예제의 차이점은 페이지에 더 나은 시각적 렌더링을 제공하고 콘텐츠에 추가 정보를 추가하지 않는 것입니다. 그 차이는 완전히 장식적인 것입니다. 'alt'텍스트는 이미지의 전체 설명이 아니라 대체 텍스트 (https://www.w3.org/TR/html51/semantics-embedded-content.html#general-guidelines)를 제공하기위한 것입니다. 나는.이미지가 보이지 않으면 콘텐츠를 이해하기 위해 누락 된 정보는 무엇입니까? – Adam