VisuallyHidden — это компонент, предназначенный для
улучшения доступности интерфейсов. Его основная задача — скрывать
контент визуально, при этом оставляя его доступным для технологий
экранного доступа, таких как скринридеры. Это особенно полезно для
текстовых подсказок, описаний кнопок или элементов формы, которые не
должны отображаться на экране, но важны для пользователей с
ограничениями зрения.
Компонент VisuallyHidden реализует концепцию “visually
hidden but accessible”. На практике это достигается с помощью CSS,
который полностью скрывает элемент с экрана, но не удаляет его из DOM.
Такой подход позволяет:
Для использования необходимо импортировать компонент из Chakra UI:
import { VisuallyHidden } from "@chakra-ui/react";
Простейший пример:
<VisuallyHidden>Скрытый текст для скринридеров</VisuallyHidden>
В этом случае текст «Скрытый текст для скринридеров» не будет виден на экране, но скринридер его озвучит.
Часто VisuallyHidden используется вместе с иконками,
чтобы добавить доступное описание:
import { IconButton, VisuallyHidden } from "@chakra-ui/react";
import { FaSearch } from "react-icons/fa";
<IconButton
icon={<FaSearch />}
aria-label="Поиск"
/>
<VisuallyHidden>Поиск</VisuallyHidden>
Здесь aria-label обеспечивает доступность для кнопки, а
VisuallyHidden позволяет использовать скрытый текст внутри
контента при необходимости, например, в сложных компонентах или
кастомных элементах.
VisuallyHidden полезен для добавления меток к полям
формы, которые не должны отображаться визуально:
import { Input, VisuallyHidden, FormLabel } from "@chakra-ui/react";
<FormLabel htmlFor="email">
<VisuallyHidden>Email</VisuallyHidden>
</FormLabel>
<Input id="email" type="email" placeholder="Введите ваш email" />
Такой подход позволяет сохранить корректные связи между меткой и
полем (htmlFor и id), что критично для
доступности.
VisuallyHidden может быть использован в комбинации с
интерактивными компонентами для предоставления дополнительного
контекста:
<Button>
<Icon as={FaTrash} />
<VisuallyHidden>Удалить элемент</VisuallyHidden>
</Button>
Пользователь видит только иконку корзины, а скринридер озвучивает текст «Удалить элемент», делая интерфейс доступным.
display: none и visibility: hiddenСкрытие элемента с помощью CSS-свойств display: none или
visibility: hidden полностью убирает его из визуального и
программного потока. В отличие от них, VisuallyHidden:
Хотя VisuallyHidden изначально рассчитан на скрытие,
можно комбинировать его с другими стилями при необходимости:
<VisuallyHidden style={{ position: 'absolute', top: 0 }}>
Дополнительная информация
</VisuallyHidden>
Однако в большинстве случаев стандартные стили Chakra UI полностью удовлетворяют требованиям доступности.
<label>, <button>), чтобы
улучшить доступность.VisuallyHidden в Chakra UI обеспечивает гибкий и
безопасный способ создавать доступные интерфейсы, позволяя поддерживать
чистый визуальный дизайн без потери информативности для пользователей с
ограничениями зрения.