В данном уроке мы сделаем небольшой приятный глазу эффект для обязательных полей в форме. Большинство веб форм разрабатывается в минимальном исполнении, только для сбора данных пользователя. Подумайте о том, сколько посетителей отказывались от заполнения формы, потому что она содержала множество полей. Но также есть много форм, которые в необязательных к заполнению полях запрашивают дополнительную информацию, которую посетитель хочет или должен предоставить. Например, формы заказа или формы классификации.
Идея заключается в том, чтобы выделять только обязательные к заполнению поля. Такая задача обычно решается установкой маленького символа * или подобного обозначения. Но мы пойдем дальше и добавим интерактивный эффект для лучшего визуального выделения обязательных полей.
Для реализации идеи обернем метки и поля формы в два элемента div, которые позволят нам применить различные эффекты. Внешний контейнер будет иметь дополнительный класс, если поле обязательно для заполнения (af-required):
<form class="af-form" id="af-form" novalidate>
<div class="af-outer">
<div class="af-inner">
<label>Титул</label>
<input type="text" name="title">
</div>
</div>
<div class="af-outer af-required">
<div class="af-inner">
<label>Имя</label>
<input type="text" name="fullname" required>
</div>
</div>
<!-- ... -->
</form>
Рассмотрим стили второго примера демонстрации, который использует скрытие необязательных полей с помощью масштабирования. Мы будем уменьшать высоту другого контейнера, когда внутренний будет уменьшаться в масштабе.
Добавим переход для внешнего контейнера, определим фиксированную высоту и установим скрытие выступающих частей, чтобы прятать содержание при уменьшении высоты.
.af-outer {
overflow: hidden;
height: 70px;
box-shadow: 0 1px 0 #f5f5f5 inset;
transition: all 0.5s linear;
}
Для внутреннего контейнера установим центр перехода в значение “center top”, чтобы видеть процесс уменьшения высоты. Изначально масштаб имеет значение 1 (не обязательно устанавливать его):
.af-inner {
padding: 15px 20px 15px 20px;
transform-origin: center top;
transform: scale(1);
transition: all 0.5s linear;
}
В верху формы имеется кнопка (чекбокс) с id af-showreq. При нажатии на кнопку будет происходит изменение масштаба дополнительных полей. Мы используем псевдо-класс :not для получения нужных элементов, но можно устанавливать классы для дополнительных полей и получать к ним доступ через комбинаторы родственников.
Уменьшим высоту внешнего контейнера и масштаб внутреннего:
#af-showreq:checked ~ .af-form .af-outer:not(.af-required) {
height: 0px;
visibility: hidden;
}
#af-showreq:checked ~ .af-form .af-outer:not(.af-required) .af-inner {
transform: scale(0);
opacity: 0;
}
Установка свойства visibility: hidden дает гарантию, что можно будет переключаться на другие поля с помощью клавиатуры. Здесь нельзя использовать display: none, потому что не будет работать переход.
Готово!