Bootstrap 5 Dropdowns
Dropdowns
Bootstrap dropdown component allows you to toggle contextual overlays for displaying lists, links, and more html elements.
🤖 Looking for the LLM-optimized version?View llm.md
Other frameworks
CoreUI components are available as native Angular, React, and Vue components. To learn more please visit the following pages.
Overview
Dropdowns are toggleable, contextual overlays for displaying lists of links and more. They’re made interactive with the included Bootstrap dropdown JavaScript plugin. They’re toggled by clicking, not by hovering.
Dropdowns are built on a third party library,Popper.js, which provides dynamic positioning and viewport detection. Be sure to includepopper.min.js before CoreUI’s JavaScript or usecoreui.bundle.min.js
/coreui.bundle.js
which contains Popper.js. Popper.js isn’t used to position dropdowns in navbars though as dynamic positioning isn’t required.
Accessibility
TheWAIARIA standard defines an actualrole="menu"
widget, but this is specific to application-like menus which trigger actions or functions.ARIA menus can only contain menu items, checkbox menu items, radio button menu items, radio button groups, and sub-menus.
CoreUI for Bootstrap’s dropdowns, on the other hand, are designed to be generic and applicable to a variety of situations and markup structures. For instance, it is possible to create dropdowns that contain additional inputs and form controls, such as search fields or login forms. For this reason, Bootstrap does not expect (nor automatically add) any of therole
andaria-
attributes required for trueARIA menus. Authors will have to include these more specific attributes themselves.
However, Bootstrap does add built-in support for most standard keyboard menu interactions, such as the ability to move through individual.dropdown-item
elements using the cursor keys and close the menu with theESC key.
Examples
Bind the dropdown’s toggle and the dropdown menu inside.dropdown
, or different element that declaresposition: relative;
. Dropdowns can be triggered from<a>
or<button>
elements to better fit your possible requirements.
Single button
Each single.btn
can be changed into a dropdown toggle with small changes. Here’s how you can put them to work with either<button>
elements:
<divclass="dropdown"><buttonclass="btn btn-secondary dropdown-toggle"type="button"data-coreui-toggle="dropdown"aria-expanded="false"> Dropdown button</button><ulclass="dropdown-menu"><li><aclass="dropdown-item"href="#">Action</a></li><li><aclass="dropdown-item"href="#">Another action</a></li><li><aclass="dropdown-item"href="#">Something else here</a></li></ul></div>
And with<a>
elements:
<divclass="dropdown"><aclass="btn btn-secondary dropdown-toggle"href="#"role="button"data-coreui-toggle="dropdown"aria-expanded="false"> Dropdown link</a><ulclass="dropdown-menu"><li><aclass="dropdown-item"href="#">Action</a></li><li><aclass="dropdown-item"href="#">Another action</a></li><li><aclass="dropdown-item"href="#">Something else here</a></li></ul></div>
The best part is you can do this with any button variant, too:
<!-- Example single danger button --><divclass="btn-group"><buttontype="button"class="btn btn-danger dropdown-toggle"data-coreui-toggle="dropdown"aria-expanded="false"> Action</button><ulclass="dropdown-menu"><li><aclass="dropdown-item"href="#">Action</a></li><li><aclass="dropdown-item"href="#">Another action</a></li><li><aclass="dropdown-item"href="#">Something else here</a></li><li><hrclass="dropdown-divider"></li><li><aclass="dropdown-item"href="#">Separated link</a></li></ul></div>
Split button
Similarly, create split button dropdowns with virtually the same markup as single button dropdowns, but with the addition of.dropdown-toggle-split
for proper spacing around the dropdown caret.
We use this extra class to reduce the horizontalpadding
on either side of the caret by 25% and remove themargin-left
that’s attached for normal button dropdowns. Those additional changes hold the caret centered in the split button and implement a more properly sized hit area next to the main button.
<!-- Example split danger button --><divclass="btn-group"><buttontype="button"class="btn btn-danger">Action</button><buttontype="button"class="btn btn-danger dropdown-toggle dropdown-toggle-split"data-coreui-toggle="dropdown"aria-expanded="false"><spanclass="visually-hidden">Toggle Dropdown</span></button><ulclass="dropdown-menu"><li><aclass="dropdown-item"href="#">Action</a></li><li><aclass="dropdown-item"href="#">Another action</a></li><li><aclass="dropdown-item"href="#">Something else here</a></li><li><hrclass="dropdown-divider"></li><li><aclass="dropdown-item"href="#">Separated link</a></li></ul></div>
Sizing
Button dropdowns work with buttons of all sizes, including default and split dropdown buttons.
<!-- Large button groups (default and split) --><divclass="btn-group"><buttonclass="btn btn-secondary btn-lg dropdown-toggle"type="button"data-coreui-toggle="dropdown"aria-expanded="false"> Large button</button><ulclass="dropdown-menu"> ...</ul></div><divclass="btn-group"><buttonclass="btn btn-secondary btn-lg"type="button"> Large split button</button><buttontype="button"class="btn btn-lg btn-secondary dropdown-toggle dropdown-toggle-split"data-coreui-toggle="dropdown"aria-expanded="false"><spanclass="visually-hidden">Toggle Dropdown</span></button><ulclass="dropdown-menu"> ...</ul></div>
<divclass="btn-group"><buttonclass="btn btn-secondary btn-sm dropdown-toggle"type="button"data-coreui-toggle="dropdown"aria-expanded="false"> Small button</button><ulclass="dropdown-menu"> ...</ul></div><divclass="btn-group"><buttonclass="btn btn-secondary btn-sm"type="button"> Small split button</button><buttontype="button"class="btn btn-sm btn-secondary dropdown-toggle dropdown-toggle-split"data-coreui-toggle="dropdown"aria-expanded="false"><spanclass="visually-hidden">Toggle Dropdown</span></button><ulclass="dropdown-menu"> ...</ul></div>
Dark dropdowns
Deprecated in v5.0.0Opt into darker dropdowns to match a dark navbar or custom style by adding.dropdown-menu-dark
onto an existing.dropdown-menu
. No changes are required to the dropdown items.
Heads up! Dark variants for components were deprecated in v5.0.0 with the introduction of color modes. Instead of adding.dropdown-menu-dark
, setdata-coreui-theme="dark"
on the root element, a parent wrapper, or the component itself.
<divclass="dropdown"><buttonclass="btn btn-secondary dropdown-toggle"type="button"data-coreui-toggle="dropdown"aria-expanded="false"> Dropdown button</button><ulclass="dropdown-menu dropdown-menu-dark"><li><aclass="dropdown-item active"href="#">Action</a></li><li><aclass="dropdown-item"href="#">Another action</a></li><li><aclass="dropdown-item"href="#">Something else here</a></li><li><hrclass="dropdown-divider"></li><li><aclass="dropdown-item"href="#">Separated link</a></li></ul></div>
And putting it to use in a navbar:
<navclass="navbar navbar-expand-lg navbar-dark bg-dark"><divclass="container-fluid"><aclass="navbar-brand"href="#">Navbar</a><buttonclass="navbar-toggler"type="button"data-coreui-toggle="collapse"data-coreui-target="#navbarNavDarkDropdown"aria-controls="navbarNavDarkDropdown"aria-expanded="false"aria-label="Toggle navigation"><spanclass="navbar-toggler-icon"></span></button><divclass="collapse navbar-collapse"id="navbarNavDarkDropdown"><ulclass="navbar-nav"><liclass="nav-item dropdown"><buttonclass="btn btn-dark dropdown-toggle"data-coreui-toggle="dropdown"aria-expanded="false"> Dropdown</button><ulclass="dropdown-menu dropdown-menu-dark"><li><aclass="dropdown-item"href="#">Action</a></li><li><aclass="dropdown-item"href="#">Another action</a></li><li><aclass="dropdown-item"href="#">Something else here</a></li></ul></li></ul></div></div></nav>
Directions
RTL
Directions are mirrored when using CoreUI in RTL, meaning.dropstart
will appear on the right side.
Centered
Make the dropdown menu centered below the toggle with.dropdown-center
on the parent element.
<divclass="dropdown-center"><buttonclass="btn btn-secondary dropdown-toggle"type="button"data-coreui-toggle="dropdown"aria-expanded="false"> Centered dropdown</button><ulclass="dropdown-menu"><li><aclass="dropdown-item"href="#">Action</a></li><li><aclass="dropdown-item"href="#">Action two</a></li><li><aclass="dropdown-item"href="#">Action three</a></li></ul></div>
Dropup
Trigger dropdown menus above elements by adding.dropup
to the parent element.
<!-- Default dropup button --><divclass="btn-group dropup"><buttontype="button"class="btn btn-secondary dropdown-toggle"data-coreui-toggle="dropdown"aria-expanded="false"> Dropup</button><ulclass="dropdown-menu"><!-- Dropdown menu links --></ul></div><!-- Split dropup button --><divclass="btn-group dropup"><buttontype="button"class="btn btn-secondary"> Split dropup</button><buttontype="button"class="btn btn-secondary dropdown-toggle dropdown-toggle-split"data-coreui-toggle="dropdown"aria-expanded="false"><spanclass="visually-hidden">Toggle Dropdown</span></button><ulclass="dropdown-menu"><!-- Dropdown menu links --></ul></div>
Dropup centered
Make the dropup menu centered above the toggle with.dropup-center
on the parent element.
<divclass="dropup-center dropup"><buttonclass="btn btn-secondary dropdown-toggle"type="button"data-coreui-toggle="dropdown"aria-expanded="false"> Centered dropup</button><ulclass="dropdown-menu"><li><aclass="dropdown-item"href="#">Action</a></li><li><aclass="dropdown-item"href="#">Action two</a></li><li><aclass="dropdown-item"href="#">Action three</a></li></ul></div>
Dropend
Trigger dropdown menus at the right of the elements by adding.dropend
to the parent element.
<!-- Default dropend button --><divclass="btn-group dropend"><buttontype="button"class="btn btn-secondary dropdown-toggle"data-coreui-toggle="dropdown"aria-expanded="false"> Dropend</button><ulclass="dropdown-menu"><!-- Dropdown menu links --></ul></div><!-- Split dropend button --><divclass="btn-group dropend"><buttontype="button"class="btn btn-secondary"> Split dropend</button><buttontype="button"class="btn btn-secondary dropdown-toggle dropdown-toggle-split"data-coreui-toggle="dropdown"aria-expanded="false"><spanclass="visually-hidden">Toggle Dropend</span></button><ulclass="dropdown-menu"><!-- Dropdown menu links --></ul></div>
Dropstart
Trigger dropdown menus at the left of the elements by adding.dropstart
to the parent element.
<!-- Default dropstart button --><divclass="btn-group dropstart"><buttontype="button"class="btn btn-secondary dropdown-toggle"data-coreui-toggle="dropdown"aria-expanded="false"> Dropstart</button><ulclass="dropdown-menu"><!-- Dropdown menu links --></ul></div><!-- Split dropstart button --><divclass="btn-group dropstart"><buttontype="button"class="btn btn-secondary dropdown-toggle dropdown-toggle-split"data-coreui-toggle="dropdown"aria-expanded="false"><spanclass="visually-hidden">Toggle Dropstart</span></button><ulclass="dropdown-menu"><!-- Dropdown menu links --></ul><buttontype="button"class="btn btn-secondary"> Split dropstart</button></div>
Menu items
You can use<a>
or<button>
elements as dropdown items.
<divclass="dropdown"><buttonclass="btn btn-secondary dropdown-toggle"type="button"data-coreui-toggle="dropdown"aria-expanded="false"> Dropdown</button><ulclass="dropdown-menu"><li><buttonclass="dropdown-item"type="button">Action</button></li><li><buttonclass="dropdown-item"type="button">Another action</button></li><li><buttonclass="dropdown-item"type="button">Something else here</button></li></ul></div>
You can also create non-interactive dropdown items with.dropdown-item-text
. Feel free to style further with custom CSS or text utilities.
- Dropdown item text
- Action
- Another action
- Something else here
<ulclass="dropdown-menu"><li><spanclass="dropdown-item-text">Dropdown item text</span></li><li><aclass="dropdown-item"href="#">Action</a></li><li><aclass="dropdown-item"href="#">Another action</a></li><li><aclass="dropdown-item"href="#">Something else here</a></li></ul>
Active
Add.active
to items in the dropdown tostyle them as active. To convey the active state to assistive technologies, use thearia-current
attribute — using thepage
value for the current page, ortrue
for the current item in a set.
<ulclass="dropdown-menu"><li><aclass="dropdown-item"href="#">Regular link</a></li><li><aclass="dropdown-item active"href="#"aria-current="true">Active link</a></li><li><aclass="dropdown-item"href="#">Another link</a></li></ul>
Disabled
Add.disabled
to items in the dropdown tostyle them as disabled.
<ulclass="dropdown-menu"><li><aclass="dropdown-item"href="#">Regular link</a></li><li><aclass="dropdown-item disabled"aria-disabled="true">Disabled link</a></li><li><aclass="dropdown-item"href="#">Another link</a></li></ul>
Menu alignment
By default, a dropdown menu is automatically positioned 100% from the top and along the left side of its parent. Add.dropdown-menu-end
to a.dropdown-menu
to right align the dropdown menu.
<divclass="btn-group"><buttontype="button"class="btn btn-secondary dropdown-toggle"data-coreui-toggle="dropdown"aria-expanded="false"> Right-aligned menu example</button><ulclass="dropdown-menu dropdown-menu-end"><li><buttonclass="dropdown-item"type="button">Action</button></li><li><buttonclass="dropdown-item"type="button">Another action</button></li><li><buttonclass="dropdown-item"type="button">Something else here</button></li></ul></div>
Responsive alignment
If you want to use responsive alignment, disable dynamic positioning by adding thedata-coreui-display="static"
attribute and use the responsive variation classes.
To alignright the dropdown menu with the given breakpoint or larger, add.dropdown-menu{-sm|-md|-lg|-xl|-xxl}-end
.
<divclass="btn-group"><buttontype="button"class="btn btn-secondary dropdown-toggle"data-coreui-toggle="dropdown"data-coreui-display="static"aria-expanded="false"> Left-aligned but right aligned when large screen</button><ulclass="dropdown-menu dropdown-menu-lg-end"><li><buttonclass="dropdown-item"type="button">Action</button></li><li><buttonclass="dropdown-item"type="button">Another action</button></li><li><buttonclass="dropdown-item"type="button">Something else here</button></li></ul></div>
To alignleft the dropdown menu with the given breakpoint or larger, add.dropdown-menu-end
and.dropdown-menu{-sm|-md|-lg|-xl|-xxl}-start
.
<divclass="btn-group"><buttontype="button"class="btn btn-secondary dropdown-toggle"data-coreui-toggle="dropdown"data-coreui-display="static"aria-expanded="false"> Right-aligned but left aligned when large screen</button><ulclass="dropdown-menu dropdown-menu-end dropdown-menu-lg-start"><li><buttonclass="dropdown-item"type="button">Action</button></li><li><buttonclass="dropdown-item"type="button">Another action</button></li><li><buttonclass="dropdown-item"type="button">Something else here</button></li></ul></div>
Note that you don’t need to add adata-coreui-display="static"
attribute to dropdown buttons in navbars, since Popper isn’t used in navbars.
Alignment options
Taking most of the options shown above, here’s a small kitchen sink demo of various dropdown alignment options in one place.
<divclass="btn-group"><buttonclass="btn btn-secondary dropdown-toggle"type="button"data-coreui-toggle="dropdown"aria-expanded="false"> Dropdown</button><ulclass="dropdown-menu"><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li></ul></div><divclass="btn-group"><buttontype="button"class="btn btn-secondary dropdown-toggle"data-coreui-toggle="dropdown"aria-expanded="false"> Right-aligned menu</button><ulclass="dropdown-menu dropdown-menu-end"><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li></ul></div><divclass="btn-group"><buttontype="button"class="btn btn-secondary dropdown-toggle"data-coreui-toggle="dropdown"data-coreui-display="static"aria-expanded="false"> Left-aligned, right-aligned lg</button><ulclass="dropdown-menu dropdown-menu-lg-end"><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li></ul></div><divclass="btn-group"><buttontype="button"class="btn btn-secondary dropdown-toggle"data-coreui-toggle="dropdown"data-coreui-display="static"aria-expanded="false"> Right-aligned, left-aligned lg</button><ulclass="dropdown-menu dropdown-menu-end dropdown-menu-lg-start"><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li></ul></div><divclass="btn-group dropstart"><buttontype="button"class="btn btn-secondary dropdown-toggle"data-coreui-toggle="dropdown"aria-expanded="false"> Dropstart</button><ulclass="dropdown-menu"><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li></ul></div><divclass="btn-group dropend"><buttontype="button"class="btn btn-secondary dropdown-toggle"data-coreui-toggle="dropdown"aria-expanded="false"> Dropend</button><ulclass="dropdown-menu"><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li></ul></div><divclass="btn-group dropup"><buttontype="button"class="btn btn-secondary dropdown-toggle"data-coreui-toggle="dropdown"aria-expanded="false"> Dropup</button><ulclass="dropdown-menu"><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li></ul></div>
Menu content
Headers
Add a header to label sections of actions in any dropdown menu.
Dropdown header
- Action
- Another action
<ulclass="dropdown-menu"><li><h6class="dropdown-header">Dropdown header</h6></li><li><aclass="dropdown-item"href="#">Action</a></li><li><aclass="dropdown-item"href="#">Another action</a></li></ul>
Dividers
Separate groups of related menu items with a divider.
<ulclass="dropdown-menu"><li><aclass="dropdown-item"href="#">Action</a></li><li><aclass="dropdown-item"href="#">Another action</a></li><li><aclass="dropdown-item"href="#">Something else here</a></li><li><hrclass="dropdown-divider"></li><li><aclass="dropdown-item"href="#">Separated link</a></li></ul>
Text
Place any freeform text within a dropdown menu with text and usespacing utilities. Note that you’ll likely need additional sizing styles to constrain the menu width.
Some example text that's free-flowing within the dropdown menu.
And this is more example text.
<divclass="dropdown-menu p-4 text-body-secondary"style="max-width: 200px;"><p> Some example text that's free-flowing within the dropdown menu.</p><pclass="mb-0"> And this is more example text.</p></div>
Forms
Put a form within a dropdown menu, or make it into a dropdown menu, and usemargin or padding utilities to give it the negative space you require.
<divclass="dropdown-menu"><formclass="px-4 py-3"><divclass="mb-3"><labelfor="exampleDropdownFormEmail1"class="form-label">Email address</label><inputtype="email"class="form-control"id="exampleDropdownFormEmail1"placeholder="[email protected]"></div><divclass="mb-3"><labelfor="exampleDropdownFormPassword1"class="form-label">Password</label><inputtype="password"class="form-control"id="exampleDropdownFormPassword1"placeholder="Password"></div><divclass="mb-3"><divclass="form-check"><inputtype="checkbox"class="form-check-input"id="dropdownCheck"><labelclass="form-check-label"for="dropdownCheck"> Remember me</label></div></div><buttontype="submit"class="btn btn-primary">Sign in</button></form><divclass="dropdown-divider"></div><aclass="dropdown-item"href="#">New around here? Sign up</a><aclass="dropdown-item"href="#">Forgot password?</a></div>
<divclass="dropdown"><buttontype="button"class="btn btn-primary dropdown-toggle"data-coreui-toggle="dropdown"aria-expanded="false"data-coreui-auto-close="outside"> Dropdown form</button><formclass="dropdown-menu p-4"><divclass="mb-3"><labelfor="exampleDropdownFormEmail2"class="form-label">Email address</label><inputtype="email"class="form-control"id="exampleDropdownFormEmail2"placeholder="[email protected]"></div><divclass="mb-3"><labelfor="exampleDropdownFormPassword2"class="form-label">Password</label><inputtype="password"class="form-control"id="exampleDropdownFormPassword2"placeholder="Password"></div><divclass="mb-3"><divclass="form-check"><inputtype="checkbox"class="form-check-input"id="dropdownCheck2"><labelclass="form-check-label"for="dropdownCheck2"> Remember me</label></div></div><buttontype="submit"class="btn btn-primary">Sign in</button></form></div>
Dropdown options
Usedata-coreui-offset
ordata-coreui-reference
to change the location of the dropdown.
<divclass="d-flex"><divclass="dropdown me-1"><buttontype="button"class="btn btn-secondary dropdown-toggle"data-coreui-toggle="dropdown"aria-expanded="false"data-coreui-offset="10,20"> Offset</button><ulclass="dropdown-menu"><li><aclass="dropdown-item"href="#">Action</a></li><li><aclass="dropdown-item"href="#">Another action</a></li><li><aclass="dropdown-item"href="#">Something else here</a></li></ul></div><divclass="btn-group"><buttontype="button"class="btn btn-secondary">Reference</button><buttontype="button"class="btn btn-secondary dropdown-toggle dropdown-toggle-split"data-coreui-toggle="dropdown"aria-expanded="false"data-coreui-reference="parent"><spanclass="visually-hidden">Toggle Dropdown</span></button><ulclass="dropdown-menu"><li><aclass="dropdown-item"href="#">Action</a></li><li><aclass="dropdown-item"href="#">Another action</a></li><li><aclass="dropdown-item"href="#">Something else here</a></li><li><hrclass="dropdown-divider"></li><li><aclass="dropdown-item"href="#">Separated link</a></li></ul></div></div>
Auto close behavior
By default, the dropdown menu is closed when clicking inside or outside the dropdown menu. You can use theautoClose
option to change this behavior of the dropdown.
<divclass="btn-group"><buttonclass="btn btn-secondary dropdown-toggle"type="button"data-coreui-toggle="dropdown"data-coreui-auto-close="true"aria-expanded="false"> Default dropdown</button><ulclass="dropdown-menu"><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li></ul></div><divclass="btn-group"><buttonclass="btn btn-secondary dropdown-toggle"type="button"data-coreui-toggle="dropdown"data-coreui-auto-close="inside"aria-expanded="false"> Clickable inside</button><ulclass="dropdown-menu"><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li></ul></div><divclass="btn-group"><buttonclass="btn btn-secondary dropdown-toggle"type="button"data-coreui-toggle="dropdown"data-coreui-auto-close="outside"aria-expanded="false"> Clickable outside</button><ulclass="dropdown-menu"><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li></ul></div><divclass="btn-group"><buttonclass="btn btn-secondary dropdown-toggle"type="button"data-coreui-toggle="dropdown"data-coreui-auto-close="false"aria-expanded="false"> Manual close</button><ulclass="dropdown-menu"><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li></ul></div>
Usage
Heads up! In our documentation, all examples showstandard CoreUI implementation. If you are using aBootstrap-compatible version of CoreUI, remember to use the following changes:
- In the constructor, please usebootstrap instead ofcoreui. For example,
new bootstrap.Alert(...)
instead ofnew coreui.Alert(...)
- In events, please usebs instead ofcoreui, for example
close.bs.alert
instead ofclose.coreui.alert
- In data attributes, please usebs instead ofcoreui. For example,
data-bs-toggle="..."
instead ofdata-coreui-toggle="..."
Via data attributes or JavaScript, the dropdown plugin toggles hidden content (dropdown menus) by toggling the.show
class on the parent.dropdown-menu
. Thedata-coreui-toggle="dropdown"
attribute is relied on for closing dropdown menus at an application level, so it’s a good idea to always use it.
mouseover
handlers to the immediate children of the<body>
element. This admittedly ugly hack is necessary to work around aquirk in iOS’ event delegation, which would otherwise prevent a tap anywhere outside of the dropdown from triggering the code that closes the dropdown. Once the dropdown is closed, these additional emptymouseover
handlers are removed.Via data attributes
Adddata-coreui-toggle="dropdown"
to a link or button to toggle a dropdown.
<divclass="dropdown"><buttontype="button"data-coreui-toggle="dropdown"aria-expanded="false"> Dropdown trigger</button><ulclass="dropdown-menu"> ...</ul></div>
Via JavaScript
Call the dropdowns via #"0">constdropdownElementList=document.querySelectorAll('.dropdown-toggle')constdropdownList=[...dropdownElementList].map(dropdownToggleEl=>newcoreui.Dropdown(dropdownToggleEl))
data-coreui-toggle="dropdown"
still required
Regardless of whether you call your dropdown via JavaScript or instead use the data-api,data-coreui-toggle="dropdown"
is always required to be present on the dropdown’s trigger element.
Options
Options can be passed using data attributes or JavaScript. To do this, append an option name todata-coreui-
, such asdata-coreui-animation="{value}"
. Remember to convert the case of the option name from “camelCase” to “kebab-case” when using data attributes. For instance, you should writedata-coreui-custom-class="beautifier"
rather thandata-coreui-customClass="beautifier"
.
Starting with CoreUI 4.2.0, all components support anexperimental reserved data attribute nameddata-coreui-config
, which can contain simple component configurations as a JSON string. If an element has attributesdata-coreui-config='{"delay":50, "title":689}'
anddata-coreui-title="Custom Title"
, then the final value fortitle
will beCustom Title
, as the standard data attributes will take precedence over values specified indata-coreui-config
. Moreover, existing data attributes can also hold JSON values likedata-coreui-delay='{"show":50, "hide":250}'
.
Name | Type | Default | Description |
---|---|---|---|
autoClose | boolean, string | true | Configure the auto close behavior of the dropdown:
|
boundary | string, element | 'clippingParents' | Overflow constraint boundary of the dropdown menu (applies only to Popper’s preventOverflow modifier). By default it’sclippingParents and can accept an HTMLElement reference (via JavaScript only). For more information refer to Popper’sdetectOverflow docs. |
display | string | 'dynamic' | By default, we use Popper for dynamic positioning. Disable this withstatic . |
offset | array, string, function | [0, 2] | Offset of the dropdown relative to its target. You can pass a string in data attributes with comma separated values like:data-coreui-offset="10,20" . When a function is used to determine the offset, it is called with an object containing the popper placement, the reference, and popper rects as its first argument. The triggering element DOM node is passed as the second argument. The function must return an array with two numbers:skidding,distance. For more information refer to Popper’soffset docs. |
popperConfig | null, object, function | null | To change CoreUI for Bootstrap’s default Popper config, seePopper’s configuration. When a function is used to create the Popper configuration, it’s called with an object that contains the CoreUI for Bootstrap’s default Popper configuration. It helps you use and merge the default with your own configuration. The function must return a configuration object for Popper. |
reference | string, element, object | 'toggle' | Reference element of the dropdown menu. Accepts the values of'toggle' ,'parent' , an HTMLElement reference or an object providinggetBoundingClientRect . For more information refer to Popper’sconstructor docs andvirtual element docs. |
Using function withpopperConfig
constdropdown=newcoreui.Dropdown(element,{popperConfig(defaultBsPopperConfig){// const newPopperConfig = {...}// use defaultBsPopperConfig if needed...// return newPopperConfig}})
Methods
Method | Description |
---|---|
dispose | Destroys an element’s dropdown. (Removes stored data on the DOM element) |
getInstance | Static method which allows you to get the dropdown instance associated to a DOM element, you can use it like this:coreui.Dropdown.getInstance(element) |
getOrCreateInstance | Static method which returns a dropdown instance associated to a DOM element or create a new one in case it wasn’t initialized. You can use it like this:coreui.Dropdown.getOrCreateInstance(element) . |
hide | Hides the dropdown menu of a given navbar or tabbed navigation. |
show | Shows the dropdown menu of a given navbar or tabbed navigation. |
toggle | Toggles the dropdown menu of a given navbar or tabbed navigation. |
update | Updates the position of an element’s dropdown. |
Events
All dropdown events are fired at the.dropdown-menu
’s parent element and have arelatedTarget
property, whose value is the toggling anchor element.hide.coreui.dropdown
andhidden.coreui.dropdown
events have aclickEvent
property (only when the original Event type isclick
) that contains an Event Object for the click event.
Event type | Description |
---|---|
hide.coreui.dropdown | Fires immediately when thehide instance method has been called. |
hidden.coreui.dropdown | Fired when the dropdown has finished being hidden from the user and CSS transitions have completed. |
show.coreui.dropdown | Fires immediately when theshow instance method is called. |
shown.coreui.dropdown | Fired when the dropdown has been made visible to the user and CSS transitions have completed. |
constmyDropdown=document.getElementById('myDropdown')myDropdown.addEventListener('show.coreui.dropdown',event=>{// do something...})
Customizing
CSS variables
Dropdowns use local CSS variables on.dropdown-menu
for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
--cui-dropdown-zindex:#{$zindex-dropdown};--cui-dropdown-min-width:#{$dropdown-min-width};--cui-dropdown-padding-x:#{$dropdown-padding-x};--cui-dropdown-padding-y:#{$dropdown-padding-y};--cui-dropdown-spacer:#{$dropdown-spacer};@include rfs($dropdown-font-size,--cui-dropdown-font-size);--cui-dropdown-color:#{$dropdown-color};--cui-dropdown-bg:#{$dropdown-bg};--cui-dropdown-border-color:#{$dropdown-border-color};--cui-dropdown-border-radius:#{$dropdown-border-radius};--cui-dropdown-border-width:#{$dropdown-border-width};--cui-dropdown-inner-border-radius:#{$dropdown-inner-border-radius};--cui-dropdown-divider-bg:#{$dropdown-divider-bg};--cui-dropdown-divider-margin-y:#{$dropdown-divider-margin-y};--cui-dropdown-box-shadow:#{$dropdown-box-shadow};--cui-dropdown-link-color:#{$dropdown-link-color};--cui-dropdown-link-hover-color:#{$dropdown-link-hover-color};--cui-dropdown-link-hover-bg:#{$dropdown-link-hover-bg};--cui-dropdown-link-active-color:#{$dropdown-link-active-color};--cui-dropdown-link-active-bg:#{$dropdown-link-active-bg};--cui-dropdown-link-disabled-color:#{$dropdown-link-disabled-color};--cui-dropdown-item-padding-x:#{$dropdown-item-padding-x};--cui-dropdown-item-padding-y:#{$dropdown-item-padding-y};--cui-dropdown-header-color:#{$dropdown-header-color};--cui-dropdown-header-padding-x:#{$dropdown-header-padding-x};--cui-dropdown-header-padding-y:#{$dropdown-header-padding-y};
Customization through CSS variables can be seen on the.dropdown-menu-dark
class where we override specific values without adding duplicate CSS selectors.
--cui-dropdown-color:#{$dropdown-dark-color};--cui-dropdown-bg:#{$dropdown-dark-bg};--cui-dropdown-border-color:#{$dropdown-dark-border-color};--cui-dropdown-box-shadow:#{$dropdown-dark-box-shadow};--cui-dropdown-link-color:#{$dropdown-dark-link-color};--cui-dropdown-link-hover-color:#{$dropdown-dark-link-hover-color};--cui-dropdown-divider-bg:#{$dropdown-dark-divider-bg};--cui-dropdown-link-hover-bg:#{$dropdown-dark-link-hover-bg};--cui-dropdown-link-active-color:#{$dropdown-dark-link-active-color};--cui-dropdown-link-active-bg:#{$dropdown-dark-link-active-bg};--cui-dropdown-link-disabled-color:#{$dropdown-dark-link-disabled-color};--cui-dropdown-header-color:#{$dropdown-dark-header-color};
SASS variables
Variables for all dropdowns:
$dropdown-min-width:10rem;$dropdown-padding-x:0;$dropdown-padding-y:.5rem;$dropdown-spacer:.125rem;$dropdown-font-size:$font-size-base;$dropdown-color:var(--#{$prefix}body-color);$dropdown-bg:var(--#{$prefix}body-bg);$dropdown-border-color:var(--#{$prefix}border-color-translucent);$dropdown-border-radius:var(--#{$prefix}border-radius);$dropdown-border-width:var(--#{$prefix}border-width);$dropdown-inner-border-radius:calc(#{$dropdown-border-radius}-#{$dropdown-border-width});// stylelint-disable-line function-disallowed-list$dropdown-divider-bg:$dropdown-border-color;$dropdown-divider-margin-y:$spacer*.5;$dropdown-box-shadow:var(--#{$prefix}box-shadow);$dropdown-link-color:var(--#{$prefix}body-color);$dropdown-link-hover-color:$dropdown-link-color;$dropdown-link-hover-bg:var(--#{$prefix}tertiary-bg);$dropdown-link-active-color:$component-active-color;$dropdown-link-active-bg:$component-active-bg;$dropdown-link-disabled-color:var(--#{$prefix}tertiary-color);$dropdown-item-padding-y:$spacer*.25;$dropdown-item-padding-x:$spacer;$dropdown-header-color:$gray-600;$dropdown-header-padding-x:$dropdown-item-padding-x;$dropdown-header-padding-y:$dropdown-padding-y;// fusv-disable$dropdown-header-padding:$dropdown-header-padding-y$dropdown-header-padding-x;// Deprecated in v4.2.6// fusv-enable
Variables for thedark dropdown:
$dropdown-dark-color:$gray-300;$dropdown-dark-bg:$gray-800;$dropdown-dark-border-color:$dropdown-border-color;$dropdown-dark-divider-bg:$dropdown-divider-bg;$dropdown-dark-box-shadow:null;$dropdown-dark-link-color:$dropdown-dark-color;$dropdown-dark-link-hover-color:$white;$dropdown-dark-link-hover-bg:rgba($white,.15);$dropdown-dark-link-active-color:$dropdown-link-active-color;$dropdown-dark-link-active-bg:$dropdown-link-active-bg;$dropdown-dark-link-disabled-color:$gray-500;$dropdown-dark-header-color:$gray-500;
Variables for the CSS-based carets that indicate a dropdown’s interactivity:
$caret-width:.3em;$caret-vertical-align:$caret-width*.85;$caret-spacing:$caret-width*.85;
SASS mixins
Mixins are used to generate the CSS-based carets and can be found inscss/mixins/_caret.scss
.
@mixin caret-down($width:$caret-width){border-top:$widthsolid;border-right:$widthsolidtransparent;border-bottom:0;border-left:$widthsolidtransparent;}@mixin caret-up($width:$caret-width){border-top:0;border-right:$widthsolidtransparent;border-bottom:$widthsolid;border-left:$widthsolidtransparent;}@mixin caret-end($width:$caret-width){border-top:$widthsolidtransparent;border-right:0;border-bottom:$widthsolidtransparent;border-left:$widthsolid;}@mixin caret-start($width:$caret-width){border-top:$widthsolidtransparent;border-right:$widthsolid;border-bottom:$widthsolidtransparent;}@mixin caret($direction:down,$width:$caret-width,$spacing:$caret-spacing,$vertical-align:$caret-vertical-align){@if$enable-caret{&::after{display:inline-block;margin-inline-start:$spacing;vertical-align:$vertical-align;content:"";@if$direction==down{@include caret-down($width);}@else if$direction==up{@include caret-up($width);}@else if$direction==end{@include caret-end($width);}}@if$direction==start{&::after{display:none;}&::before{display:inline-block;margin-inline-end:$spacing;vertical-align:$vertical-align;content:"";@include caret-start($width);}}&:empty::after{margin-inline-start:0;}}}
CoreUI vs Bootstrap
While this Dropdown component is fully compatible with Bootstrap and follows its core principles, CoreUI delivers a more complete solution for modern app development.
What sets CoreUI apart from Bootstrap?
- ✅Fully compatible with Bootstrap – Built directly on Bootstrap, all classes and behaviors work as expected.
- 🧠Framework-native versions – CoreUI provides dedicated libraries forReact.js,Vue.js, andAngular, unlike Bootstrap which relies on third-party plugins for JavaScript frameworks.
- 👨💻Maintained by a full-time team – CoreUI is developed as a professional product, not a volunteer-driven project.
- 📦More built-in components – Includes additional ready-to-use components like range sliders, multi-selects, steppers, etc.
- 🛠️Sass Modules support today – CoreUI already supports Sass Modules, which are planned for Bootstrap 6.
- 🌍Better LTR/RTL support – Uses modern CSS logical properties for seamless bidirectional layout support.
- 🔒LTS (Long-Term Support) – Bootstrap now offers LTS only via paid third parties like HeroDevs, while CoreUI continues to offer long-term support natively and for free.
Whether you’re building internal tools, dashboards, or SaaS platforms — CoreUI combines the familiarity of Bootstrap with a more powerful, scalable, and production-ready ecosystem.
👉Explore CoreUI Bootstrap Components
👉Compare CoreUI vs Bootstrap