Patrones de dropdown y popover
Cree menús desplegables y popovers accesibles mediante posicionamiento CSS y la API Popover.
Patrones de dropdown y popover es una lección gratuita de CSS Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de CSS Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de CSS Academy incluye 4 lecciones en total.
La API de Popover
La API de Popover de HTML (Chrome 114+, ampliamente compatible) proporciona un comportamiento declarativo de mostrar y ocultar: el atributo popover en el destino y popovertarget en el botón activador. No se necesita JavaScript para la apertura y el cierre básicos, incluido el light dismiss (clic fuera para cerrar) y la gestión de la tecla Escape.
Estilizar los popovers
Seleccione los elementos popover con [popover] o :popover-open. El pseudoelemento ::backdrop está disponible para oscurecer el fondo. Los popovers se muestran en la top layer, igual que los dialogs, por lo que no hay problemas de apilamiento con z-index.
Posicionamiento de dropdowns con Anchor Positioning
CSS Anchor Positioning (Chrome 125+) coloca un popover en relación con su activador sin JavaScript: anchor-name: --btn en el activador, position-anchor: --btn en el popover y después top: anchor(bottom); left: anchor(left) para alinearlo debajo del activador.
Alternativa con position: absolute
Sin Anchor Positioning, use un contenedor padre con posicionamiento: position: relative en el contenedor y position: absolute; top: 100%; left: 0 en el dropdown. Funciona en todos los navegadores, pero requiere que el activador y el dropdown sean elementos hermanos dentro de un contenedor con posicionamiento.
CSS para menús dropdown
Estilice la lista del dropdown como position: absolute; background: var(--color-surface); box-shadow: var(--shadow-md); border-radius: var(--radius-md); padding: var(--spacing-1) 0; min-width: 200px. Los elementos del menú usan padding, un fondo para hover y un display de ancho completo.
Animación
Anime la apertura y el cierre de los popovers usando @starting-style para la entrada y transition-behavior: allow-discrete para animar el cambio de la propiedad display. Esto permite crear animaciones de entrada y salida solo con CSS vinculadas al estado abierto o cerrado del popover.
Accesibilidad del teclado
Los menús dropdown deben admitir el teclado: las teclas de flecha permiten desplazarse por los elementos del menú, Enter o Espacio activa el elemento enfocado y Escape cierra el menú y devuelve el foco al activador. La API de Popover gestiona Escape automáticamente; la navegación con las teclas de flecha requiere gestionar eventos con JavaScript.
ARIA para dropdowns personalizados
Dropdown personalizado (sin usar la API de popover): añada aria-haspopup="listbox" y aria-expanded al activador, role="listbox" a la lista y role="option" y aria-selected a cada elemento. Los lectores de pantalla anuncian el estado expandido y el número de elementos.
Colisión con el overflow y la ventana gráfica
Un dropdown colocado debajo de su activador puede desbordar la ventana gráfica por la parte inferior. Detecte esta situación con IntersectionObserver o getBoundingClientRect y cambie el dropdown a la parte superior del activador. CSS Anchor Positioning gestiona esto mediante position-try-fallbacks.
Dropdowns multinivel
Los dropdowns anidados (submenús) añaden complejidad. Coloque los submenús a la derecha de sus elementos principales. Añada un retraso antes de ocultarlos al salir con el ratón (mediante transition-delay de CSS o un timeout de JS) para evitar que los submenús se cierren durante el movimiento diagonal del ratón.
Consideraciones para dispositivos táctiles
Los dropdowns activados mediante hover fallan en dispositivos táctiles, ya que no existe un estado hover. Use activadores de clic o toque de forma universal. El cierre al tocar fuera funciona mediante el light dismiss de la API de popover o un listener de clic en document que cierre los dropdowns abiertos.
Comprobación de conocimientos
¿Qué proporciona automáticamente la API de Popover que antes requería JavaScript personalizado?
Resumen
La API de Popover y CSS Anchor Positioning permiten crear juntos patrones declarativos de dropdowns y popovers con un uso mínimo de JavaScript. Para ofrecer una compatibilidad más amplia entre navegadores, los patrones basados en contenedores con posicionamiento funcionan de forma fiable. La accesibilidad del teclado, los atributos ARIA, la gestión de colisiones con la ventana gráfica y la compatibilidad con dispositivos táctiles completan componentes dropdown listos para producción.
Preguntas frecuentes
¿La lección «Patrones de dropdown y popover» es gratis?
Sí — el texto completo de «Patrones de dropdown y popover» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de CSS Academy, actualiza a CoddyKit PRO. El curso de CSS Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Patrones de dropdown y popover»?
Cree menús desplegables y popovers accesibles mediante posicionamiento CSS y la API Popover. Practicas CSS Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar CSS Academy?
No se requiere experiencia previa. CSS Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Patrones de dropdown y popover»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de CSS Academy?
Sí. Cada lección de CSS Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Componente de tarjeta con propiedades personalizadas de CSS
- Estilos de modales y diálogos
- Patrones de dropdown y popover
- Componente de pestañas con el hack :checked frente a JS