ARIA (Accessible Rich Internet Applications) — это стандарт, который позволяет улучшить доступность веб-приложений для пользователей с ограниченными возможностями. Vuetify предоставляет встроенную поддержку ARIA, обеспечивая корректное использование атрибутов на компонентах Material Design. ARIA атрибуты помогают вспомогательным технологиям, таким как экранные читалки, правильно интерпретировать интерфейс.
1. Роли (roles) Роль определяет назначение элемента в интерфейсе. Vuetify автоматически назначает роли большинству компонентов, но их можно переопределить:
<v-btn role="switch" aria-checked="true">Toggle</v-btn>
button, switch, tab,
dialog — наиболее распространённые роли.**2. Свойства состояния (aria-*)** Состояния указывают текущее состояние компонента:
aria-checked — для чекбоксов и переключателей
(true, false, mixed).aria-expanded — для раскрывающихся элементов
(true, false).aria-selected — для табов, выбранных элементов
списка.aria-disabled — указывает, что элемент недоступен для
взаимодействия.Пример с v-expansion-panel:
<v-expansion-panel>
<v-expansion-panel-header aria-expanded="false">
Панель 1
</v-expansion-panel-header>
<v-expansion-panel-content>
Содержимое панели
</v-expansion-panel-content>
</v-expansion-panel>
v-text-field и v-select Vuetify автоматически
добавляет атрибуты aria-label, aria-required,
aria-invalid, если настроена валидация или есть label.
<v-text-field
label="Email"
required
:rules="[v => !!v || 'Обязательное поле']"
/>
aria-required="true" появится автоматически.aria-invalid="true".v-checkbox и v-radio-group ARIA свойства помогают обозначить выбранные значения и группы:
<v-checkbox
v-model="agree"
label="Согласие"
aria-checked="false"
/>
aria-checked отражает текущее состояние чекбокса.role="radiogroup" и
aria-labelledby для связи с заголовком группы.Компоненты Vuetify поддерживают реактивное обновление ARIA свойств
при изменении состояния. Например, v-dialog:
<v-dialog v-model="dialog" aria-modal="true">
<v-card>
<v-card-title id="dialog-title">Диалоговое окно</v-card-title>
<v-card-text>Контент диалога</v-card-text>
</v-card>
</v-dialog>
aria-modal="true" указывает, что диалог блокирует
взаимодействие с остальной страницей.aria-labelledby="dialog-title" связывает диалог с
заголовком для экранных читалок.1. Использование уникальных идентификаторов Все ARIA
ссылки, такие как aria-labelledby или
aria-describedby, должны ссылаться на уникальные ID
элементов.
2. Проверка через инструменты доступности Vuetify
интегрируется с axe-core или Lighthouse для тестирования
доступности. Это помогает выявить неправильное использование ARIA.
3. Не дублировать роли Компоненты Vuetify уже имеют назначенные роли, переопределять их следует только при особых требованиях.
4. Поддержка динамического контента ARIA атрибуты должны обновляться вместе с состоянием компонента, например, при раскрытии аккордеона, смене выбранного таба или открытии диалога.
При создании собственных компонентов, основанных на Vuetify, рекомендуется:
v-btn,
v-card, v-dialog) для сохранения ARIA
поддержки.attrs для передачи атрибутов
родителю:<template>
<v-btn v-bind="$attrs" aria-pressed="false">
Пользовательская кнопка
</v-btn>
</template>
<v-btn :aria-pressed="isPressed" @click="isPressed = !isPressed">
Переключатель
</v-btn>