Двусторонние метки Aria для нескольких видимых элементов HTML - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть набор элементов, которые могут влиять друг на друга.

<div class="cont">
    <a href="#" id="a">Click Me</a>
    <span>Count - <span class="count" id="a-count-1"></span></span>
    <span>Count - <span class="count" id="a-count-2"></span></span>
    <span>Count - <span class="count" id="a-count-3"></span></span>

</div>
<div class="cont">
    <a href="#" id="b">Click Me</a>
    <span>Count - <span class="count" id="b-count-1"></span></span>
    <span>Count - <span class="count" id="b-count-2"></span></span>
    <span>Count - <span class="count" id="b-count-3"></span></span>
</div>

пример: нажатие на A увеличивает все счетчики B и наоборот.

Мое понимание aria-labelledby * заставляет его работать в одном направлении.Все элементы видны и не скрыты.Я подумал, может быть, можно рассматривать элементы так, как если бы два раздела навигации могли работать, но это не самое правильное решение.

Существует ли текущая спецификация, которая правильно обрабатывает этот вариант использования?

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

aria-controls - это атрибут, который связывает один элемент как «контролирующий» другой элемент.Однако, прежде чем использовать этот атрибут, сначала прочтите блог " Aria-Controls is Poop ".

И, как отметил @kaashan, добавление свойств ARIA влияет только на представление информации на экране.читатель. не добавляет поведения на вашу страницу.

0 голосов
/ 12 декабря 2018

Если я правильно понимаю, то, что вы пытаетесь выяснить, это как сказать программе чтения с экрана, что будет делать нажатие на A / B, и, возможно, последствия нажатия на A / B.

Как@slugolicious указал, что aria-controls вроде бы это делает, но это не очень хорошо поддерживается программами чтения с экрана.Вместо этого вам нужно предоставить программе чтения с экрана достаточно контекста, чтобы понять, на что он будет влиять, а затем объявить об изменениях, вызванных щелчком мыши (в противном случае нажатие на него приведет к тишине, и будет выглядеть так, будто она сломана)..

Например, кнопка A могла бы сказать «Счетчики приращения B».Это будет достаточно контекстной информации для программы чтения с экрана, чтобы понять, что будет делать кнопка.Если по какой-то причине вы не хотите показывать полный текст (таким образом, он будет отображать «нажмите меня» визуально), вы можете скрыть дополнительную информацию только для визуальных пользователей, таким образом читая как «нажмите меня»увеличить счетчики b "только для программ чтения с экрана.

Чтобы объявить об изменениях в контенте, вы можете добавить aria-live="polite" aria-atomic="true" к элементу контейнера счетчиков. aria-live указывает программе чтения с экрана объявлять о любых изменениях содержимого (polite означает следующее для удобства чтения с экрана).Однако по умолчанию он только объявляет об измененной части содержимого (поэтому, если до обновления это было «Счет - 24», а затем после «Счет - 25»), программа чтения с экрана сообщала бы только «5», поскольку это та часть, котораяизменено).Мы можем использовать aria-atomic = "true" , чтобы заставить программу чтения с экрана объявить весь контент, даже если он не изменился.

<div class="cont">
  <a href="#" id="a">Increment B counters</a>
  <div aira-live="polite" aria-atomic="true">
    <span>Count - <span class="count" id="a-count-1"></span></span>
    <span>Count - <span class="count" id="a-count-2"></span></span>
    <span>Count - <span class="count" id="a-count-3"></span></span>
  </div>
</div>

Если вы считаете, что счетчикидлинный список и, таким образом, будет перегружать пользователя программы чтения с экрана слишком большим количеством информации, другой тактикой будет просто объявить об увеличении счетчиков, но не перечислить их текущие значения.

Вместо того, чтобы ставить aria-polite и aria-atomic вокруг счетчиков, вы можете создать визуально скрытый элемент, единственная задача которого - сообщать пользователю что-то.Поскольку div теперь действует как сообщение о состоянии, вы также захотите поместить в него атрибут role="status", чтобы программа для чтения с экрана знала.Затем при нажатии кнопки измените текстовое содержимое элемента статуса, чтобы объявить о действии.

<div role="status" aria-live="polite" aria-atomic="true" id="statusMsg"></div>
<script>
  let statusEl = document.getElementById('statusMsg');
  document.getElementById('a').addEventListener('click', () => {
    statusEl.textContent = 'B counters incremented';
  });
</script>
0 голосов
/ 11 декабря 2018

Во-первых, правильный атрибут wai-aria - это aria-labelledby, а не aria-labelbyby.Я не понимаю, что вы подразумеваете под

, возможно, обработка элементов как двойной навигации может сработать

Пытаетесь ли вы добиться некоторого динамического поведения с помощью этого атрибута?Атрибуты wai-aria введены в действие, чтобы предоставить больше информации об элементе для программ чтения с экрана, когда элемент посещен / сфокусирован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...