Floating UI предоставляет мощные инструменты для управления позиционированием всплывающих элементов, таких как тултипы, модальные окна и выпадающие списки. Одним из ключевых аспектов при работе с интерактивными компонентами является обеспечение доступности, включая поддержку экранных читалок.
Для корректной работы экранных читалок необходимо использовать ARIA-атрибуты, которые сообщают пользователю о роли и состоянии элементов интерфейса:
role="tooltip", для
модального окна – role="dialog".Floating UI не управляет автоматическим добавлением ARIA-атрибутов, поэтому их нужно явно задавать при рендеринге всплывающего компонента.
import { useFloating } from '@floating-ui/react-dom';
function Tooltip({ label, children }) {
const { x, y, reference, floating } = useFloating({
placement: 'top',
});
return (
<>
<button ref={reference} aria-describedby="tooltip">
{children}
</button>
<div
ref={floating}
id="tooltip"
role="tooltip"
style={{
position: 'absolute',
top: y ?? 0,
left: x ?? 0,
}}
>
{label}
</div>
</>
);
}
Экранные читалки тесно связаны с поведением клавиатурного фокуса. Floating UI позволяет интегрировать управление фокусом через вспомогательные хуки:
Tab, Escape и стрелок для навигации между
элементами.Пример управления фокусом для модального окна:
function Modal({ isOpen, onClose }) {
const { x, y, reference, floating } = useFloating();
useEffect(() => {
if (isOpen) {
floating.current?.focus();
}
}, [isOpen]);
return isOpen ? (
<div
ref={floating}
role="dialog"
tabIndex={-1}
aria-modal="true"
style={{ position: 'absolute', top: y, left: x }}
>
<button onCl ick={onClose}>Закрыть</button>
Контент модального окна
</div>
) : null;
}
Когда позиция или видимость всплывающего элемента изменяется динамически, экранная читалка должна получать обновлённую информацию:
<div
role="status"
aria-live="polite"
>
{dynamicMessage}
</div>
Floating UI поддерживает автоматическую корректировку позиции
(middleware flip, shift), но при этом
необходимо следить за сохранением логики доступности:
aria-describedby или
aria-labelledby.Для оценки доступности рекомендуется использовать следующие подходы:
Эти методы помогают убедиться, что Floating UI совместим с основными сценариями использования для пользователей с нарушениями зрения.
Часто используется комбинация Floating UI и React-подходов к управлению состоянием:
useState или useReducer – для отслеживания
открытия/закрытия элементов.useEffect – для синхронизации фокуса и обновления
ARIA-атрибутов.const [isOpen, setIsOpen] = useState(false);
return (
<>
<button onCl ick={() => setIsOpen(!isOpen)}>Открыть меню</button>
{isOpen && <DropdownMenu />}
</>
);
role,
aria-labelledby, aria-describedby и
aria-hidden.aria-live и синхронизация с DOM.Эти принципы позволяют сделать Floating UI совместимым с современными стандартами доступности и обеспечивают корректное взаимодействие с экранными читалками.