| UI or UX | UI + UX - Broken custom widget anti-pattern | UI + UX - Single-choice dropdown control | UI + UX - Input widget with suggestion behavior | UI + UX - Multi-value picker widget |
| UI guidance | Replace fake select markup with a native select unless a custom listbox, combobox, or multi-select contract is truly required and fully implemented. | Render a persistent label, hint text, native closed value, finite option list, selected option, and validation state. | Expose clear visual states for expanded, focused, highlighted, and selected options. | Render a filter input, open option list, selected-value chips, remove controls, checked option states, clear-all control, and validation state. |
| UX guidance | Let every user complete the same choice with pointer, keyboard, touch, voice, and assistive technology instead of making styling work for only one input method. | Help the person reach a clear task outcome. | Preserve typed input and make selection reversible before submission. | Help users choose multiple values from a large, compact, or dynamic option set. |
| Good UI | A native select keeps its persistent label, selected value, required validation, and platform keyboard behavior. | Persistent label, hint text, visible selected value, readable options, and clear required validation state. | Persistent label above the input, readable text size, clear popup alignment, and visible highlighted option. | Selected values are shown as removable chips or checked rows with clear labels. |
| Bad UI | The selected visual label changes but the submitted form value remains empty. | Placeholder as the only label. | Placeholder-only label that disappears after typing. | Selected values hidden inside a closed dropdown. |
| Good UX | Screen reader users hear the label, current value, expanded state, available options, and selected value. | Users can open, scan, choose one value, and review the selected value after close. | Typing filters suggestions while preserving the exact typed value. | Selection limits and duplicates are handled before submit. |
| Bad UX | Focus lost on close or trapped in a portal. | Hiding two obvious critical choices in a dropdown. | Automatically forcing the first suggestion into the field. | Removing a value is impossible by keyboard. |
| Best fit | Use this anti-pattern entry to audit custom dropdowns, styled select replacements, portal menus, command-palette-like selectors, and generated UIs that imitate native controls. | The user chooses one option from a moderate known list. | The list is long but values are known. | Users choose many values from a long predefined list. |
| Avoid when | The custom component fully implements the appropriate listbox, combobox, or multi-select contract and has been tested with keyboard and assistive technology. | The option set is short and comparison matters. | The task is open-ended query exploration. | The set is short and independent choices should stay visible. |
| Required state | Closed state with persistent label, current value, and collapsed state. | Closed state with empty option or current selected value. | Empty input state. | Open filtered option list state. |
| Accessibility burden | Expose name, role, value, expanded state, popup relationship, active option, and selected option state when implementing custom choice widgets. | Prefer native semantics or implement equivalent name, role, state, and keyboard behavior. | Expose combobox expanded state, active descendant, and option labels. | Expose selected state for options and labels for remove controls. |
| Common misuse | Closing the menu before keyboard or assistive technology users can inspect options. | Using select to hide two or three obvious choices that should be compared. | Using autocomplete where users expect broad search results. | Hiding selected values inside a closed menu. |