Про доступність та UI на прикладі мого особистого сайту

Знайомтесь це мій особистий сайт. Перший знімок те яким він був ДО другий - ПІСЛЯ сьогоднішнього патчу. І в цій короткій статті я хочу зробити маленьке ревью та розказати на прикладах ЧОМУ я реалізував деякі дивні речі.

Зображення
Старий варіант
Зображення
Оновлений варіант

Про Header

Почну з самого низу - header.

Зображення

Так, хоч цей елемент візуально виглядає як типовий футер сайту, технічно це хедер. В розмітці він знаходиться найвище та саме з нього починається навігація скрінрідера.

Чому він внизу? Все просто - для зручнішої навігації з мобільного пристрою. Оскільки нижня зона дисплею зазвичай доступніша за верхню.

Зображення

Звісно, якщо у користувача немає попсокета. Тоді активна зона зміщується вище.

З цієї ж причини головні елементи розміщуються приблизно між центром та нижньою частиною дисплею. Так, за моїм задумом, вони будуть легкодоступні переважній кількості користувачів.

Зображення

В останньому патчі я поміням меню та перемикач мови місцями.

Зображення
  1. Для користувача смартфоном (правші) він має стати ще доступніший.

  2. Для користувачів скрінрідера, найперше що буде озвучено на сайті - це пропозиція змінити мову.

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

<a href="...">
  <svg aria-label="Switch language">...</svg>
  English
</a>

Однак це не надто добре працювало. Іконка могла не озвучуватись або ж озвучуватись як Посилання «Українська» .

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

<a
  href="..."
  aria-label="Switch language to English"
  lang="en"
>
  <svg>...</svg>
  English
</a>

Також я додав атрибут lang. Фактично перемикач мови має протилежну мову до решти сторінки. Тому важливо підказати скрінрідеру, що в цьому елементі мова відрізняється та як саме її інтерпретувати.

І поки ми не пішли далі. Мій футер порушує одне з вагомих правил - візуальне розміщення елементів та їх порядок табуляції повинні співпадати. В моєму випадку це не так — меню табулюється першим проте візуально в самому кінці сторінки. Але я готовий на це піти розуміючи ризики.

Про іменування секцій

Рухаємось далі і поговоримо про блок з посиланнями на соціальні мережі.

Зображення

Зізнаюсь, я до кінця не визначився які посилання я хочу мати, тому періодично щось додаю, щось видаляю. Але зараз їх стало надто багато, тому довелось візуально та семантично розбити цей блок на два.

В старій версії не було нічого цікавого. Це був нудний і не найкраще зроблений div з посиланнями. 🤢

<div>
  <a>Eмeйл</a>
  <a>Kyпити Kaви</a>
  <a>Teлerpam</a>
  <a>Твіттер</a>
  <a>Ютуб</a> 
  <a>Інстаграм</a>
</div>

CSS я опускаю, оскільки він не важливий для UI та семантики.

В новій версії, по перше я використовую section щоб логічно згрупувати елементи.

<section aria-label="Основні контакти">
  <a>Eмeйл</a>
  <a>Kyпити Kaви</a>
</section>

<section aria-labeledby="secondary">
  <h2 id="secondary">Інші соц.мережі</h2>
  <a>Teлerpam</a>
  <a>Твіттер</a>
  <a>Ютуб</a> 
  <a>Інстаграм</a>
</section>

А по друге, обом секціям я додав лейбли. Завдяки цьому при навігації скрінрідером, коли фокус провалюється в середину буде зачитано як лейбд секції так і посилання Основні контакти. Емейл. Або Інші соціальні мережі. Твіттер. Чи навіть Основні контакти. Регіон. 2 елементи. Емейл. Посилання.

Аналогічно додав лейбл для контейнера банера вгорі сайта. Таким чином при потраплянні фокусу на посилання в середині, скрінрідер озвучить назву банера надавши контекст посиланню.

<article aria-labelledby="banner-title">
  <p>
    <strong id="banner-title">Дякую за підтримку України!</strong>
  </p>

  <p>
    Оскільки росія веде геноцидну війну проти моєї країни, 
    я вдячний усім, хто продовжує підтримувати Україну
    в нашій боротьбі за свободу.
  </p>
  <p>
    <a href="...">Подивіться, як ви можете допомогти</a>
  </p>
</article>

Домашнє завдання

І на останок, питання на домашнє завдання, раз ви дочитали аж сюди: Хто пояснить, чому для групування соц.іконок я використав <section> а для групування банера <article>?

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Олександр Козак
Олександр Козак@kozack

5.2KПрочитань
1Автори
60Читачі
На Друкарні з 14 квітня

Більше від автора

  • Як зробити нескінченну прокрутку на сайті. Або 10 недоліків та одна перевага Infinity Scroll

    В цій статті я хочу описати 10 поширених проблем, пов’язаних з нескінченною прокруткою, які розробнику доведеться вирішувати при реалізації Infinity Scroll. Та про єдину причину, чому попри всі недоліки нескінченну прокрутку активно використовують.

    Теми цього довгочиту:

    Ui-ux
  • Чому ви повинні забути про rgb() та hex кольори при роботі з вебсайтами

    Формат задання кольорів функцією rgb() було представлено ще у 1996 році. Очевидно, що CSS далеко розвинувся з тих часів. Попри це, чомусь, багато веброзробників та вебдизайнерів вперто продовжують використовувати цей застарілий, обмежений та нелюдський формат кольору по цей день.

    Теми цього довгочиту:

    Css
  • Чому автоматичні імпорти будь-де це жахлива ідея 💩

    Цей довгочит не містить об’єктивності або глибокого занурення в проблематику чи архітектуру. Це трансляція страждань, волання та болю розробника який зіштовхнувся з жахливою ідеєю яка захоплює спільноту.

    Теми цього довгочиту:

    Javascript

Вам також сподобається

Коментарі (4)

Article індексується як більш важливий елемент, яким і являється банер

Вам також сподобається