Skip to main content

SITIST

Доступное скрытие: паттерн .visually-hidden

Так бывает, что в макете сайта не предусмотрены видимые текстовые заголовки блоков, названия кнопок или других интерактивных элементов. Например, на кнопке, которая добавляет товар в корзину, нарисована только иконка корзинки без текстового сопровождения. Зрячему человеку этого достаточно, чтобы успешно взаимодействовать с интерфейсом.

Чтобы оставить элемент доступным, но при этом визуально спрятать, придумали специальный класс .visually-hidden

Мне нравится такой его вариант:

.visually-hidden {
  position: fixed;
  transform: scale(0);
}

Раньше использовали вот такую, более расширенную версию

.visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  border: 0;
  clip: rect(0 0 0 0);
}

Как полностью скрыть элементы

Полностью скрыть элементы можно тремя способами:

  • через CSS свойство display display: none;
  • через CSS свойство visibility, visibility: hidden;
  • через атрибут HTML5 hidden, например <span hidden>

display: none; полностью скроет элемент, visibility: hidden; - скроет элемент, но оставит зарезервированное за ним пространство, при этом для дочерних элементов можно переопределить visibility на visibility: visible и показать их. Атрибут hidden в современных браузерах (2019) работает как display: none;. Не забудьте добавить в стили [hidden] {display: none} для старых браузеров.

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

Как скрыть элементы семантически

Если перед нами стоит обратная задача: сохранить элементы видимыми, но скрыть от скринридеров, то можно использовать специальный атрибут aria-hidden="true".

Это может потребоваться для скрытия картинок-иконок, если они вставлены как img или i, которые не должны быть прочитаны скринридером, потому что их наличие не повышает информативность контента, так как далее может идти обычный текст

<a href="">
  <img src="cart.png" alt="" aria-hidden="true">
  Перейти в корзину
</a>
Вверх