Skip to content
UI

Search docs

Search components and documentation

New
Menu

Native Select

A styled wrapper around the native <select> element — platform-native option list and behavior with a token-matched look.

Installation

npx logic2b@latest add native-select

Usage

import { NativeSelect } from "@/components/ui/native-select"

<NativeSelect defaultValue="apple" className="w-[180px]">
  <option value="apple">Apple</option>
  <option value="banana">Banana</option>
</NativeSelect>

Native Select vs. Select

Use NativeSelect instead of Select when you want the browser’s own picker rather than a custom listbox:

  • Mobile — opens the OS-native wheel/sheet picker instead of a popover, which is what most users expect on touch devices.
  • Long option lists — native scrolling and type-ahead, no virtualization needed.
  • Forms without JS interactivity budget — it’s a real <select>, so it works with native form submission and <form> validation out of the box.

Reach for Select instead when you need custom option content (icons, descriptions, grouping headers) or a listbox that visually matches Radix’s popover styling exactly.

Examples

Disabled

API

Prop Type Default
size sm | default default
disabled boolean false
aria-invalid boolean
…props React.ComponentProps<"select">

Accessibility

Renders a real <select> element, so it inherits the browser’s built-in listbox semantics and keyboard support for free:

  • Opens with Enter/Space/, closes with Esc or a selection.
  • Type-ahead jumps to the first matching option.
  • Assistive technology announces the control as a native select — no ARIA wiring needed.
  • Pair with a <label htmlFor> (or wrap in a Field) for an accessible name.