Skip to content
Bugwise
Menu
UI Components

Dropdown / Select

A compact control that hides a list of options until you open it. Learn the native and custom variants, when a dropdown is the wrong choice, and the bugs testers find in long lists and dependent fields.

35 min Inputs & selection iOS · Android · Web Also called: Select, Picker, Combo box, Menu

Choosing your country at checkout, a T-shirt size in a fashion app, a sort order in a hotel search: whenever an app needs one answer from a known list, there’s a good chance it uses a dropdownDropdownA control that shows the selected option and opens a list of options when tapped.Open in glossary →. It saves space by hiding the options until you need them.

That hiding is also its weakness. Testers have to open it, scroll it, search it, use it with a keyboard, and check what happens when another field changes. Let’s see how.

What is a dropdown?

A dropdown (also called a select or picker) is a closed field that shows the current value and opens a list of options when you tap it. You pick one option (or several, in a multi-select), and the list closes again.

You’ll usually see dropdowns used for:

  • Long, known lists: country, state, language, currency.
  • Settings with many values: sort order, items per page, time zone.
  • Product choices: size, color, quantity.
  • Dependent choices: car make → model, country → city.

Anatomy

  1. 1

    Label

    Says what you are choosing. Stays visible after a value is picked.

  2. 2

    Trigger (field)

    Shows the current value, or a placeholder like "Select…" when nothing is chosen.

  3. 3

    Indicator (chevron)

    Signals that a list opens. Often flips when the menu is open.

  4. 4

    Menu (listbox)

    The floating list of options. Scrolls when there are many.

  5. 5

    Option

    One choice. Can be disabled (dimmed, not selectable).

  6. 6

    Selected option

    The current value, marked with a checkmark or a tint.

  7. 7

    Highlighted option

    Where the mouse or keyboard focus is right now. Not the same as selected!

  8. 8

    Helper text

    Extra guidance, replaced by an error message when needed.

How it differs from similar components

ComponentOptions visibleSelectionBest for
Dropdown / selectHidden until openedOne (or many, in a multi-select)5–15 options when space is tight
Combo box (searchable dropdown)Hidden; filtered as you typeOneLong lists: countries, cities, airports
Segmented controlAll, in one rowExactly one2–5 short options that switch a view
Radio buttonsAll, stackedExactly one2–6 options, especially with longer labels
Bottom sheet / pickerSlides up from the bottom (mobile)One or manyLong or rich lists on phones, with search or descriptions
MenuHidden until openedNone: you trigger an actionCommands like Edit, Share, Delete, not values
Dev note

On the web it’s a <select> element or a custom listbox/combobox. iOS uses a pop-up button (a menu with a checkmark) or a picker (the scrolling wheel). Material Design on Android calls it an exposed dropdown menu, and Android developers often say Spinner. A menu that runs actions is not a dropdown, even if it looks like one.

Designs & variants

Native dropdowns are drawn by the browser or the operating system, so they’re usually robust. Custom ones look nicer, but every behavior (keyboard, positioning, screen readers) has to be rebuilt by the team, and that’s where bugs hide.

All of these work: open them with the mouse, then try the keyboard (Tab, arrows, Enter, Esc, or type a letter).

Native select

Web

A real <select>. The browser draws the list, so on phones you get the system picker for free. Hard to style, easy to trust.

Sort by

Custom dropdown

Web

Built from scratch to match the brand. Looks nicer, but keyboard support, screen readers and positioning are now the team's job.

Delivery

Pop-up button menu

iOS

Tap the blue value and a menu appears right there, with a checkmark on the current choice. Good for 3–7 options.

36
37
38
39
40
41
42
43
44
45
46

Shoe size (EU): 40

Wheel picker

iOS

Scroll the wheel until your value sits in the band. Classic for dates, times and sizes. Test that the value actually saves when you stop.

Exposed dropdown menu

Android · Material 3

An outlined field with a floating label and a menu that opens underneath. The selected item gets a tinted background.

Searchable combo box

All

Type to filter long lists. A good one ignores case and accents: try 'cote', 'sao tome' or 'turkiye'.

Dietary preferences

Multi-select

Web · Android

Checkboxes inside a dropdown. The menu stays open while you pick. Test 0, 1, all, and how the field shows many choices.

Country
City

Dependent dropdowns

All

The city list depends on the country. City stays disabled until a country is chosen, and resets when the country changes.

When to use it

A dropdown is a good choice when:

  • There are more than about 5 options and showing them all would take too much space.
  • The options are familiar to users (they know their country, they don’t need to compare).
  • There’s a sensible default, or the user picks once and rarely changes it.
  • For long lists (15+), add search. Then it becomes a combo box.

Good and bad uses

Few options: show them all

Gift wrap

Both options are visible and one tap away.

Hiding two options in a dropdown

Gift wrap

Two taps to see two options, and nothing tells the user there’s a price difference. Use radio buttons or a segmented control.

A clear placeholder

Country

Required for shipping

The user has to make a real choice. Submitting without one shows an error.

First option pre-selected

Country

Users skip the field without noticing, and the shop receives hundreds of orders “from Afghanistan”. A wrong default is worse than none.

Long list: let users search

Countries, cities, airports and banks belong in a combo box: type “cro” and Croatia appears. On phones, a full-screen list or bottom sheet with a search field works well too. Try the searchable combo box in the gallery above.

Long list: endless scrolling

Country
Select a country
  • Afghanistan
  • Åland Islands
  • Albania
  • Algeria
  • American Samoa
  • Andorra
  • Angola
  • Anguilla

Around 200 countries and territories, 5 visible at a time. Scrolling to “Croatia” is slow, and finding “United Kingdom” is painful.

Common bugs

These are the dropdown bugs testers report most often.

#BugWhat you seeTypical severity
1Dependent field not resetYou change the country, but the old city stays selected, so the order ships to “Zagreb, Serbia”High
2Menu clipped or off-screenNear the bottom of the screen (or inside a card) the list is cut off and the last options can’t be reachedHigh
3No keyboard supportTab skips the dropdown, or arrows, Enter and Esc do nothingHigh (for affected users)
4Strict search“ceske” doesn’t find “České Budějovice”; “zagreb” doesn’t find “Zagreb”Medium
5Unsorted list or duplicatesCities appear in random order, “Split” is listed twiceLow–Medium
6Doesn’t closeClicking outside or scrolling the page leaves the menu floating on top of the formMedium
7Selected value not shownAfter choosing, the field still says “Select…” (but the value was saved)Medium
8Wrong defaultThe first option is pre-selected, or the saved value isn’t shown when you come back to editHigh
9Placeholder can be submitted“Select a country” is accepted as if it were a real valueMedium
10Long labels truncated“Tomorrow, 16:00–2…” or long translations are cut off in the field or menuMedium
11Highlighted ≠ selectedMoving the mouse over an option changes the value without clickingMedium
12Screen reader silenceVoiceOver or TalkBack says “button” or “clickable” with no label and no valueHigh (for affected users)

Stress-test it

A long list is only usable if search and sorting respect real names with real letters. Compare a naive implementation with a robust one:

🧪 Search & sort lab

A long list needs search, and search is where dropdowns break. Type a query (or pick one) and compare a naive search with a robust one.

Sort order

The order the data came from the database. Users can't predict where anything is.

Naive search

label.includes(query)

  • Zagreb
  • Šibenik
  • Split
  • Čakovec
  • Đakovo
  • Osijek
  • Beograd
  • Niš
  • Novi Sad
  • Ljubljana
  • Kraków
  • Łódź
  • Gdańsk
  • Zürich
  • München
  • Köln
  • Malmö
  • Wien
  • Brno
  • Plzeň
  • České Budějovice
  • São Paulo
  • Ćuprija
  • Antwerpen

24 of 24 cities

Robust search

ignore case + accents + extra spaces

  • Zagreb
  • Šibenik
  • Split
  • Čakovec
  • Đakovo
  • Osijek
  • Beograd
  • Niš
  • Novi Sad
  • Ljubljana
  • Kraków
  • Łódź
  • Gdańsk
  • Zürich
  • München
  • Köln
  • Malmö
  • Wien
  • Brno
  • Plzeň
  • České Budějovice
  • São Paulo
  • Ćuprija
  • Antwerpen

24 of 24 cities

Empty query: both show the whole list. Now try "ceske" or "lodz".

Find the bug

The checkout form below has six bugs in its dropdowns. Test it like a real customer, then like a tester:

  • Choose a country and city, then change the country.
  • Search for countries in lowercase and without accents.
  • Try every option in every list, including the last ones.
  • Put the mouse away and use only the keyboard.
  • Open a list and click somewhere else.

🐞 Bug hunt: Checkout

This demo has 6 hidden bugs. Explore it like a tester, then check your findings.

Found0/6
shop.example.com

Checkout

Shipping address

City

Select a city
Free delivery over €50
Delivery slot

Try the mouse and the keyboard (Tab, arrows, Enter, Esc).

Network log

Place the order to see the request body…

  1. 1

    Hint: Choose a country and a city, then change the country.

  2. 2

    Hint: Search for a country in lowercase, or without accents.

  3. 3

    Hint: Open Delivery slot and try to pick a Saturday slot with the mouse.

  4. 4

    Hint: Press Tab from the Country field.

  5. 5

    Hint: Open the City list, then click somewhere else on the page.

  6. 6

    Hint: Read the city list for Hrvatska or Srbija carefully.

How to test it

Checklist

Dropdown test checklist

0 of 14 checked

Example test cases

TC-DD-001Selected value is displayed after choosing

Steps

  1. Open Checkout
  2. Open the Delivery slot dropdown
  3. Choose "Tomorrow, 12:00–16:00"

Expected result

The menu closes and the field shows "Tomorrow, 12:00–16:00".

TC-DD-002City resets when the country changes

Steps

  1. Choose Country "Hrvatska"
  2. Choose City "Zagreb"
  3. Change Country to "Srbija"
  4. Open the City dropdown

Expected result

City is cleared and shows the placeholder. The list contains only Serbian cities.

TC-DD-003Search ignores case and accents

Steps

  1. Click the Country field
  2. Type "ceska"
  3. Clear and type "HRVATSKA"
  4. Clear and type "osterreich"

Expected result

Each query shows the matching country: Česká republika, Hrvatska, Österreich.

TC-DD-004Search with no results

Steps

  1. Click the Country field
  2. Type "xyz"

Expected result

A "No matches" message is shown. Pressing Enter does not select anything.

TC-DD-005Last option can be selected near the bottom of the screen

Preconditions

  • Phone in landscape, or browser window 600 px high

Steps

  1. Scroll so the Delivery slot field is near the bottom edge
  2. Open the dropdown
  3. Tap the last option

Expected result

All options are visible (the menu opens upwards or scrolls), and the last option can be selected.

TC-DD-006Keyboard-only selection

Steps

  1. Press Tab until the City dropdown is focused
  2. Press Arrow Down
  3. Press Arrow Down twice
  4. Press Enter
  5. Press Arrow Down, then Esc

Expected result

Focus is visible on the field; the list opens; the highlight moves; Enter selects the 3rd city and closes the list; Esc closes the list without changing the value.

TC-DD-007Clicking outside closes the menu

Steps

  1. Open the City dropdown
  2. Click on an empty area of the page

Expected result

The menu closes and the previously selected value is unchanged.

TC-DD-008Required dropdown blocks submit

Steps

  1. Leave Delivery slot on "Choose a slot"
  2. Fill in all other fields
  3. Tap "Place order"

Expected result

The order is not placed. The Delivery slot field shows "Choose a delivery slot".

TC-DD-009Saved value is shown when editing

Preconditions

  • An address with Country "Slovenija" and City "Maribor" is saved

Steps

  1. Open Account › Addresses
  2. Tap Edit on the saved address

Expected result

Country shows "Slovenija" and City shows "Maribor" (not the placeholder or the first option).

Tip: click a test case to expand it.

Accessibility

Custom dropdowns are one of the most common accessibility failures on the web. Check these:

Mobile vs web

  • Pop-up buttons show a menu with a checkmark. Good for short lists.
    Dev note
    UIButton with a menu, or Picker with the .menu style in SwiftUI.
  • Wheel pickers are used for dates, times and sizes. Test that the value saves when you stop scrolling, not only when you tap Done.
    Dev note
    UIPickerView, UIDatePicker, .wheel style.
  • A web <select> in Safari opens the native iOS picker. Check long option labels there, because they get truncated.
  • Long lists usually open a new screen with a search field instead of a menu.
  • Test with VoiceOver (the rotor and swipe up/down adjust picker values) and the largest Dynamic Type size.
  • Material 3 exposed dropdown menu; older apps use a spinner.
    Dev note
    ExposedDropdownMenuBox in Compose, TextInputLayout + AutoCompleteTextView in Views; the older one is a Spinner.
  • The menu can open above the field when there’s no room below. Test near the bottom of the screen and with the keyboard open.
  • The system Back button should close an open menu without leaving the screen.
  • Long lists often use a bottom sheet or a full-screen search instead.
  • Test with TalkBack, font scale and display size settings.

Check your understanding

Quick quiz

0/5 answered · 0 correct

  1. 1.A form asks "Gift wrap?" with only "Yes" and "No". Which component fits best?

  2. 2.You choose Hrvatska and Zagreb, then change the country to Srbija. The city still shows Zagreb. What kind of bug is this?

  3. 3.Which search query is MOST likely to reveal a search bug in a city combo box?

  4. 4.The last two options of a dropdown are cut off at the bottom of a card. What should the dropdown do?

  5. 5.What is the difference between a highlighted and a selected option?

Key takeaways

  • A dropdown hides a known list of options behind a compact field. Use it for 5+ familiar options; add search for long lists.
  • For 2–5 options, radio buttons or a segmented control are usually better. A menu runs actions and is a different component.
  • Prefer a clear placeholder over a random pre-selected first option, and make required dropdowns block submit.
  • The classic bugs: dependent fields not reset, clipped menus, no keyboard support, strict search, unsorted or duplicate options, and menus that won’t close.
  • Always test the first and last option, changing the parent field, lowercase and accent-free search, and keyboard-only use.

Finished this page?Nice work, this page is complete!

Mark it as done to track your progress. It's saved in this browser, no account needed.

Its review cards are now in Bites ⚡
Esc

Type to search the whole site.