Стилизация модальных окон и диалогов
Стилизуйте встроенные элементы диалогов HTML и пользовательские модальные окна с фоном, позиционированием и анимацией.
«Стилизация модальных окон и диалогов» — бесплатный урок CSS Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения CSS Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс CSS Academy содержит 4 уроков всего.
Нативный элемент диалога
Элемент HTML <dialog> предоставляет встроенное поведение модального окна: удержание фокуса, закрытие клавишей Esc и программный интерфейс showModal() / close(). Стилизуйте его с помощью CSS вместо самостоятельного создания всей структуры модального окна.
Стилизация подложки
Псевдоэлемент ::backdrop стилизует подложку за открытым элементом <dialog>. Задайте полупрозрачный фон: dialog::backdrop { background: rgba(0,0,0,0.5); backdrop-filter: blur(4px); }. Обёртка div не требуется.
Макет диалога
Центрируйте диалоги с помощью CSS: dialog { margin: auto; max-width: min(90vw, 640px); max-height: 90vh; overflow-y: auto; }. Автоматический внешний отступ диалога размещает его по центру области просмотра без позиционирования с помощью JS.
Прокрутка и переполнение
Задайте overflow-y: auto для самого диалога, чтобы обрабатывать длинное содержимое. При открытии модального окна задайте overflow: hidden для body, чтобы запретить прокрутку фона; добавляйте и удаляйте класс с помощью JavaScript, переключая это состояние.
Анимация с помощью CSS
Анимируйте появление диалога с помощью @starting-style (Chrome 117+) — это позволяет создавать анимации появления только средствами CSS, без JavaScript. Для более широкой поддержки добавьте с помощью JavaScript класс открытого состояния и примените переходы к преобразованию и прозрачности: сдвигайте диалог вверх от смещения на 20 пикселей по оси Y к нулевому смещению.
Задача: анимация закрытия
Анимировать закрытие диалога непросто: при закрытии он скрывается немедленно. Решения: используйте API всплывающих окон, который изначально поддерживает анимации закрытия, либо перехватите закрытие с помощью JavaScript, примените класс анимации выхода, а после её завершения вызовите метод закрытия.
Управление порядком наложения
Открытые диалоги отображаются поверх всего остального содержимого страницы. Избегайте конфликтов при управлении порядком наложения, используя встроенный контекст наложения элемента диалога: он отображается в верхнем слое выше всех значений CSS z-index, поэтому задавать z-index самому диалогу не требуется.
Адаптивный диалог
На мобильных устройствах выдвигайте диалоги снизу в виде листа: dialog { margin: auto auto 0; width: 100%; border-radius: 16px 16px 0 0; max-height: 90vh; }. На настольных устройствах центрируйте их как обычное модальное окно с помощью автоматических внешних отступов.
Управление фокусом
Нативный элемент диалога при открытии автоматически переводит фокус на первый доступный для фокусировки элемент внутри. Обеспечьте логичный порядок перехода по элементам клавишей Tab в диалоге. Добавьте кнопку закрытия, которая после закрытия диалога возвращает фокус на элемент, открывший его, чтобы сохранить правильную последовательность клавиатурной навигации.
Атрибуты доступности
Добавьте aria-labelledby со ссылкой на заголовок диалога и aria-describedby со ссылкой на его описание. Для <dialog> роль диалога задаётся неявно. Программы чтения с экрана озвучивают эти метки при переходе фокуса в диалог.
Шаблон диалога подтверждения
Диалогу подтверждения необходимы: понятный заголовок-вопрос, краткое описание последствий, кнопка опасного действия (красная, выровненная по правому краю) и кнопка отмены (выровненная по левому краю или вторичная). Используйте autofocus для кнопки отмены, чтобы безопасный вариант был действием по умолчанию при навигации с клавиатуры.
Проверка знаний
Какое преимущество даёт использование нативного элемента <dialog> по сравнению с модальным окном на основе пользовательского div?
Итоги
Нативный элемент диалога с подложкой, центрированием с помощью автоматических внешних отступов, управлением переполнением, CSS-анимациями появления и управлением фокусом предоставляет полностью доступный шаблон модального окна, управляемый CSS. Адаптивные листы на мобильных устройствах и правильные атрибуты ARIA завершают готовый к использованию компонент диалога.
Часто задаваемые вопросы
Урок «Стилизация модальных окон и диалогов» бесплатный?
Да — полный текст урока «Стилизация модальных окон и диалогов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс CSS Academy, подпишись на CoddyKit PRO. Курс CSS Academy содержит 4 уроков всего.
Чему я научусь в уроке «Стилизация модальных окон и диалогов»?
Стилизуйте встроенные элементы диалогов HTML и пользовательские модальные окна с фоном, позиционированием и анимацией. Ты практикуешь CSS Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать CSS Academy?
Предыдущий опыт не требуется. CSS Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Стилизация модальных окон и диалогов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке CSS Academy?
Да. Каждый урок CSS Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Компонент карточки с пользовательскими свойствами CSS
- Стилизация модальных окон и диалогов
- Шаблоны выпадающих списков и всплывающих окон
- Компонент вкладок: приём :checked и JS