Hack Frontend Community

Способы скрыть элемент визуально, но оставить доступным для скринридеров

Цель

Иногда нужно скрыть элемент визуально, но оставить его доступным для скринридеров (например, описания, подсказки, служебный текст для незрячих пользователей).


Подход 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'ов. Это делает ваш сайт доступным для всех пользователей, включая тех, кто использует ассистивные технологии.