Выделение обязательных полей формы с использованием CSS3

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

Идея заключается в том, чтобы выделять только обязательные к заполнению поля. Такая задача обычно решается установкой маленького символа * или подобного обозначения. Но мы пойдем дальше и добавим интерактивный эффект для лучшего визуального выделения обязательных полей.

Для реализации идеи обернем метки и поля формы в два элемента 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, потому что не будет работать переход.

Готово!
Теги:
форма
Добавлено: 08 Мая 2018 11:42:42 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...