Dropdown menu

A commercial license is required to use Tailwind Plus Elements.

The <el-dropdown> component makes it easy to build dropdown menus with full keyboard support and built-in anchoring to control where the dropdown appears relative to its trigger.

Component API

<el-dropdown>

Connects the button with the menu.

CSS variables
--input-widthProvides the width of the input element (read-only).

<el-menu>

Contains all the menu items. All focusable children will be considered options.

Attributes
popoverRequired to enable the popover behavior.
openControls the open/closed state of the menu.
anchorWhere to position the dropdown menu. Supports values like "bottom", "bottom-start", "bottom-end", etc.
anchor-strategySets the position CSS property of the popover to eitherabsolute (default) or fixed.
CSS variables
--anchor-gapSets the gap between the anchor and the popover.
--anchor-offsetSets the distance that the popover should be nudged from its original position.
Data attributes (Read-only)
data-closedPresent before transitioning in, and when transitioning out.
data-enterPresent when transitioning in.
data-leavePresent when transitioning out.
data-transitionPresent when transitioning in or out.
Methods
togglePopover()Toggles the menu visibility.
showPopover()Shows the menu.
hidePopover()Hides the menu.

Examples

Basic example

Use the <el-dropdown> and <el-menu> components, along with a native <button>, to build a dropdown menu:

<el-dropdown>
  <button type="button">Options</button>
  <el-menu anchor="bottom start" popover>
    <button class="focus:bg-gray-100" type="button">Edit</button>
    <button class="focus:bg-gray-100" type="button">Duplicate</button>
    <hr role="none" />
    <button class="focus:bg-gray-100" type="button">Archive</button>
    <button class="focus:bg-gray-100" type="button">Delete</button>
  </el-menu>
</el-dropdown>

All focusable children within the <el-menu> component will be considered options.

Using with buttons

When using a <button> as a dropdown item, the onclick event will be invoked when it's selected:

<el-dropdown>
  <button type="button">Options</button>
  <el-menu popover>
    <button onclick="viewUser()" type="button">View</button>
    <button onclick="editUser()" type="button">Edit</button>
    <button onclick="deleteUser()" type="button">Delete</button>
  </el-menu>
</el-dropdown>

When using an <a> as a dropdown item, the href attribute will be used to navigate to the link when it's selected:

<el-dropdown>
  <button type="button">Options</button>
  <el-menu popover>
    <a href="/users/1">View</a>
    <a href="/users/1/edit">Edit</a>
    <a href="/users/1/delete">Delete</a>
  </el-menu>
</el-dropdown>

Disabling an item

Use the disabled attribute on button dropdown items to prevent them from being selected:

<el-dropdown>
  <button type="button">Options</button>
  <el-menu popover>
    <button onclick="viewUser()" type="button">View</button>
    <button onclick="editUser()" type="button">Edit</button>
    <button disabled type="button">Delete</button>
  </el-menu>
</el-dropdown>

Setting the dropdown width

The <el-menu> has no width set by default, but you can add one using CSS:

<el-menu popover class="w-52">
  <!-- ... -->
</el-menu>

If you'd like the dropdown width to match the <button> width, use the --button-width CSS variable that's exposed on the <el-menu> element:

<el-menu popover class="w-(--button-width)">
  <!-- ... -->
</el-menu>

Positioning the dropdown

Add the anchor prop to the <el-menu> to automatically position the dropdown relative to the <button>:

<el-menu popover anchor="bottom start">
  <!-- ... -->
</el-menu>

Use the values top, right, bottom, or left to center the dropdown along the appropriate edge, or combine it with start or end to align the dropdown to a specific corner, such as top start or bottom end.

To control the gap between the button and the dropdown, use the --anchor-gap CSS variable:

<el-menu popover anchor="bottom start" class="[--anchor-gap:4px]">
  <!-- ... -->
</el-menu>

Additionally, you can use --anchor-offset to control the distance that the dropdown should be nudged from its original position.

Adding transitions

To animate the opening and closing of the dropdown, target the data-closed, data-enter, data-leave, and data-transition attributes with CSS to style the different stages of the transition:

<el-menu popover class="transition transition-discrete data-closed:opacity-0 data-enter:duration-75 data-enter:ease-out data-leave:duration-100 data-leave:ease-in">
  <!-- ... -->
</el-menu>