Naive UI — это современная библиотека компонентов для Vue.js, которая изначально проектировалась с упором на удобство и гибкость, но при этом учитывает важные аспекты доступности. Одним из ключевых направлений доступности является поддержка screen reader, что позволяет пользователям с ограничениями зрения эффективно взаимодействовать с приложением.
Screen reader использует ARIA-атрибуты (Accessible Rich Internet Applications) для передачи информации о состоянии компонентов и их роли. В Naive UI большинство компонентов уже имеют встроенные ARIA-атрибуты, которые автоматически сообщают о:
role)aria-checked, aria-expanded,
aria-selected)aria-labelledby,
aria-describedby)Например, для компонента n-switch атрибут
aria-checked автоматически отражает текущее состояние
переключателя. Это позволяет screen reader корректно озвучивать, включен
элемент или выключен.
Управление фокусом критично для навигации с клавиатуры и screen reader. В Naive UI все интерактивные компоненты поддерживают стандартные методы:
tabindex="0" для элементов, доступных через TabEnter,
Space) для активации кнопок и переключателейn-modal с последующим возвратом фокуса на исходный
элементИспользование этих механизмов позволяет пользователю screen reader не терять контекст при взаимодействии с интерфейсом.
n-button Автоматически получает роль
button. При использовании атрибута disabled
добавляется aria-disabled="true". Screen reader корректно
сообщает о недоступности кнопки.
n-modal Устанавливает role="dialog"
и связывает заголовок модального окна через
aria-labelledby. При открытии модального окна фокус
переносится внутрь, а при закрытии возвращается к исходному
элементу.
n-tooltip Использует
aria-describedby для связывания подсказки с элементом, на
котором она появляется. Это особенно важно для элементов управления, где
текст подсказки объясняет функциональность.
n-tabs Компоненты вкладок реализуют ARIA роли
tablist и tab, с динамическим управлением
aria-selected и aria-controls. При
переключении вкладок screen reader сообщает активную панель и её
содержимое.
Для компонентов с изменяемым состоянием (n-checkbox,
n-radio, n-collapse) Naive UI обновляет
соответствующие ARIA-атрибуты автоматически:
<n-checkbox v-model="checked" label="Принять условия" />
В этом примере:
aria-checked синхронизируется с
v-modelЭто обеспечивает полное соответствие принципам доступности WAI-ARIA без дополнительной ручной настройки.
Для случаев, когда стандартной реализации недостаточно, Naive UI предоставляет следующие подходы:
aria-label или
aria-labelledby для описания нестандартных элементовaria-describedby для
предоставления подробной информацииref и
методы компонента (focus(), blur())Пример:
<n-button ref="submitBtn" aria-label="Отправить форму">Submit</n-button>
<script setup>
import { ref, onMounted } from 'vue'
const submitBtn = ref(null)
onMounted(() => {
submitBtn.value.focus()
})
</script>
Такой подход позволяет screen reader сразу озвучить кнопку и её назначение, даже если текст на кнопке недостаточно информативен.
Naive UI тестировалась с наиболее распространенными screen reader, включая:
Большинство компонентов корректно объявляют роли и состояния, а динамические изменения интерфейса сразу озвучиваются. При этом важно учитывать:
role, aria-*)Эти практики позволяют создавать интерфейсы, которые полностью совместимы с пользователями screen reader, минимизируя необходимость ручной доработки и повышая доступность приложений на Vue.js.