ARIA (Accessible Rich Internet Applications) — это набор атрибутов, обеспечивающих доступность интерактивных веб-компонентов для пользователей с ограниченными возможностями. В библиотеке Carbon Components Svelte ARIA-атрибуты играют критически важную роль, так как большинство компонентов являются интерактивными и могут требовать семантической разметки для корректной работы с экранными читалками.
В Carbon Components Svelte каждый интерактивный компонент, будь то Button, Dropdown, Modal или Tabs, может быть дополнительно оснащен ARIA-атрибутами для повышения доступности. Основные цели использования ARIA:
role), чтобы экранные
читалки понимали, что за элемент представлен.aria-expanded, aria-checked,
aria-disabled).aria-labelledby, aria-describedby).role и
семантикиАтрибут role определяет тип элемента и его
функциональное назначение. В Svelte-компонентах Carbon роли назначаются
автоматически, но могут быть переопределены через пропсы:
<script>
import { Button } from 'carbon-components-svelte';
</script>
<Button role="switch" aria-checked={true}>
Переключатель
</Button>
В этом примере кнопка приобретает роль переключателя
(switch) и состояние включения
(aria-checked=true). Это позволяет экранным читалкам
корректно озвучивать элемент как переключатель, а не как обычную
кнопку.
Состояния элементов управляются через ARIA-атрибуты:
aria-expanded — указывает, раскрыт ли
элемент (например, Accordion или Dropdown).aria-selected — обозначает, выбран ли
элемент (например, в Tabs).aria-checked — используется для
чекбоксов и переключателей.aria-disabled — блокирует
интерактивность элемента, сохраняя его видимым.Пример для Dropdown:
<script>
import { Dropdown } from 'carbon-components-svelte';
let open = false;
</script>
<Dropdown bind:open aria-expanded={open} aria-label="Выбор опции">
<Dropdown.Item>Опция 1</Dropdown.Item>
<Dropdown.Item>Опция 2</Dropdown.Item>
</Dropdown>
Здесь aria-expanded динамически связывается с состоянием
раскрытия open. Атрибут aria-label
обеспечивает доступность, если визуальный текст недоступен экранным
читалкам.
aria-labelledby и
aria-describedbyДля сложных компонентов, таких как Modal, важно корректно связывать заголовок и описание с самим модальным окном:
<script>
import { Modal } from 'carbon-components-svelte';
</script>
<Modal id="example-modal" aria-labelledby="modal-title" aria-describedby="modal-desc">
<h2 id="modal-title">Заголовок модального окна</h2>
<p id="modal-desc">Подробное описание содержимого модального окна.</p>
</Modal>
Такой подход гарантирует, что экранные читалки озвучат заголовок и описание при открытии модального окна.
Svelte позволяет связывать состояние компонентов с ARIA-атрибутами напрямую через реактивные переменные. Это особенно важно для компонентов с динамическим поведением, таких как:
aria-selected обновляется при
смене активной вкладки.aria-expanded меняется при
раскрытии панели.aria-checked отслеживает
состояние выбора.Пример динамического обновления для Tabs:
<script>
import { Tabs, Tab } from 'carbon-components-svelte';
let activeTab = 0;
</script>
<Tabs bind:active={activeTab}>
<Tab aria-selected={activeTab === 0}>Вкладка 1</Tab>
<Tab aria-selected={activeTab === 1}>Вкладка 2</Tab>
</Tabs>
Carbon Components Svelte позволяет добавлять пользовательские
ARIA-атрибуты к любому компоненту через $$restProps. Это
особенно полезно, когда требуется нестандартная доступность:
<script>
import { Button } from 'carbon-components-svelte';
</script>
<Button aria-live="polite" aria-atomic="true">
Обновить статус
</Button>
Здесь кнопка сообщает экранным читалкам, что её текст может
обновляться динамически (aria-live), а изменения должны
озвучиваться полностью (aria-atomic).
aria-labelledby и aria-describedby для сложных
компонентов.ARIA-атрибуты в Carbon Components Svelte позволяют создавать полностью доступные интерфейсы, обеспечивая корректную работу экранных читалок и улучшая взаимодействие для всех пользователей. Они органично интегрируются с реактивностью Svelte, обеспечивая динамическое управление состояниями компонентов без дополнительных сложностей.