Перейти до контенту
Web 4 хв
Оновлено:
Теги:

Неінклюзивний веб або чому я проти сучасних тенденцій

Інтернет розвивається швидко. Нові фреймворки, нові підходи, нові тренди. Але в дечому ми занадто «просунулись» — і втратили щось важливе.

Семантика? Мало кому цікава. Доступність? «Потім зробимо». Перформанс? Ну, в Chrome на Full HD працює — і добре.

Ця стаття — про моє невдоволення станом справ у фронтенді. Про костилі, які стали нормою. Про доступність, яку ігнорують. І про те, чому «просто і стабільно» — це не соромно.

Чому ми відійшли від простого

Вимоги до дизайну змінились кардинально. В тренді — розумний мінімалізм, «ненав’язливі» ефекти, море нестандартних анімацій. І цей тренд скрізь: від лендингів до SPA.

Уявімо ситуацію. В команду приходить джун, якого в аутсорсі продають за мідла. Поруч — молодий дизайнер, який горить бажанням намалювати щось «естетично-каверзне», нетипове, що «зачепить».

І починається холівар на тему «як впихнути невпихуєме».

Джун дивиться на макет, чеше голову, розуміє, що щось не так. Google не допомагає, запитати нікого, а сперечатись з дизайнером — якось ніяково.

Так народжується його величність костиль. Дів на діві, тисячі рядків дивного JavaScript, і воно наче працює. В Chrome. На Full HD. Майже без лагів.

Показали замовнику — чудово! Баги пофіксимо потім.

Баги фіксяться, код розростається, команда змінюється п’ять разів, все рефакториться, стає «красиво»… але є одне «але».

Доступність. Її немає.

Ми не думаємо про доступність

Бізнес жорстокий, особливо коли дедлайни тиснуть. Коли немає явних вимог до якості, а мета — просто «готовий продукт» — ми не думаємо про такий «пустяк».

А дарма.

Чому це важливо

Аудиторія. За різними оцінками, 15–20% людей мають ті чи інші обмеження: зір, слух, моторика. Ігноруючи доступність, ви відрізаєте частину користувачів.

Закон. В США, ЄС, Канаді є законодавство про доступність вебу. Amazon, Domino’s Pizza, Beyoncé — всі отримували позови за недоступні сайти. В Україні поки тихо, але тренд очевидний.

SEO. Семантичний HTML краще індексується. Скрінрідери і пошукові боти читають сторінку схоже.

Якість коду. Доступний код — зазвичай чистіший код. Правильна семантика = менше костилів.

Мінімум, який варто робити

Семантичні теги: <header>, <nav>, <main>, <article>, <aside>, <footer> замість безкінечних <div>.

Alt для картинок: не «image1.jpg», а опис того, що на зображенні.

Контраст тексту: світло-сірий текст на білому — це не мінімалізм, це нечитабельність.

Фокус: не прибирайте outline без заміни. Користувачі клавіатури існують.

Форми: <label> прив’язаний до <input>. Не placeholder замість label.

Практична частина. Ми постійно займаємось зайвою роботою, ламаючи те, що вже працює.

Кастомний select

Класика жанру. Рідний <select> «некрасивий», тому пишемо компонент на 500 рядків JS.

Що втрачаємо: нативна поведінка на мобільних, підтримка клавіатури, скрінрідери, автозаповнення браузера.

Що отримуємо: баги, проблеми з фокусом, додаткове навантаження.

Питання: чи справді бізнесу важливіше «красивий» select, ніж відтестована логіка і перформанс?

Кастомний скролл

Ще одне знущання над UX. Кастомні скролбари додають проблеми: несподівана поведінка, конфлікти з тачпадами, проблеми на мобільних.

Якщо дуже треба стилізувати — є scrollbar-width і ::-webkit-scrollbar. Не ідеально, але краще за JS-бібліотеку.

Кастомні чекбокси і радіо

Можна стилізувати нативні через appearance: none + псевдоелементи. Не треба ховати <input> і малювати <div>.

css

input[type="checkbox"] {
  appearance: none;
  width: 20px;
  height: 20px;
  border: 2px solid #333;
  border-radius: 4px;
}

input[type="checkbox"]:checked {
  background: #333;
}

Працює, доступне, без JS.

Модалки без <dialog>

HTML має нативний <dialog> з методами .showModal() і .close(). Він вже вміє: блокувати фокус всередині, закриватись на Escape, затемнювати фон через ::backdrop.

Навіщо писати це з нуля?

Здоровий research

Ще одна проблема — відсутність планування.

Як і в медицині, без якісної діагностики результат може не виправдати себе, а то й зашкодити.

Перед тим як писати код

Чи існує нативне рішення? HTML і CSS вміють багато. <details>, <dialog>, <datalist>, :has(), @container — можливо, вам не потрібна бібліотека.

Чи це справді потрібно? Анімація заради анімації? Кастомізація заради кастомізації? Іноді «скучний» варіант — правильний.

Як це вплине на перформанс? Lighthouse, WebPageTest, DevTools Performance — інструменти є, треба ними користуватись.

Як це працюватиме без JS? Progressive enhancement ніхто не відміняв.

Отже

Можливо, я надто скептично ставлюсь до трендів. Можливо, просто люблю простоту.

Але коли бачу сайт на 5 МБ JavaScript, де кнопка «Купити» — це <div onclick> без можливості натиснути з клавіатури, де select перемальований до невпізнання і глючить на мобільних, де контраст тексту — 2:1 замість мінімальних 4.5:1…

Я думаю: ми знову в ері Flash. Тільки тепер це React і «авторське бачення».

Семантика, доступність, перформанс — це не «пустяки на потім». Це база. І якщо ми називаємо себе розробниками, а не «збирачами костилів», варто про це пам’ятати.

Поділитися:

1 коментар

  1. Eduard Tolkachenko ·

    герантофил

Залишити коментар ·