Description

A drop-down menu consists of related content grouped together and organized vertically.

It allows users to select one or multiple values from a list of predefined values. An optional search field can help the user to find values easily.

Types

Type

Usage

Image

Regular drop-down

When the user can only select one option from a predefined list.

When there are fewer than 15 options.

Searchable drop-down

When there are more than 15 options.

When users are expected to know what they are looking for, and are likely to be aware of how the option is labelled.

Multi-select drop-down

When the user can select multiple values from a predefined list

Multi-select searchable drop-down

Usage & Behavior

General guidelines

Structure

The drop-down consists of:

Trigger area - selecting the drop-down trigger should open or close the options list. Includes:

Options list - displays the list of available values, consisting of:

Text labels only

Including a No selection option

With icons

With additional actions and group divider

With group headers

Default State

The drop-down trigger area consists of a text box showing the default option, if one exists. For example:

If there is no default option:

Content

Internal Logic

States

State

Visual

Regular

Hover

Active

Selected

Disabled

Read-Only

Dropdown Menu.png

Error

Warning

Dropdown menu - Warning.png

Focused

Focused, Hover

Focused, Active

Focused, Disabled

Interaction

Interaction

Visual

Details

Hovering anywhere on the trigger area

  • Switches to hover state.

Clicking anywhere on the trigger area

  • Opens or closes the options list.

  • Hovered options should be highlighted with a light blue background color.

  • The user may use the Up and Down keys to navigate between options and Enter to select.

Selecting an option

  • The options list closes.

  • The selected option is displayed in the field.

Viewing options list with an existing selection

  • Shows the selected option with a blue check mark on the left side of the option.

Selecting a No selection option

  • The option list closes.

  • No Selection will be set as default unless instructed otherwise

Clicking anywhere outside the drop-down

  • Closes the options list.

Focusing or hovering on a list option when its row contains action and status icons

image-20240408-120341.png
  • Actions are revealed.

  • Aria label will announce the action and status icons on the left
and on the right (for screen reader purposes).

Focusing or hovering over an action or status icon

image-20240408-120428.png

  • Shows a tooltip describing the action or status.

Searchable drop-down

A Search field should be added:

Internal Logic

Interaction

Interaction

Visual

Details

Click the trigger area

  • Clicking or tapping anywhere on the trigger area opens or closes the options list.

  • The search field is focused so that the user may start typing.

Enter search

  • As characters are entered, the list is filtered to show matching results only.

  • Unless otherwise specified, the filter can match anywhere within the value string (at the beginning, middle or end).

  • The part of the option label which matches the search string should be shown in bold.

  • The user may use the Up and Down keys to navigate between options and Enter to select.

Select an option

On selecting an option:

  • the options list closes.

  • the selected option is displayed in the field.

  • the search field is cleared.

View options list with an existing selection

  • Shows the selected item with a blue check mark on the left side of the option.

Multi-select drop-down

A multi-select drop-down allows users to easily select multiple values from a predefined list.

Internal Logic

Selected items

Select All (optional)

Use the All option when:

Interaction

Interaction

Visual

Details

Click the trigger area

  • Clicking or tapping anywhere on the trigger area opens or closes the options list.

Select an option

  • The options list remains open.

  • The option label is added to the trigger area.

  • The selected item is checked.

Multiple items selected

  • First, all items are presented one after another, separated by a comma and a space.

  • When the selected items exceed the size of the trigger area, the total number of selections should be presented.

Click on the trigger area, or
Click anywhere outside of the control

  • The options list closes.

  • The selected options are displayed in the trigger area.

Multi-select searchable drop-down

Interaction

Interaction

Visual

Details

Click the trigger area

  • Clicking or tapping anywhere on the trigger area opens or closes the options list.

  • The search field is focused and the user may start typing.

Enter Search

  • As characters are entered, the list is filtered to show matching results only.

  • The filter can match anywhere within the value string (at the beginning, middle, or end).

  • The part of the option label which matches the search string should be shown in bold.

  • The user may use the Up and Down keys to navigate between options and Enter to select.

Select an option

  • The option label is added to the trigger area.

  • The options list remains open, so the user can select another item.

  • The selected options are checked.

Delete search string

  • A search string can be cleared using the X button, or manually by using the delete key.

  • The full options list is presented.

  • The search field is in focus.

Validations and errors

Please refer to the Field Validation page for more information.

A drop-down with a warning: 

Dorpdown Menu Validation Warning.png

A drop-down with an error: 

Dorpdown Menu Validation Error.png

Best practices

Accessibility Compliance

Unless otherwise specified, see our general compliance information in Fundamentals - Accessibility.

Focus management

If a search bar exists, it will be treated as the first item on the options list.

Keyboard

Trigger area

Options list

Tab

Navigates to the next component.

  • Regular (single-select) - N/A

  • Multi-select - N/A

  • In case of a search bar - moves focus from search bar to the first list item.

Shift + Tab

Navigates to the previous component.

  • Regular (single-select) - N/A

  • Multi-select - N/A

  • In case of a search bar - moves focus from list item to the search bar.

Space

Opens the menu.

  • Regular (single-select) - Selects the focused item and closes the menu.

  • Multi-select - Selects the focused item. Menu stays open.

  • In case of a search bar - Acts as text input.

Enter

Opens the menu.

  • Regular (single-select) - Selects the focused item and closes the menu.

  • Multi-select - Selects the focused item. Menu stays open.

  • In case of a search bar - Acts as text input.

Esc

N/A

Closes the menu without updating the selection.

Arrows

Up/Down - Opens the menu.

  • Up - Navigates to the previous item. Stops at the first item in the list.

  • Down - Navigates to the next item. Stops at the last item in the list.

  • Left and right - In case there are status icons/actions in the option row - will navigate to the icon/action (movement will not be circular).

  • In case of a search bar - The right and left arrows act as arrows within a Text Field.

Holding down the key will scroll continuously.

Page Up/Home

N/A

Navigates to the first item.

Page Down/End

N/A

Navigates to the last item.

Design

Zeplin Link

Screen Thumbnail

 https://zpl.io/bWOjejb

Dropdown Menu - States.png

Code

<link rel="stylesheet" href="https://ux.verint.com/bootstrap-4.0.0/dist/fonts/css/verint_lux.css">
<link rel="stylesheet" href="https://ux.verint.com/bootstrap-4.0.0/dist/css/bootstrap.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://ux.verint.com/bootstrap-4.0.0/dist/js/bootstrap.bundle.js"></script>
<script src="https://ux.verint.com/bootstrap-4.0.0/dist/other/bootstrap-tooltip-custom-class.js"></script>
<script src="https://ux.verint.com/bootstrap-4.0.0/dist/other/accessibility.js"></script>
<script src="https://ux.verint.com/bootstrap-4.0.0/dist/other/prism.min.js"></script>
<link rel="stylesheet" href="https://ux.verint.com/bootstrap-4.0.0/dist/other/prism-coy.min.css">

<script>
$(function () {
		  $('[data-toggle="tooltip"], [data-toggle-second="tooltip"]').tooltip({trigger: 'hover', delay: { "show": 100, "hide": 0 }});
		  
		  $('.is-invalid, .is-warning').on('shown.bs.tooltip', function () {
			  var x = $(this).offset().left + $(this).width();
			  var y = $(this).offset().top;
			  
			  $('.bs-tooltip-right').css('transform', 'translate3d('+x+'px, '+y+'px, 0px)');
		  });
		});
</script>

<div class="card">
    <div class="card-header">Menu Button <button id="toggleMarkup" type="button" class="btn btn-sm btn-outline-primary btn btn-fixed-width float-right m-0" onclick="$('pre' ).toggle()">Toggle Markup</button></div>
    <div class="card-body">
				<form>
					<div class="form-group row">
						<label for="inputKey" class="col-lg-2 col-form-label col-form-label-sm">Regular</label>
						<div class="col-lg-4">
							<button class="btn btn-outline-light btn-sm btn-fixed-width dropdown-toggle menu-dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Menu</button>
							<div class="dropdown-menu dropdown-menu-sm">
								<a class="dropdown-item" href="#">First Option</a> <a class="dropdown-item selected" href="#">Second Option</a> <a class="dropdown-item" href="#">Third Option</a> <a class="dropdown-item" href="#">Fourth Option</a>
								<div class="dropdown-divider"></div>
								<a class="dropdown-item" href="#">Fifth Option</a>
							</div>
						</div>
						<div class="col-lg-6">
							<pre class="language-html"><code><script type="prism-html-markup"><button class="btn btn-outline-light btn-sm btn-fixed-width dropdown-toggle menu-dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Menu</button>
<div class="dropdown-menu dropdown-menu-sm">
	<a class="dropdown-item" href="#">First Option</a>
	<a class="dropdown-item selected" href="#">Second Option</a>
	<a class="dropdown-item" href="#">Third Option</a>
	<a class="dropdown-item" href="#">Fourth Option</a>
	<div class="dropdown-divider"></div>
	<a class="dropdown-item" href="#">Fifth Option</a>
</div></script></code></pre>
						</div>
					</div>
					<div class="form-group row">
						<label for="inputKey" class="col-lg-2 col-form-label col-form-label-sm">Disabled</label>
						<div class="col-lg-4">
							<button class="btn btn-outline-light btn-sm btn-fixed-width dropdown-toggle menu-dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" disabled>Menu</button>
							<div class="dropdown-menu dropdown-menu-sm">
								<a class="dropdown-item" href="#">First Option</a> <a class="dropdown-item selected" href="#">Second Option</a> <a class="dropdown-item" href="#">Third Option</a> <a class="dropdown-item" href="#">Fourth Option</a>
								<div class="dropdown-divider"></div>
								<a class="dropdown-item" href="#">Fifth Option</a>
							</div>
						</div>
						<div class="col-lg-6">
							<pre class="language-html"><code><script type="prism-html-markup"><button class="btn btn-outline-light btn-sm btn-fixed-width dropdown-toggle menu-dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" disabled>Menu</button>
<div class="dropdown-menu dropdown-menu-sm">
	<a class="dropdown-item" href="#">First Option</a>
	<a class="dropdown-item selected" href="#">Second Option</a>
	<a class="dropdown-item" href="#">Third Option</a>
	<a class="dropdown-item" href="#">Fourth Option</a>
	<div class="dropdown-divider"></div>
	<a class="dropdown-item" href="#">Fifth Option</a>
</div></script></code></pre>
						</div>
					</div>
					<div class="form-group row">
						<label for="inputKey" class="col-lg-2 col-form-label col-form-label-sm">Error</label>
						<div class="col-lg-4">
							<button class="btn btn-outline-light btn-sm btn-fixed-width dropdown-toggle menu-dropdown-toggle is-invalid" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" data-toggle-second="tooltip" data-custom-class="input-error" data-placement="right" title="There is an Error on the Menu Button">Menu</button>
							<div class="dropdown-menu dropdown-menu-sm">
								<a class="dropdown-item" href="#">First Option</a> <a class="dropdown-item selected" href="#">Second Option</a> <a class="dropdown-item" href="#">Third Option</a> <a class="dropdown-item" href="#">Fourth Option</a>
								<div class="dropdown-divider"></div>
								<a class="dropdown-item" href="#">Fourth Option</a>
							</div>
						</div>
						<div class="col-lg-6">
							<pre class="language-html"><code><script type="prism-html-markup"><button class="btn btn-outline-light btn-sm btn-fixed-width dropdown-toggle menu-dropdown-toggle is-invalid" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"  data-toggle-second="tooltip" data-custom-class="input-error" data-placement="right" title="There is an Error on the Menu Button">Menu</button>
<div class="dropdown-menu dropdown-menu-sm">
	<a class="dropdown-item" href="#">First Option</a>
	<a class="dropdown-item selected" href="#">Second Option</a>
	<a class="dropdown-item" href="#">Third Option</a>
	<a class="dropdown-item" href="#">Fourth Option</a>
	<div class="dropdown-divider"></div>
	<a class="dropdown-item" href="#">Fifth Option</a>
</div></script></code></pre>
						</div>
					</div>
					<div class="form-group row">
						<label for="inputKey" class="col-lg-2 col-form-label col-form-label-sm">Warning</label>
						<div class="col-lg-4">
							<button class="btn btn-outline-light btn-sm btn-fixed-width dropdown-toggle menu-dropdown-toggle is-warning" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" data-toggle-second="tooltip" data-custom-class="input-warning" data-placement="right" title="There is a Warning on the Menu Button">Menu</button>
							<div class="dropdown-menu dropdown-menu-sm">
								<a class="dropdown-item" href="#">First Option</a> <a class="dropdown-item selected" href="#">Second Option</a> <a class="dropdown-item" href="#">Third Option</a> <a class="dropdown-item" href="#">Fourth Option</a>
								<div class="dropdown-divider"></div>
								<a class="dropdown-item" href="#">Fourth Option</a>
							</div>
						</div>
						<div class="col-lg-6">
							<pre class="language-html"><code><script type="prism-html-markup"><button class="btn btn-outline-light btn-sm btn-fixed-width dropdown-toggle menu-dropdown-toggle is-warning" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"  data-toggle-second="tooltip" data-custom-class="input-warning" data-placement="right" title="There is a Warning on the Menu Button">Menu</button>
<div class="dropdown-menu dropdown-menu-sm">
	<a class="dropdown-item" href="#">First Option</a>
	<a class="dropdown-item selected" href="#">Second Option</a>
	<a class="dropdown-item" href="#">Third Option</a>
	<a class="dropdown-item" href="#">Fourth Option</a>
	<div class="dropdown-divider"></div>
	<a class="dropdown-item" href="#">Fifth Option</a>
</div></script></code></pre>
						</div>
					</div>
				</form>
			</div>
		</div>