display: contents – убийца цифровой доступности

У CSS-свойства display: contents долгая и богатая история, когда дело касается доступности.

По спецификации объявление display: contents изменяет свойства отображения элемента, к которому оно применяется. Это заставляет элемент «исчезнуть», поднимая его дочерние элементы на следующий уровень в DOM.

Такие объявления могут быть полезны для различных целей. По иронии судьбы, одним из вариантов их использования является улучшение базовой семантики при вашей работе. Однако display: contents, как упоминалось в начале, сработало ну слишком уж хорошо.

CSS и цифровая доступность

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

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

Другой пример: когда говорят, что HTML по умолчанию доступен, при использовании display: contents можно забыть о фразе «по умолчанию». Как-то нехорошо получается.

Специалисты по обеспечению цифровой доступности заметили эту проблему и выдвинули обоснованные требования для ее устранения. Я хотел бы отметить статью Адриана Розелли. Она очень систематизирована, выполнена с особой тщательностью и всё в ней сказано по факту.

Как итог, исправления были внесены, браузеры обновлены, и история, правда не сразу, но все же оказалась со счастливым концом.

Регрессии

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

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

Ещё раз подчеркнём серьезность: такого рода регрессия – не та ошибка, которая просто раздражает, но которую можно обойти. Это серьёзная поломка основополагающего аспекта доступности Интернета. Адриан это заметил. И если вы прочитаете дальше статью Адриана, то там он продолжает подмечать это и даже чуть больше. В общей сложности, я насчитал шестнадцать обновлений о том, как поведение display: contents регрессировало до полной потери доступности.

Какая вырисовывается картина?

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

Горькая правда заключается в том, что не для всех доступность является главным приоритетом. Здесь я могу быть немного снисходителен, поскольку в основном стараюсь работать с тем, что у меня есть, а не с тем, чего я бы хотел. Результатом такой расстановки приоритетов является то, что я привык бороться со всеми маленькими особенностями, ошибками и подводными камнями, возникающими в результате такой расстановки приоритетов.

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

Однако.

Умение использовать веб-интерфейсы – задача не тривиальная. display: contents оказывает вполне реальное, весьма измеримое влияние на качество жизни людей, использующих интерфейсы с этим css-свойством.

Я также хочу, чтобы вы подумали о том, как такой «Сизифов труд» влияет на цифровую доступность.

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

Кроме того, утомительно оставаться в курсе всего в дополнение к основной работе на полную занятость – не существует caniuse или Baseline для «доступности». Я вообще не должен был бы писать это, так же, как и Адрианы по всему миру не должны постоянно тестировать и перепроверять.

Не говоря уже о совокупности бесчисленных коллективных часов, которые люди потратят на планирование и рефакторинг, чтобы убрать не только объявление display: contents, но и разметку, к которой оно применяется. Это если вам так повезёт, что разработчикам действительно будет не все равно.

Я даже не буду начинать говорить о дизайн-системах и о фреймворках, которые включают в себя значение display: contents.

Не используйте display: contents

На данный момент я не думаю, что мы в нашей отрасли можем смело использовать display: contents. Прошлые поступки – хороший показатель будущего поведения, а как известно, благими намерениями вымощена дорога в ад.

Сейчас я рассматриваю данное значение как «предсказуемо непредсказуемое». Здесь не подойдет популярное предложение «просто протестируйте его поддержку с помощью вспомогательных технологий». Существует не очевидная вероятность того, что желаемое поведение для объявления display: contents в текущей версии того или иного браузера может измениться в последующих его версиях.

Чтобы еще раз подчеркнуть серьезность обсуждаемый проблемы скажу так: поведение display: contents сродни ссылкам, которые вы используете на своем веб-сайте или в веб-приложении, и однажды они перестают работать из-за того, что вы применили к ним стили. Эта напасть происходит без предупреждения, и нет никаких ошибок в консоли или визуальных указаний на то, что что-то пошло не так.

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

Регрессии значения display: contents открывают нам крошечное окошко, через которое у нас есть возможность подсмотреть как некоторые аспекты создания браузеров:

    1. расставляются (или не расставляются) по приоритетности,
    2. тестируются (или не тестируются) в целях обеспечения качества.

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

Непредсказуемость того, как фактически функционирует значение display: contents, на практике представляет собой очень серьезный риск возникновения критических проблем доступности на вашем веб-сайте без вашего ведома и возможности контроля.

 

Автор: Eric Bailey

Перевёл Владислав Бондаренко

Источник: display: contents considered harmful

Поделиться