2017-01-30 2 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=? Вам нужно использовать JavaScript для этого (что может быть или не может быть удобным для чтения с экрана)?

+1

Прямо сейчас у вас нет ALT. Но да, вы могли бы использовать JS для изменения alt в зависимости от src – mplungjan

+0

Ваш код, кажется, ничего не делает в моем Chrome OS https://jsfiddle.net/mplungjan/mjejpz9b/ (кроме добавления Hello as alt) – mplungjan

+0

@ mplungjan 'src' должен быть' srcset' в элементе 'source'. – guest271314

ответ

0

Заменитель srcset для src на <source> элемента, использовать onerror событие из <img> элемента и 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 Does 'javascript' at Answer возвращает ожидаемый результат? Примечание. В оригинальном вопросе не упоминается «программа чтения с экрана». – guest271314

1

Возможно, в крупном размере, картина человека, стоящего перед деревом. Но при мобильном размере это всего лишь изображение дерева.

Мне кажется, что такая ситуация возникает только при использовании строго "decorative image".

Если эти изображения stictly декоративные и вы не можете поместить их по определенным причинам в CSS, то альтернативный текст имеет быть пустым.

Если они не являются декоративными изображениями, то самым простым решением является использование двух разных тегов picture, для которых не требуется никакого Javascript.

+0

Позвольте привести еще один пример. Может быть, есть статья о Бараке Обаме. Есть картина его выступления на сцене. На макетах рабочего стола картина стоит у него на сцене. Alt text будет «Барак Обама, говорящий на сцене» или что-то в этом роде. Но на мобильном телефоне, может быть, лучше просто увеличить изображение разговоров в бараке. Вы не можете сказать, что он на сцене, так как он увеличен. Каждая отдельная картина имеет отношение к контексту, но будет иметь несколько разные описания для тегов alt. –

+1

@JakeWilson Разница в этом примере заключается в том, чтобы дать лучшую визуальную визуализацию страницы, а не добавлять дополнительную информацию к контенту. Это различие чисто декоративно. Текст 'alt' не предназначен для полного описания изображения, но заменяющего текста (https://www.w3.org/TR/html51/semantics-embedded-content.html#general-guidelines). То естьЕсли изображение не видно, какая информация отсутствует для вас, чтобы понять содержание? – Adam

Смежные вопросы