Изменение порядка контента

Порядок содержимого документа важен для доступности вашего сайта. Программа чтения с экрана озвучивает содержимое в соответствии с порядком в документе, используя HTML-элементы для придания ему дополнительной смысловой нагрузки.

Пользователь, перемещающийся по сайту с помощью клавиатуры, а не сенсорного экрана или мыши, перемещается по документу с помощью табуляции. Он переходит от одного активного элемента к другому, переключаясь между ссылками и полями форм в том порядке, в котором элементы находятся в документе.

Таким образом, создание хорошо структурированного документа и использование правильных HTML-элементов — ключевой этап создания доступного сайта. Однако использование CSS может свести на нет некоторые результаты этой работы.

Источник против визуального порядка

Навигация по сайту часто размечается в виде списка ссылок. Вы можете использовать Flexbox , чтобы превратить их в горизонтальную панель. В следующем примере я создал этот распространённый шаблон. Щёлкните по нему и переключайтесь между ссылками клавишей Tab. Фокус перемещается в логическом направлении слева направо, в порядке, в котором мы читаем в английском языке.

Допустим, вы создали этот шаблон навигации, а затем вас попросили переместить раздел «Связаться с нами» , который находится вторым в исходном коде, в конец. Вы можете использовать свойство order Flexbox, чтобы переместить его местоположение.

Попробуйте перемещаться по элементам с помощью клавиши Tab в следующем примере, в котором для изменения порядка элементов используется свойство order .

Фокус переходит на последний элемент, а затем возвращается обратно. С точки зрения порядка табуляции этот элемент — второй. Однако визуально он последний.

Этот пример демонстрирует проблему, с которой мы сталкиваемся при переупорядочивании контента с помощью CSS. Правильным решением этой проблемы является изменение порядка ссылок в исходном коде, а не имитация этого изменения с помощью CSS.

Какие свойства CSS могут вызвать изменение порядка?

Любой метод вёрстки, позволяющий перемещать элементы, может вызвать эту проблему. Следующие свойства CSS обычно вызывают проблемы с переупорядочиванием контента:

  • Использование position: absolute и визуальное исключение элемента из потока.
  • Свойство order в макетах Flexbox и Grid.
  • Значения row-reverse и column-reverse для flex-direction в Flexbox.
  • dense значение для grid-auto-flow в Grid Layout.
  • Любое позиционирование по имени или номеру строки или с помощью grid-template-areas в Grid Layout.

В следующем примере я создал макет с использованием CSS Grid и расположил элементы с использованием номеров строк, не учитывая их местонахождение в исходном коде.

Попробуйте перемещаться по этому примеру с помощью клавиши Tab и посмотрите, как фокус переключается. Это создаёт очень запутанную ситуацию, особенно если страница длинная.

Тестирование на наличие проблемы

Скриншот инструмента «Accessibility Insights», демонстрирующий запутанный порядок элементов.

Быстрый тест: попробуйте перемещаться по странице с помощью клавиатуры. Удаётся ли вам добраться до всего? Возникают ли при этом какие-либо странные скачки?

Для наглядной демонстрации переупорядочивания контента попробуйте инструмент проверки Tab Stop в расширении Chrome Accessibility Insights . На снимке экрана показан пример CSS Grid в этом инструменте. Вы можете видеть, как фокус перемещается по макету.

Изменение порядка контента и адаптивный веб-дизайн

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

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