0Pricing
CSS Academy · Урок

Шаблоны выпадающих списков и всплывающих окон

Создавайте доступные выпадающие меню и всплывающие окна с помощью позиционирования CSS и API Popover.

«Шаблоны выпадающих списков и всплывающих окон» — бесплатный урок CSS Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения CSS Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс CSS Academy содержит 4 уроков всего.

API всплывающих окон

API всплывающих окон HTML (Chrome 114+, широко поддерживается) предоставляет декларативное отображение и скрытие: атрибут popover у целевого элемента и popovertarget у кнопки-триггера. Для базового открытия и закрытия JavaScript не нужен; поддерживаются также закрытие при щелчке вне элемента и обработка клавиши Esc.

Стилизация всплывающих окон

Находите элементы всплывающих окон с помощью [popover] или :popover-open. Для затемнения фона доступен псевдоэлемент ::backdrop. Всплывающие окна отображаются в верхнем слое, как диалоги, поэтому проблемы с наложением z-index не возникают.

Позиционирование выпадающего меню с помощью якорей

Якорное позиционирование CSS размещает всплывающее окно относительно кнопки-триггера без JavaScript: задайте anchor-name: --btn у триггера, position-anchor: --btn у всплывающего окна, а затем top: anchor(bottom); left: anchor(left), чтобы выровнять его под триггером.

Резервный вариант с абсолютным позиционированием

Без якорного позиционирования используйте обёртку-родителя с заданным позиционированием: position: relative для контейнера и position: absolute; top: 100%; left: 0 для выпадающего меню. Этот вариант работает в разных браузерах, но требует, чтобы триггер и выпадающее меню были соседними элементами в контейнере с позиционированием.

CSS выпадающего меню

Стилизуйте список выпадающего меню так: position: absolute; background: var(--color-surface); box-shadow: var(--shadow-md); border-radius: var(--radius-md); padding: var(--spacing-1) 0; min-width: 200px. Для пунктов меню используйте внутренние отступы, фон при наведении и отображение на всю ширину.

Анимация

Анимируйте открытие и закрытие всплывающего окна с помощью @starting-style для появления и transition-behavior: allow-discrete для анимации изменения свойства display. Это позволяет создавать только средствами CSS анимации появления и выхода, связанные с состоянием открытого или закрытого всплывающего окна.

Доступность с клавиатуры

Выпадающие меню должны поддерживать навигацию с клавиатуры: клавиши со стрелками перемещают фокус между пунктами, Enter или пробел активируют сфокусированный пункт, а Esc закрывает меню и возвращает фокус на триггер. API всплывающих окон автоматически обрабатывает Esc; навигация стрелками требует обработки событий JavaScript.

ARIA для пользовательских выпадающих меню

Для пользовательского выпадающего меню, не использующего API всплывающих окон, добавьте aria-haspopup="listbox" и aria-expanded к триггеру, role="listbox" к списку, а role="option" и aria-selected — к каждому пункту. Программы чтения с экрана озвучивают состояние раскрытия и количество пунктов.

Переполнение и столкновение с областью просмотра

Выпадающее меню, расположенное под триггером, может выйти за нижнюю границу области просмотра. Обнаружьте это с помощью IntersectionObserver или getBoundingClientRect и переместите меню над триггером. Якорное позиционирование CSS обрабатывает это с помощью position-try-fallbacks.

Многоуровневые выпадающие меню

Вложенные выпадающие меню, то есть подменю, усложняют реализацию. Размещайте подменю справа от родительских пунктов. Добавьте задержку перед скрытием при уходе указателя мыши, используя задержку перехода CSS или таймер в JS, чтобы подменю не закрывались при диагональном перемещении мыши.

Особенности сенсорных устройств

Выпадающие меню, открывающиеся при наведении, не работают на сенсорных устройствах: состояние наведения там отсутствует. Повсеместно используйте нажатие или касание как триггер. Закрытие при касании вне элемента можно реализовать через автоматическое закрытие API всплывающих окон или обработчик щелчка документа, закрывающий открытые выпадающие меню.

Проверка знаний

Что API всплывающих окон предоставляет автоматически, хотя раньше для этого требовался пользовательский JavaScript?

Итоги

API всплывающих окон и якорное позиционирование CSS вместе позволяют создавать декларативные выпадающие меню и всплывающие окна с минимальным использованием JavaScript. Для более широкой поддержки браузеров надёжно работают шаблоны с позиционируемыми контейнерами. Доступность с клавиатуры, атрибуты ARIA, обработка столкновений с областью просмотра и поддержка сенсорных устройств завершают готовые к использованию компоненты выпадающих меню.

Часто задаваемые вопросы

Урок «Шаблоны выпадающих списков и всплывающих окон» бесплатный?

Да — полный текст урока «Шаблоны выпадающих списков и всплывающих окон» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс CSS Academy, подпишись на CoddyKit PRO. Курс CSS Academy содержит 4 уроков всего.

Чему я научусь в уроке «Шаблоны выпадающих списков и всплывающих окон»?

Создавайте доступные выпадающие меню и всплывающие окна с помощью позиционирования CSS и API Popover. Ты практикуешь CSS Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать CSS Academy?

Предыдущий опыт не требуется. CSS Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Шаблоны выпадающих списков и всплывающих окон»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке CSS Academy?

Да. Каждый урок CSS Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Компонент карточки с пользовательскими свойствами CSS
  2. Стилизация модальных окон и диалогов
  3. Шаблоны выпадающих списков и всплывающих окон
  4. Компонент вкладок: приём :checked и JS
← Назад к CSS Academy