
Эта серия заданий посвящена созданию интерактивных и привлекательных форм с использованием CSS-анимаций и переходов. Вы попрактикуетесь в стилизации элементов форм в различных состояниях (:focus, :valid, :invalid, :checked), научитесь анимировать метки (labels), кнопки и другие элементы для улучшения пользовательского опыта. Задания построены от простых эффектов при наведении или фокусе до более сложных анимаций кастомных элементов управления, таких как чекбоксы. Вам предстоит заполнить пропущенные части CSS-кода, чтобы оживить статичные HTML-формы.
- Модуль 1: Основы CSS
- Селекторы элементов.
- Селекторы классов и идентификаторов.
- Цвет текста и фона.
- Размеры и единицы измерения в CSS.
- Семейство шрифта и базовые свойства текста.
- Стилизация текста (жирный, курсив, подчеркивание).
- Выравнивание и интервалы текста.
- Комбинированные селекторы.
- Псевдоклассы для ссылок.
- Приоритеты стилей и каскадность.
- Наследование в CSS.
- Модуль 2: Блочная модель и позиционирование
- Блочная модель CSS (box model).
- Внутренние отступы (padding).
- Внешние отступы (margin).
- Границы элементов (border).
- Сокращенная запись свойств границ.
- Радиус скругления углов (border-radius).
- Свойство display и его значения.
- Блочные элементы (display: block).
- Строчные элементы (display: inline).
- Строчно-блочные элементы (display: inline-block).
- Скрытие элементов (display: none, visibility: hidden).
- Статичное позиционирование (position: static).
- Относительное позиционирование (position: relative).
- Абсолютное позиционирование (position: absolute).
- Фиксированное позиционирование (position: fixed).
- Липкое позиционирование (position: sticky).
- Свойство z-index и порядок наложения элементов.
- Свойство float и его применение.
- Свойство clear для обтекания.
- Центрирование элементов различными способами.
- Модуль 3: Селекторы CSS продвинутый уровень
- Групповые селекторы.
- Селекторы потомков (descendant selectors).
- Дочерние селекторы (child selectors).
- Соседние селекторы (adjacent sibling selectors).
- Общие сиблинги (general sibling selectors).
- Селекторы атрибутов: точное совпадение.
- Селекторы атрибутов: частичное совпадение.
- Псевдоклассы состояний (:hover, :active, :focus, :visited).
- Псевдоклассы для форм (:checked, :disabled, :required).
- Структурные псевдоклассы (:first-child, :last-child).
- Псевдоклассы :nth-child() и :nth-of-type().
- Псевдоклассы :not() и :empty.
- Псевдоэлементы ::before и ::after.
- Псевдоэлементы ::first-letter и ::first-line.
- Псевдоэлемент ::selection.
- Псевдоэлемент ::placeholder.
- Комбинирование псевдоклассов и псевдоэлементов.
- Создание декоративных элементов с помощью псевдоэлементов.
- Модуль 4: Работа с фоном и визуальными эффектами
- Фоновый цвет (background-color).
- Фоновое изображение (background-image).
- Повторение фона (background-repeat).
- Позиционирование фона (background-position).
- Размер фона (background-size).
- Фиксация фона (background-attachment).
- Сокращенная запись свойств фона.
- Множественные фоновые изображения.
- Линейные градиенты (linear-gradient).
- Радиальные градиенты (radial-gradient).
- Конические градиенты (conic-gradient).
- Тень блока (box-shadow).
- Тень текста (text-shadow).
- Прозрачность (opacity).
- Фильтры (filter: blur, grayscale, etc.).
- Режимы смешивания (mix-blend-mode, background-blend-mode).
- Маски с mask-image.
- Формы с clip-path.
- Модуль 5: Типографика продвинутый уровень
- Межстрочное расстояние (line-height).
- Интервалы между буквами (letter-spacing).
- Интервалы между словами (word-spacing).
- Трансформация текста (text-transform).
- Декорирование текста (text-decoration).
- Перенос слов (word-break, overflow-wrap).
- Управление пробелами (white-space).
- Многоколоночный текст (columns).
- Обрезка текста (text-overflow, ellipsis).
- Вертикальное выравнивание текста (vertical-align).
- Направление текста (direction, writing-mode).
- Веб-шрифты и @font-face.
- Модуль 6: Flexbox
- Введение в Flexbox.
- Включение Flexbox (display: flex).
- Flex-контейнер и flex-direction.
- Выравнивание с justify-content.
- Выравнивание с align-items.
- Выравнивание с align-content.
- Свойство align-self для отдельных элементов.
- Свойство flex-wrap.
- Свойство flex-flow (сокращение для direction и wrap).
- Свойство flex-grow.
- Свойство flex-shrink.
- Свойство flex-basis.
- Сокращенное свойство flex.
- Порядок элементов с order.
- Сложные макеты на Flexbox.
- Вложенные flex-контейнеры.
- Создание адаптивной навигационной панели с Flexbox.
- Модуль 7: CSS Grid Layout
- Введение в Grid Layout.
- Включение Grid Layout (display: grid).
- Создание сетки: grid-template-columns.
- Создание сетки: grid-template-rows.
- Единица измерения fr.
- Функция repeat().
- Промежутки с gap, row-gap, column-gap.
- Размещение элементов: grid-column.
- Размещение элементов: grid-row.
- Сокращенная запись grid-area.
- Именованные линии и области.
- Свойство grid-template-areas.
- Автоматическое размещение элементов.
- Автоматические треки (grid-auto-rows, grid-auto-columns).
- Управление потоком элементов (grid-auto-flow).
- Выравнивание в Grid: justify-items и align-items.
- Выравнивание в Grid: justify-content и align-content.
- Выравнивание отдельного элемента (justify-self, align-self).
- Сложные макеты на Grid.
- Комбинирование Grid и Flexbox.
- Модуль 8: Трансформации и переходы
- Трансформации: translate.
- Трансформации: scale.
- Трансформации: rotate.
- Трансформации: skew.
- Комбинирование трансформаций.
- Точка трансформации с transform-origin.
- 3D-трансформации и перспектива.
- Переходы с transition-property.
- Длительность перехода с transition-duration.
- Функции плавности с transition-timing-function.
- Задержка с transition-delay.
- Сокращенное свойство transition.
- Переходы для нескольких свойств.
- Создание интерактивных элементов с переходами.
- Производительность трансформаций и переходов.
- Модуль 9: Анимации
- Создание keyframes.
- Свойство animation-name.
- Свойство animation-duration.
- Свойство animation-timing-function.
- Свойство animation-delay.
- Свойство animation-iteration-count.
- Свойство animation-direction.
- Свойство animation-fill-mode.
- Свойство animation-play-state.
- Сокращенное свойство animation.
- Множественные анимации.
- Создание сложных анимаций.
- Анимации с использованием переменных.
- Оптимизация производительности анимаций.
- Анимации и доступность.
- Модуль 10: Адаптивный дизайн
- Относительные единицы измерения (%, em, rem).
- Единицы vh и vw.
- Медиа-запросы: основы.
- Медиа-запросы: max-width и min-width.
- Медиа-запросы: ориентация устройства.
- Медиа-запросы: типы устройств и медиа-функции.
- Mobile-first подход.
- Адаптивные изображения.
- Элемент picture и атрибуты srcset/sizes.
- Адаптивная типографика.
- Адаптивная навигация.
- Адаптивные таблицы.
- Адаптивные формы.
- Отзывчивые медиа (видео, iframe).
- Тестирование адаптивности.
- Модуль 11: Формы и CSS
- Базовая стилизация input и button.
- Стилизация textarea.
- Стилизация состояний форм (:focus, :valid, :invalid).
- Стилизация placeholder.
- Кастомизация radio и checkbox с помощью CSS.
- Стилизация select и option.
- Создание кастомных выпадающих списков.
- Стилизация range input.
- Стилизация file input.
- Валидация форм и стилизация сообщений об ошибках.
- Модуль 12: Современные возможности CSS
- Переменные CSS (Custom Properties).
- Область видимости переменных.
- Функция calc().
- Свойство object-fit для изображений.
- Свойство object-position.
- Scroll Snap.
- Контейнерные запросы (Container Queries).
- Подсеточные элементы (Subgrid).
- Логические свойства (logical properties).
- CSS Houdini (введение).
- Feature Queries (@supports).
- Новые селекторы CSS (is(), where(), has()).
- Модуль 13: Практические проекты
- Создание адаптивной навигационной панели.
- Создание карточек товаров.
- Создание слайдера изображений на CSS.
- Создание табов.
- Создание дропдаун-меню.
- Создание галереи изображений с фильтрами.
- Создание анимированных иконок.
- Создание адаптивного лендинга.
- Создание тёмной темы с CSS-переменными.
- Создание анимированных кнопок.
- Создание анимированных форм.
- Создание сетки изображений с hover-эффектами.
- Создание адаптивного футера.
- Создание макета блога на CSS Grid.
- Создание адаптивного дашборда.
- Создание интерактивной формы с анимациями.
- Создание CSS-арта.
Плавное изменение рамки при фокусе
Сделайте так, чтобы при получении фокуса текстовым полем ввода его рамка плавно меняла цвет. Изначально рамка серая, а при фокусе должна становиться синей. Эффект изменения цвета должен быть анимирован.
body {
padding: 20px;
font-family: sans-serif;
}
.basic-form input[type="text"] {
padding: 10px;
border: 2px solid #ccc;
border-radius: 4px;
font-size: 16px;
width: calc(100% - 24px); /* Учитываем padding и border */
box-sizing: border-box;
/* Добавляем плавный переход для цвета рамки */
input1: border-color 0.3s ease;
}
.basic-form input[type="text"]input2 {
border-color: #007bff;
outline: none; /* Убираем стандартную обводку браузера */
}
<form class="basic-form">
<label for="username">Имя пользователя:</label>
<input type="text" id="username" name="username" placeholder="Введите ваше имя">
</form>
Анимация метки (label) при фокусе
Создайте эффект 'плавающей' метки. Когда поле ввода получает фокус или когда в нем уже есть текст, связанная с ним метка должна плавно переместиться вверх и немного уменьшиться.
body {
padding: 20px;
font-family: sans-serif;
}
.form-group {
position: relative;
margin-bottom: 20px;
}
.form-group input[type="text"] {
padding: 15px 10px 5px 10px;
border: 1px solid #ccc;
border-radius: 4px;
font-size: 16px;
width: calc(100% - 22px);
box-sizing: border-box;
}
.form-group label {
position: absolute;
left: 10px;
top: 12px;
color: #999;
pointer-events: none;
input1: all 0.2s ease-out;
}
/* Стиль для активной метки */
.form-group input[type="text"]:focus + label,
.form-group input[type="text"]:not(input2) + label {
top: 2px;
font-size: 12px;
color: #007bff;
input3: translateY(-50%);
}
<div class="form-group">
<input type="text" id="email" name="email" placeholder=" " required>
<label for="email">Email</label>
</div>
Эффект масштабирования кнопки при наведении
Добавьте интерактивности кнопке отправки формы. При наведении курсора мыши кнопка должна плавно немного увеличиваться в размере.
body {
padding: 20px;
font-family: sans-serif;
}
.basic-form button {
padding: 10px 20px;
font-size: 16px;
color: white;
background-color: #28a745;
border: none;
border-radius: 5px;
cursor: pointer;
display: inline-block; /* Нужно для transform */
input1: transform 0.2s ease-in-out;
}
.basic-form buttoninput2 {
input3: scale(1.1);
}
<form class="basic-form">
<button type="submit">Отправить</button>
</form>
Визуальная обратная связь для валидации полей
Улучшите форму, добавив немедленную визуальную обратную связь о валидности введенных данных. Если данные в поле корректны (например, email введен правильно), рамка должна стать зеленой. Если некорректны — красной. Используйте HTML5 атрибуты для валидации.
body {
padding: 20px;
font-family: sans-serif;
}
.validation-form input[type="email"] {
padding: 10px;
border: 2px solid #ccc;
border-radius: 4px;
font-size: 16px;
width: calc(100% - 24px);
box-sizing: border-box;
input1: border-color 0.3s ease;
}
/* Стиль для невалидного поля */
.validation-form input[type="email"]input2 {
border-color: #dc3545; /* Красный */
outline: none;
}
/* Стиль для валидного поля */
.validation-form input[type="email"]input3 {
border-color: #28a745; /* Зеленый */
outline: none;
}
<form class="validation-form">
<label for="user-email">Email:</label>
<input type="email" id="user-email" name="user-email" required placeholder="name@example.com">
</form>
Анимация появления сообщения об ошибке
Сделайте так, чтобы сообщение об ошибке под полем ввода появлялось плавно, когда поле становится невалидным. Сообщение должно 'выезжать' снизу и становиться видимым.
body {
padding: 20px;
font-family: sans-serif;
}
.form-group-error {
margin-bottom: 10px;
}
.form-group-error input[type="password"] {
display: block;
width: calc(100% - 24px);
padding: 10px;
border: 2px solid #ccc;
border-radius: 4px;
font-size: 16px;
box-sizing: border-box;
margin-bottom: 5px;
}
.error-message {
display: block;
color: #dc3545;
font-size: 14px;
input1: 0;
max-height: 0;
overflow: hidden;
input2: opacity 0.3s ease, max-height 0.3s ease;
/* transform: translateY(-10px); */ /* Можно добавить для эффекта выезда */
}
/* Показываем сообщение, если поле невалидно и было изменено */
.form-group-error input[type="password"]:invalid:not(:placeholder-shown) + input3 {
input4: 1;
max-height: 50px; /* Достаточно для отображения текста */
/* transform: translateY(0); */
}
<div class="form-group-error">
<label for="password">Пароль (мин. 6 символов):</label>
<input type="password" id="password" name="password" required minlength="6">
<span class="error-message">Пароль должен содержать минимум 6 символов.</span>
</div>
Кастомный анимированный чекбокс
Создайте полностью кастомный чекбокс с плавной анимацией отметки при выборе. Стандартный вид чекбокса должен быть скрыт, а вместо него использоваться псевдоэлемент.
body {
padding: 20px;
font-family: sans-serif;
}
.custom-checkbox-container {
position: relative;
padding-left: 30px; /* Место для кастомного чекбокса */
cursor: pointer;
display: inline-block;
}
.custom-checkbox-container input[type="checkbox"] {
position: absolute;
input1: 0;
cursor: pointer;
height: 0;
width: 0;
}
/* Создаем кастомный квадрат */
.custom-checkbox-container label::before {
content: "";
position: absolute;
left: 0;
top: 0;
width: 20px;
height: 20px;
border: 2px solid #6c757d;
background-color: white;
border-radius: 3px;
transition: background-color 0.2s ease, border-color 0.2s ease;
}
/* Стилизуем квадрат при наведении */
.custom-checkbox-container:hover input[type="checkbox"] ~ label::before {
border-color: #007bff;
}
/* Стилизуем квадрат при выборе */
.custom-checkbox-container input[type="checkbox"]:checked ~ label::before {
background-color: #007bff;
border-color: #007bff;
}
/* Создаем галочку (скрыта по умолчанию) */
.custom-checkbox-container label::after {
content: "";
position: absolute;
left: 7px;
top: 3px;
width: 6px;
height: 12px;
border: solid white;
border-width: 0 3px 3px 0;
input2: rotate(45deg) scale(0);
input3: transform 0.2s ease-in-out;
}
/* Показываем галочку при выборе */
.custom-checkbox-container input[type="checkbox"]input4 ~ label::after {
transform: rotate(45deg) scale(1);
}
<div class="custom-checkbox-container">
<input type="checkbox" id="agree" name="agree">
<label for="agree">Согласен с условиями</label>
</div>
Анимация загрузки на кнопке
Создайте эффект загрузки на кнопке отправки. При 'нажатии' (используем `:active` для имитации) текст кнопки должен исчезнуть, а на его месте появиться анимированный индикатор загрузки (спиннер).
body {
padding: 20px;
font-family: sans-serif;
}
/* Базовые стили кнопки */
.btn-loading {
position: relative;
padding: 10px 20px;
font-size: 16px;
color: white;
background-color: #007bff;
border: none;
border-radius: 5px;
cursor: pointer;
transition: color 0.2s ease;
min-width: 120px; /* Чтобы кнопка не сжималась */
text-align: center;
}
/* Спиннер (скрыт по умолчанию) */
.btn-loading::after {
content: '';
position: absolute;
width: 16px;
height: 16px;
top: 50%;
left: 50%;
margin-top: -8px;
margin-left: -8px;
border: 2px solid transparent;
border-top-color: white;
border-radius: 50%;
input1: 0; /* Скрываем спиннер */
input2: none; /* Анимация пока не нужна */
}
/* Состояние 'загрузки' при нажатии */
.btn-loadinginput3 {
color: transparent; /* Скрываем текст */
}
.btn-loading:active::after {
opacity: 1; /* Показываем спиннер */
input4: spin 1s linear infinite; /* Запускаем анимацию */
}
/* Анимация вращения */
@keyframes spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
<form class="basic-form">
<button type="submit" class="btn-loading">Отправить</button>
</form>