Estructura básica de dropdowns
Los dropdowns representan uno de los patrones de interfaz más versátiles en Bootstrap, permitiendo mostrar listas de opciones, acciones o enlaces de forma desplegable sin ocupar espacio permanente en la página. Este componente se basa en una arquitectura de tres elementos fundamentales que trabajan en conjunto para crear la funcionalidad desplegable.
Anatomía del dropdown
Todo dropdown en Bootstrap requiere una estructura HTML específica que combina un elemento trigger (disparador) con un menú contenedor. La clase principal .dropdown
actúa como el contenedor padre que establece el contexto posicional para el menú desplegable:
<div class="dropdown">
<!-- Contenido del dropdown -->
</div>
Este contenedor .dropdown
es esencial para el correcto funcionamiento ya que establece la posición relativa necesaria para que el menú se posicione correctamente respecto al botón trigger.
El elemento trigger con dropdown-toggle
El botón disparador utiliza la clase .dropdown-toggle
junto con atributos de datos específicos para activar la funcionalidad desplegable. Este elemento puede ser un botón tradicional, un enlace, o cualquier elemento interactivo:
<button class="btn btn-secondary dropdown-toggle" type="button"
data-bs-toggle="dropdown" aria-expanded="false">
Opciones de usuario
</button>
La clase .dropdown-toggle
añade automáticamente el icono de flecha descendente (caret) que indica visualmente al usuario que el elemento es desplegable. El atributo data-bs-toggle="dropdown"
es fundamental ya que indica a Bootstrap que este elemento debe activar la funcionalidad de dropdown.
El menú desplegable con dropdown-menu
El contenedor del menú utiliza la clase .dropdown-menu
y contiene todos los elementos que aparecerán cuando se active el dropdown. Este menú permanece oculto por defecto y se muestra al interactuar con el trigger:
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Perfil</a></li>
<li><a class="dropdown-item" href="#">Configuración</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">Cerrar sesión</a></li>
</ul>
Los elementos individuales del menú utilizan la clase .dropdown-item
que proporciona el espaciado, colores y efectos hover apropiados. Esta clase puede aplicarse a enlaces (<a>
), botones (<button>
) o cualquier elemento interactivo dentro del menú.
Ejemplo completo básico
Un dropdown completamente funcional combina todos estos elementos en una estructura cohesiva:
<div class="dropdown">
<button class="btn btn-primary dropdown-toggle" type="button"
data-bs-toggle="dropdown" aria-expanded="false">
Acciones
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Editar</a></li>
<li><a class="dropdown-item" href="#">Duplicar</a></li>
<li><a class="dropdown-item" href="#">Eliminar</a></li>
</ul>
</div>
Elementos de organización del menú
Bootstrap proporciona elementos adicionales para organizar mejor el contenido del menú desplegable:
Divisores con .dropdown-divider
crean separaciones visuales entre grupos de elementos:
<li><hr class="dropdown-divider"></li>
Headers con .dropdown-header
permiten añadir títulos descriptivos que no son interactivos:
<li><h6 class="dropdown-header">Acciones principales</h6></li>
<li><a class="dropdown-item" href="#">Editar</a></li>
<li><a class="dropdown-item" href="#">Guardar</a></li>
<li><hr class="dropdown-divider"></li>
<li><h6 class="dropdown-header">Acciones peligrosas</h6></li>
<li><a class="dropdown-item text-danger" href="#">Eliminar</a></li>
Estados de los elementos dropdown
Los elementos .dropdown-item
pueden presentar diferentes estados visuales utilizando clases adicionales:
Estado activo con .active
indica el elemento actualmente seleccionado:
<li><a class="dropdown-item active" href="#">Opción actual</a></li>
Estado deshabilitado con .disabled
muestra elementos no disponibles:
<li><a class="dropdown-item disabled" href="#">Opción no disponible</a></li>
Consideraciones de accesibilidad
Bootstrap incluye automáticamente atributos de accesibilidad esenciales. El atributo aria-expanded="false"
en el trigger se actualiza automáticamente para reflejar el estado del dropdown, y la funcionalidad de teclado (tecla Escape para cerrar, navegación con flechas) está integrada nativamente en el componente.
La estructura semántica utilizando listas <ul>
y elementos <li>
proporciona un contexto claro para lectores de pantalla, aunque también es posible utilizar elementos <div>
si la semántica de lista no es apropiada para el contenido específico.
Variaciones de estilo y direcciones
Los dropdowns de Bootstrap ofrecen flexibilidad total en cuanto a su posicionamiento y apariencia visual, permitiendo adaptarse a cualquier contexto de diseño mediante clases específicas que modifican tanto la dirección de despliegue como el estilo visual del componente.
Direcciones de despliegue
Bootstrap proporciona cuatro direcciones principales para el despliegue de dropdowns, cada una controlada por una clase específica que reemplaza la clase base .dropdown
:
Dropdown hacia arriba (Dropup) utiliza la clase .dropup
para hacer que el menú aparezca encima del trigger, útil cuando el botón está cerca del borde inferior de la pantalla:
<div class="dropup">
<button class="btn btn-secondary dropdown-toggle" type="button"
data-bs-toggle="dropdown" aria-expanded="false">
Dropup
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Acción</a></li>
<li><a class="dropdown-item" href="#">Otra acción</a></li>
</ul>
</div>
Dropdown hacia la derecha (Dropend) emplea .dropend
para desplegar el menú horizontalmente hacia la derecha del trigger:
<div class="dropend">
<button class="btn btn-secondary dropdown-toggle" type="button"
data-bs-toggle="dropdown" aria-expanded="false">
Dropend
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Acción</a></li>
<li><a class="dropdown-item" href="#">Otra acción</a></li>
</ul>
</div>
Dropdown hacia la izquierda (Dropstart) utiliza .dropstart
para que el menú aparezca hacia la izquierda, requiriendo una estructura ligeramente diferente donde el menú precede al botón en el HTML:
<div class="dropstart">
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Acción</a></li>
<li><a class="dropdown-item" href="#">Otra acción</a></li>
</ul>
<button class="btn btn-secondary dropdown-toggle" type="button"
data-bs-toggle="dropdown" aria-expanded="false">
Dropstart
</button>
</div>
Alineación del menú desplegable
Independientemente de la dirección principal, Bootstrap permite controlar la alineación del menú respecto al trigger usando clases adicionales en .dropdown-menu
:
Alineación a la derecha con .dropdown-menu-end
hace que el menú se alinee por su borde derecho con el trigger:
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button"
data-bs-toggle="dropdown" aria-expanded="false">
Alineado a la derecha
</button>
<ul class="dropdown-menu dropdown-menu-end">
<li><a class="dropdown-item" href="#">Perfil</a></li>
<li><a class="dropdown-item" href="#">Configuración</a></li>
<li><a class="dropdown-item" href="#">Cerrar sesión</a></li>
</ul>
</div>
Alineación responsive
Las alineaciones pueden ser responsive utilizando las clases con breakpoints, permitiendo diferentes comportamientos según el tamaño de pantalla:
<ul class="dropdown-menu dropdown-menu-sm-end dropdown-menu-lg-start">
<li><a class="dropdown-item" href="#">Elemento 1</a></li>
<li><a class="dropdown-item" href="#">Elemento 2</a></li>
</ul>
Esta configuración alinea el menú a la derecha en pantallas pequeñas (sm) y medianas, pero lo alinea a la izquierda en pantallas grandes (lg).
Variaciones de estilo del menú
Bootstrap ofrece personalización visual del dropdown-menu mediante clases adicionales:
Dropdown menu oscuro con .dropdown-menu-dark
aplica una paleta de colores oscura al menú completo:
<ul class="dropdown-menu dropdown-menu-dark">
<li><a class="dropdown-item" href="#">Acción</a></li>
<li><a class="dropdown-item" href="#">Otra acción</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">Algo más</a></li>
</ul>
Esta clase ajusta automáticamente los colores de fondo, texto, divisores y efectos hover para mantener la coherencia visual en interfaces oscuras.
Botones split con dropdown
Los botones divididos combinan una acción principal con un dropdown secundario, utilizando dos elementos button dentro del mismo contenedor:
<div class="btn-group">
<button type="button" class="btn btn-primary">Acción principal</button>
<button type="button" class="btn btn-primary dropdown-toggle dropdown-toggle-split"
data-bs-toggle="dropdown" aria-expanded="false">
<span class="visually-hidden">Toggle Dropdown</span>
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Opción secundaria</a></li>
<li><a class="dropdown-item" href="#">Otra opción</a></li>
</ul>
</div>
La clase .dropdown-toggle-split
reduce el espaciado del botón dropdown y .visually-hidden
proporciona contexto para tecnologías asistivas sin afectar la presentación visual.
Combinaciones prácticas
Las variaciones pueden combinarse para crear soluciones específicas según el contexto:
<!-- Dropup con alineación a la derecha y estilo oscuro -->
<div class="dropup">
<button class="btn btn-outline-light dropdown-toggle" type="button"
data-bs-toggle="dropdown" aria-expanded="false">
Menú de usuario
</button>
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-dark">
<li><h6 class="dropdown-header">Mi cuenta</h6></li>
<li><a class="dropdown-item" href="#">Ver perfil</a></li>
<li><a class="dropdown-item" href="#">Editar datos</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">Cerrar sesión</a></li>
</ul>
</div>
Consideraciones de posicionamiento automático
Bootstrap incluye detección automática de colisiones que ajusta la posición del dropdown cuando no hay suficiente espacio en la dirección especificada. Por ejemplo, un .dropup
cerca del borde superior se convertirá automáticamente en un dropdown normal, y un .dropend
cerca del borde derecho se ajustará hacia la izquierda.
Esta funcionalidad garantiza la usabilidad sin requerir configuración adicional, manteniendo siempre el menú visible y accesible independientemente de la posición del trigger en la ventana del navegador.
Dropdowns con botones y navegación
La integración de dropdowns con sistemas de botones y elementos de navegación representa uno de los casos de uso más comunes y versátiles del componente, permitiendo crear interfaces más ricas y funcionales sin comprometer la limpieza visual de la página.
Dropdowns en grupos de botones
Los grupos de botones proporcionan el contexto perfecto para incorporar dropdowns como parte de toolbars o barras de herramientas. La clase .btn-group
permite agrupar múltiples botones junto con dropdowns manteniendo la cohesión visual:
<div class="btn-group" role="group">
<button type="button" class="btn btn-primary">Guardar</button>
<button type="button" class="btn btn-primary">Editar</button>
<div class="dropdown">
<button class="btn btn-primary dropdown-toggle" type="button"
data-bs-toggle="dropdown" aria-expanded="false">
Más acciones
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Duplicar</a></li>
<li><a class="dropdown-item" href="#">Exportar</a></li>
<li><a class="dropdown-item" href="#">Compartir</a></li>
</ul>
</div>
</div>
Esta configuración es especialmente útil para barras de herramientas donde las acciones principales están visibles mientras que las secundarias se agrupan en el dropdown, optimizando el uso del espacio disponible.
Dropdowns con diferentes estilos de botones
Los dropdowns pueden utilizar cualquier variante de botón de Bootstrap, adaptándose al contexto visual de la interfaz:
<!-- Dropdown con botón outline -->
<div class="dropdown">
<button class="btn btn-outline-success dropdown-toggle" type="button"
data-bs-toggle="dropdown" aria-expanded="false">
Estado del proyecto
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">En progreso</a></li>
<li><a class="dropdown-item" href="#">Completado</a></li>
<li><a class="dropdown-item" href="#">En pausa</a></li>
<li><a class="dropdown-item" href="#">Cancelado</a></li>
</ul>
</div>
<!-- Dropdown con botón pequeño -->
<div class="dropdown">
<button class="btn btn-sm btn-secondary dropdown-toggle" type="button"
data-bs-toggle="dropdown" aria-expanded="false">
Filtros
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Por fecha</a></li>
<li><a class="dropdown-item" href="#">Por categoría</a></li>
<li><a class="dropdown-item" href="#">Por autor</a></li>
</ul>
</div>
Dropdowns en navegación con navs
La integración con elementos nav permite crear menús de navegación jerárquicos donde algunos elementos contienen subopciones. Los dropdowns se incorporan naturalmente dentro de la estructura .nav
:
<ul class="nav nav-pills">
<li class="nav-item">
<a class="nav-link active" href="#">Inicio</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Productos</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button"
data-bs-toggle="dropdown" aria-expanded="false">
Servicios
</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Consultoría</a></li>
<li><a class="dropdown-item" href="#">Soporte técnico</a></li>
<li><a class="dropdown-item" href="#">Formación</a></li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Contacto</a>
</li>
</ul>
En este contexto, la clase .nav-item
se combina con .dropdown
para crear un elemento de navegación desplegable que mantiene la coherencia visual con el resto de la navegación.
Dropdowns en navbars
Los navbars representan el caso más común para dropdowns de navegación, especialmente útiles para menús de usuario, configuraciones o secciones con múltiples subsecciones:
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container">
<a class="navbar-brand" href="#">Mi Sitio</a>
<div class="navbar-nav ms-auto">
<div class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button"
data-bs-toggle="dropdown" aria-expanded="false">
Mi cuenta
</a>
<ul class="dropdown-menu dropdown-menu-end">
<li><a class="dropdown-item" href="#">Ver perfil</a></li>
<li><a class="dropdown-item" href="#">Configuración</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">Cerrar sesión</a></li>
</ul>
</div>
</div>
</div>
</nav>
La clase .dropdown-menu-end
asegura que el menú se alinee correctamente con el borde derecho del navbar, especialmente importante cuando el dropdown está posicionado en el extremo derecho de la barra de navegación.
Dropdowns múltiples en navbar
Un navbar puede contener múltiples dropdowns para organizar diferentes categorías de navegación:
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div class="container">
<a class="navbar-brand" href="#">Dashboard</a>
<div class="navbar-nav">
<div class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button"
data-bs-toggle="dropdown" aria-expanded="false">
Gestión
</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Usuarios</a></li>
<li><a class="dropdown-item" href="#">Productos</a></li>
<li><a class="dropdown-item" href="#">Categorías</a></li>
</ul>
</div>
<div class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button"
data-bs-toggle="dropdown" aria-expanded="false">
Informes
</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Ventas</a></li>
<li><a class="dropdown-item" href="#">Inventario</a></li>
<li><a class="dropdown-item" href="#">Usuarios activos</a></li>
</ul>
</div>
</div>
</div>
</nav>
Dropdowns como selectores de contexto
Los dropdowns pueden funcionar como selectores de contexto en interfaces administrativas, permitiendo al usuario cambiar entre diferentes vistas o filtros:
<div class="d-flex align-items-center mb-3">
<span class="me-2">Ver datos de:</span>
<div class="dropdown">
<button class="btn btn-outline-primary dropdown-toggle" type="button"
data-bs-toggle="dropdown" aria-expanded="false">
Este mes
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item active" href="#">Este mes</a></li>
<li><a class="dropdown-item" href="#">Último trimestre</a></li>
<li><a class="dropdown-item" href="#">Este año</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">Personalizado</a></li>
</ul>
</div>
</div>
Patrones de uso con iconos
La combinación con iconos mejora significativamente la usabilidad y comprensión de los dropdowns en contextos de navegación:
<div class="dropdown">
<button class="btn btn-light dropdown-toggle" type="button"
data-bs-toggle="dropdown" aria-expanded="false">
⚙️ Configuración
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">🔔 Notificaciones</a></li>
<li><a class="dropdown-item" href="#">🔒 Privacidad</a></li>
<li><a class="dropdown-item" href="#">🎨 Apariencia</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">❓ Ayuda</a></li>
</ul>
</div>
Dropdowns en toolbars responsivas
Para interfaces que deben adaptarse a diferentes tamaños de pantalla, los dropdowns pueden agrupar acciones que normalmente estarían visibles en pantallas grandes:
<div class="d-flex justify-content-between align-items-center">
<h2>Lista de productos</h2>
<!-- Visible en pantallas grandes -->
<div class="d-none d-md-flex">
<button class="btn btn-success me-2">Nuevo producto</button>
<button class="btn btn-outline-primary me-2">Importar</button>
<button class="btn btn-outline-secondary">Exportar</button>
</div>
<!-- Visible en pantallas pequeñas -->
<div class="dropdown d-md-none">
<button class="btn btn-primary dropdown-toggle" type="button"
data-bs-toggle="dropdown" aria-expanded="false">
Acciones
</button>
<ul class="dropdown-menu dropdown-menu-end">
<li><a class="dropdown-item" href="#">Nuevo producto</a></li>
<li><a class="dropdown-item" href="#">Importar</a></li>
<li><a class="dropdown-item" href="#">Exportar</a></li>
</ul>
</div>
</div>
Consideraciones de navegación por teclado
Los dropdowns integrados en navegación mantienen automáticamente la funcionalidad de teclado estándar: las teclas de flecha permiten navegar entre elementos del menú, Enter activa el enlace seleccionado, y Escape cierra el dropdown, proporcionando una experiencia accesible sin configuración adicional.
La integración natural de dropdowns con sistemas de botones y navegación permite crear interfaces más sofisticadas mientras se mantiene la simplicidad de implementación característica de Bootstrap.
Fuentes y referencias
Documentación oficial y recursos externos para profundizar en Bootstrap
Documentación oficial de Bootstrap
Alan Sastre
Ingeniero de Software y formador, CEO en CertiDevs
Ingeniero de software especializado en Full Stack y en Inteligencia Artificial. Como CEO de CertiDevs, Bootstrap es una de sus áreas de expertise. Con más de 15 años programando, 6K seguidores en LinkedIn y experiencia como formador, Alan se dedica a crear contenido educativo de calidad para desarrolladores de todos los niveles.
Más tutoriales de Bootstrap
Explora más contenido relacionado con Bootstrap y continúa aprendiendo con nuestros tutoriales gratuitos.
Aprendizajes de esta lección
- Comprender la estructura básica y elementos fundamentales de un dropdown en Bootstrap.
- Aprender a configurar diferentes direcciones y alineaciones del menú desplegable.
- Conocer las variaciones de estilo y botones divididos para dropdowns.
- Integrar dropdowns en grupos de botones, navegación y barras de navegación.
- Aplicar buenas prácticas de accesibilidad y usabilidad en dropdowns.