Способы скрыть элемент визуально, но оставить доступным для скринридеров
Цель
Иногда нужно скрыть элемент визуально, но оставить его доступным для скринридеров (например, описания, подсказки, служебный текст для незрячих пользователей).
Подход 1: CSS-класс ".sr-only"
Это самый распространённый способ скрытия элемента от глаз, но не от скринридеров.
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}
<p class="sr-only">Это видит только скринридер</p>
Используется в Tailwind, Bootstrap (.sr-only) и других UI-фреймворках.
Подход 2: Атрибут "aria-hidden="true""
Противоположное поведение — скрывает от скринридеров, но оставляет на экране.
<p aria-hidden="true">Этот текст виден, но не читается скринридерами</p>
Используйте aria-hidden="true" только для декоративных или дублирующихся элементов.
Подход 3: "span" с текстом + "aria-label"
Когда хотите визуально показать один элемент, но скринридеру передать другой текст.
<button aria-label="Закрыть модальное окно">
  ❌
</button>
Подход 4: Текст вне экрана (менее предпочтительно)
.hidden-offscreen {
  position: absolute;
  left: -9999px;
}
Этот способ работает, но менее надёжен и может вызывать проблемы с навигацией.
Чего не стоит делать
- display: noneи- visibility: hidden— полностью скрывают и от глаз, и от скринридеров.
- Удаление элемента из DOM.
Совет по доступности:
Используйте .sr-only для пояснений, скрытых заголовков и текста для screen reader'ов. Это делает ваш сайт доступным для всех пользователей, включая тех, кто использует ассистивные технологии.