Чтение дочернего элемента, когда родитель сфокусирован - доступность

Я использую группу mat-tab-group из https://material.angular.io/components/tabs/overview.(used комплексный подход к меткам с ng-template)

Вкладка содержит имя вкладки и кнопку закрытия вкладки.

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

Как это сделать?

Код:

<mat-tab-group dynamicHeight [(selectedIndex)]="activeTabIndex" (selectedTabChange)="changetab($event)">
<mat-tab *ngFor="let tab of Tabs; let i = index" [label]="tab.name" [attr.sortColumn]="tab.sortBy" [attr.sortOrder]="tab.sortOrder"
  [attr.viewId]="tab.id" [attr.viewObjectID]="tab.viewObjectId" attr.aria-label="{{tab.name}}">
    <ng-template mat-tab-label>
        <div class="tab-container">
            <div class="somestyle">
                <span class="tab-name" [matTooltip]="tab.name">{{tab.name}}</span>
            </div>
            <button mat-icon-button tabindex="0" id="{{tab.id}}" class="close-btn" (keyup)="closeTab($event,view)" (click)="closeTab($event,view)" attr.aria-label="{{closetab}}">
                <mat-icon class="material-icons">cancel</mat-icon>
            </button>
        </div>
    </ng-template>
</mat-tab>

The output of this : I am using "jaws" for screen reading tool. When we focus on tab, it reads tab name and close button label ( attr.aria-label="{{tab.name}}" and attr.aria-label="{{closetab}}").




Ответы (2)


Вам вообще нужно использовать aria-label?

В документе «Практика WAI-ARIA» это указано в верхней части «Читать Раздел "Я прежде всего":

Нет ARIA лучше, чем Bad ARIA

Примеры mat-tab-group просто используют текстовый узел внутри вкладки (который представляет собой кнопку с role="tab") для доступного имени. Этого должно быть достаточно. Если возможно, пусть визуальная метка будет доступным именем.

Единственная причина, по которой вы должны использовать aria-label на кнопке, заключается в том, что доступное имя должно отличаться от метки кнопки. например в случаях, когда в качестве визуальной метки используется только значок или глиф Unicode вместо читаемого человеком текста.

Во всех остальных случаях просто поместите доступное имя в текстовый узел внутри кнопки. (Вы, конечно, можете обернуть его в span или другие встроенные элементы - как это делает пример mat-tab-group, если вам нужен более изысканный стиль).

Это верно и для других элементов управления GUI, хотя механизм визуальных меток различается для разных типов элементов. (например, элементу <input> требуется соответствующий <label>, который одновременно виден и понятен программам чтения с экрана благодаря атрибуту for.)

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

Кроме того, если я не ошибаюсь, вы добавляете «тело» вкладки (включая закрывающий прямоугольник) к самой фокусируемой вкладке. Это неправильная структура. Опять же, пусть пример mat-tab-group будет вашим проводником.

person brennanyoung    schedule 26.09.2019

У вас должна быть возможность перезаписать прочитанное при фокусировке всей вкладки, если вы добавите aria-label="Your preferred text here" к элементу вкладки.

person Tobias Christian Jensen    schedule 19.07.2019
comment
Да, я пробовал, но все равно он читает aria-label кнопки закрытия. Думаю, вы еще не видели элемент mat-tab, я его уже использую. - person Shashank G; 19.07.2019
comment
Тестировал на VoiceOver. Какую программу чтения с экрана вы используете? Можете ли вы опубликовать здесь, что именно он выводит / читает? - person Tobias Christian Jensen; 19.07.2019
comment
Я использую челюсти для чтения с экрана. Когда мы фокусируемся на вкладке, она читает имя вкладки и метку кнопки закрытия (attr.aria-label = {{tab.name}} и attr.aria-label = {{closetab}}). - person Shashank G; 22.07.2019