Вебсправочник
Практика вёрстки

Сетка формы: подписи и поля без ломких ширин

Форму можно разложить по колонкам, сохраняя каждую подпись рядом со своим полем и удобный порядок Tab.

Назначение

Форму можно разложить по колонкам, сохраняя каждую подпись рядом со своим полем и удобный порядок Tab.

Как это работает

Каждая пара label и input объединена в контейнер. Внешний Grid распределяет пары, а внутреннее поле занимает доступную ширину с border-box. На узком экране используется одна колонка.

Пример

<style>.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.field{min-width:0}.field label{display:block}.field input{width:100%;box-sizing:border-box}@media(max-width:460px){.form-grid{grid-template-columns:1fr}}</style>
<form class="form-grid"><div class="field"><label for="first-name">Имя</label><input id="first-name" name="first" autocomplete="given-name"></div><div class="field"><label for="last-name">Фамилия</label><input id="last-name" name="last" autocomplete="family-name"></div></form>

Что должно получиться

Пары полей переходят в одну колонку по ширине области. Пример не отправляет данные и не задаёт реальный контракт обработки личной информации.

Граница применения и частая ошибка

Не переставляйте поля только визуально: фокус клавиатуры обычно следует DOM. Поля одного логического шага должны читаться последовательно и при выключенных стилях.

Самостоятельная проверка

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

HTML и CSS можно изменить в песочнице ниже. Она изолирована: JavaScript, внешние ресурсы и отправка форм отключены. Для проверки сетевых запросов, отправки данных или функций браузера используйте отдельную локальную страницу.

Попробуйте сами

HTML + CSS песочница
РЕЗУЛЬТАТ · ИЗОЛИРОВАННЫЙ ПРЕДПРОСМОТР
Измените код и нажмите «Запустить». JavaScript и внешние запросы отключены.
Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.