Урок 4 из 8 · 20 мин · обновлено

Адаптивность и доступность: телефон, планшет, программы экранного доступа

Как сделать сайт удобным на любом экране и для любого человека: медиазапросы и подход mobile first, относительные единицы, подписи к картинкам и полям, контраст и работа с клавиатуры.

Сначала телефон

Больше половины заказов в кофейне «Зерно» делают с телефона по дороге на работу. Если меню на узком экране разъезжается, а кнопку не нажать пальцем, заказ уйдёт к конкурентам.

Поэтому вёрстку начинают с телефона — этот подход называют mobile first. Базовые стили пишут для узкого экрана, а для широких добавляют изменения через медиазапросы:

CSS
.menu {
  display: grid;
  grid-template-columns: 1fr;
  gap: 12px;
}

@media (min-width: 600px) {
  .menu { grid-template-columns: repeat(2, 1fr); }
}

@media (min-width: 960px) {
  .menu { grid-template-columns: repeat(3, 1fr); }
}

На телефоне карточки идут в одну колонку, на планшете — в две, на компьютере — в три.

Относительные единицы

Чтобы вёрстка гибко подстраивалась, вместо жёстких пикселей часто используют относительные единицы:

  • % — доля от ширины родителя;
  • rem — размер относительно базового шрифта: если человек увеличил шрифт в настройках, вся страница аккуратно увеличится;
  • max-width вместо width — блок не шире заданного, но может сжиматься.
CSS
.container { max-width: 1100px; margin: 0 auto; padding: 0 16px; }
img { max-width: 100%; height: auto; }

Вторая строка — простое правило, которое избавляет от картинок, вылезающих за край экрана.

Доступность

Доступность (accessibility, a11y) — чтобы сайтом могли пользоваться все: незрячие люди с программами экранного доступа, люди с плохим зрением, те, кому трудно управлять мышкой. Это не «для галочки»: таких людей миллионы, и многие из них — клиенты кофейни.

Базовые правила:

  • У картинок — alt с описанием. Декоративные картинки получают пустой alt="", чтобы программа их пропускала.
  • У полей формы — подписи label, связанные с полем:
HTML
<label for="phone">Телефон для связи</label>
<input id="phone" type="tel" autocomplete="tel">
  • Достаточный контраст текста и фона: светло-серый текст на белом многие просто не прочитают.
  • Кнопки — это button, ссылки — это a: тогда они работают с клавиатуры без лишнего кода.
  • Видимый фокус: когда человек переходит по странице клавишей Tab, должно быть видно, где он сейчас. Нельзя убирать обводку outline без замены.

Как проверять

  1. Сжать окно браузера или включить в инструментах разработчика режим устройства — посмотреть сайт на ширине 360–400 пикселей.
  2. Пройти страницу клавишей Tab — до каждой кнопки можно дойти и нажать её Enter.
  3. Запустить автоматическую проверку — например, Lighthouse во вкладке инструментов разработчика в браузерах на основе Chromium: он найдёт картинки без alt и низкий контраст.

Попробуйте сами. В форме заказа «Зерна» нашли проблемы: поле телефона без подписи, только серый текст-подсказка внутри; кнопка «Заказать» сделана из div; на телефоне форма шире экрана. Как исправить каждую?

Пример ответа
  1. Подсказка вместо подписи исчезает при вводе, а программа экранного доступа её может не прочитать. Добавить label с текстом «Телефон» и связать с полем через for и id.
  2. Кнопка из div не нажимается с клавиатуры. Заменить на <button type="submit">Заказать</button>.
  3. Форма шире экрана: убрать фиксированную ширину в пикселях, поставить max-width: 100% и проверить на ширине 360 пикселей.

Мини-тест · 4 вопроса

Проверьте себя

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

  1. Что такое подход mobile first?

  2. Зачем картинке атрибут alt?

  3. Поле формы без подписи label. Чем это плохо?

  4. Как проверить доступность сайта с клавиатуры?