Tabindex на элементы, которые являются интерактивными только при определенных условиях - PullRequest
0 голосов
/ 03 декабря 2018

В нашем веб-приложении мы используем несколько «отзывчивых» HTML-таблиц - их можно прокручивать по горизонтали, если их содержимое становится слишком широким (правила CSS: width:100%; overflow-x: auto;).Это позволяет отображать всю необходимую информацию в таблице, не нарушая макет и не прокручивая всю страницу по горизонтали.

В нашем случае это актуально только для небольших экранов (в окнах браузера с измененным размером или при увеличении размера пользователя).размер шрифта более чем на 200%), поскольку наши таблицы не такие большие (обратите внимание, что приложение является внутренним и будет использоваться только на экранах ноутбуков / настольных компьютеров).

К сожалению, возможность горизонтальной прокрутки содержимого с помощью overflow-x недоступен для пользователей клавиатуры - единственный способ прокручивать контент - с помощью мыши;использование клавиш со стрелками работает, только если вся страница прокручиваема или если элемент имеет фокус.

Итак, чтобы сделать наши таблицы управляемыми с клавиатуры, я подумывал добавить к ним tabindex="0" и, таким образом,позволяя использовать клавиши со стрелками.Кажется, это работает нормально, если таблица прокручиваема, но также означает, что неинтерактивный элемент (таблица на большом экране) может получить фокус, что может привести к путанице у пользователей клавиатуры.

Вотмаленький пример (сделан с Bootstrap, чтобы сэкономить на написании CSS).Измените размер окна браузера, чтобы проверить его:

<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet"/>
<h1>Some heading</h1>
<a href="#">First link (for tabbing purposes)</a>

<table class="table table-responsive" tabindex="0">
    <thead>
        <tr>
           <th scole="col">Column 1</th>
           <th scole="col">Column 2</th>
           <th scole="col">Column 3</th>
           <th scole="col">Column 4</th>
           <th scole="col">Column 5</th>
           <th scole="col">Column 6</th>
           <th scole="col">Column 7</th>
        </tr>
    </thead>

    <tbody>
        <tr>
           <td>Lorem ipsum</td>
           <td>Lorem ipsum</td>
           <td>Lorem ipsum</td>
           <td>Lorem ipsum</td>
           <td>Lorem ipsum</td>
           <td>Lorem ipsum</td>
           <td>Lorem ipsum</td>
        </tr>
    </tbody>
</table>

<a href="#">Second link (for tabbing purposes)</a>

Считаете ли вы, что это решение может быть проблемой для доступности, и у кого-нибудь есть идея, как я могу ее решить?Спасибо

Ответы [ 3 ]

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

В целом, я бы согласился с @quentinc, что акцент на неинтерактивном элементе не идеален (я бы даже не сказал, что это «плохая идея»), но он дает клавиатуруПользователь способ прокрутки.Я использую клавиатуру для большинства моих взаимодействий, и у меня нет другого способа прокрутки.Я не знаю, что такое рулетка, и, насколько мне известно, в браузере нет выделенных клавиш для горизонтальной прокрутки, кроме стрелок влево / вправо, которые, как вы уже упоминали, прокручивают страницу, а не таблицу, кроме таблицы.может получить фокус, таким образом, причина этого вопроса.

В Firefox таблица уже получит фокус, потому что всякий раз, когда контейнер имеет полосу прокрутки, firefox позволяет фокусу перемещаться к этому объекту, в частности, для прокрутки.Таким образом, вы уже получаете поведение, которое вы хотите в Firefox.Вы просто пытаетесь включить такое же поведение для Chrome, Safari и Internet Explorer.

Если вы положите tabindex="0" на стол, вы также можете добавить визуально скрытый <caption> к таблице, чтобы сказатьсредство чтения с экрана, фокус которого был перемещен к столу, чтобы позволить пользователям клавиатуры осуществлять горизонтальную прокрутку.Примерно так:

<table class="table table-responsive" tabindex="0">
  <caption class="sr-only">table receives focus so keyboard users can scroll it</caption>

(Класс "sr-only" тоже из начальной загрузки. См. Что такое sr-only в Bootstrap 3? . Вам не нужно использовать начальной загрузки, номожет создать свой собственный класс, который похож.)

Однако, один недостаток, позволяющий таблице получать фокус, заключается в том, что NVDA будет объявлять все содержимое таблицы, когда она получает фокус.Это немного раздражает.Вот что говорит NVDA:

table  with 2 rows and 7 columns 
table receives focus so keyboard users can scroll it
Column 1
Column 2
Column 3
Column 4
Column 5
Column 6
Column 7
Lorem ipsum
Lorem ipsum
Lorem ipsum
Lorem ipsum
Lorem ipsum
Lorem ipsum
Lorem ipsum

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

Я попытался обойти этопомещая на стол title, aria-label и aria-labelledby (не все одновременно), но всегда читалась вся таблица (в дополнение к заголовку или метке).

НоЯ также снова согласен с @quentinc, что горизонтальной прокрутки следует избегать, если это возможно.В Internet Explorer вы даже не видите горизонтальную полосу прокрутки, пока не начнете прокручивать (с помощью клавиатуры), поэтому вы можете не знать, что справа есть дополнительная информация, если вы не видите часть текста, обрезанного по краю таблицы.(Обратите внимание, полоса прокрутки появляется, если вы наводите курсор мыши над столом, но мы говорим о пользователях клавиатуры.)

Сложная ситуация.Без фокуса пользователь клавиатуры не может прокручивать таблицу.С акцентом читатель экрана может услышать все виды дополнительных вещей.В первом случае нет никакого обходного пути.В последнем, хотя слышно все, что читает, пользователь программы чтения с экрана может нажать ctrl , чтобы немедленно заставить программу чтения с экрана замолчать (и, надеюсь, они отключат ее после прослушивания чтения <caption>).

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

Вместо атрибута tabindex в таблице вы можете предоставить две кнопки для прокрутки вверх и прокрутки вниз в конце таблицы или в другом месте, где пользователь может легко получить к нему доступ.Я думаю, что было бы лучше для всех пользователей, включая пользователей с указательным устройством и т. Д.

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

Давать фокус элементам только для того, чтобы их можно было прокручивать с помощью клавиатуры, - плохая идея.

  • Пользователи программ чтения с экрана вообще не заботятся о прокрутке, потому что они ее не видят;поэтому они приземляются на фокусируемом элементе, который, очевидно, ничего не делает.Это расстраивает.
  • У зрячих, которые обычно не могут пользоваться мышью, есть другие способы прокрутки: рулетка, специальные клавиши или жесты, специальные движения глаз и т. Д.

ЛучшийРешение, безусловно, было бы полностью избавиться от горизонтальной прокрутки.Это простота использования даже для обычных пользователей.Перестройте макет по своему желанию, но избегайте его любой ценой.

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

...