Base UI (Angular) select is a custom listbox, not a styled native select. Install custom-select with the CLI, bind ngModel, and get empty, error, and disabled states that match the rest of the forms kit. Use it when you need consistent Tailwind chrome across browsers.
Install with npx base-ui-cli add custom-select.
Playground
<base-custom-select [options]="cars" displayKey="label" valueKey="value" [(ngModel)]="selectedCar" placeholder="Choose a car…"> </base-custom-select>
Use <option> tag inside <base-select> component and you'll get the expected result. As usual the first element works as a placeholder. See example before
You can use the placeholder attribute to show a descriptive text when no option is selected.
Use [disabled]="true" inside <base-select> tag to disable that select.
The <base-custom-select> is a non-native styling component that provides more control over the appearance.
Use the size property to change the height of the select component. Available sizes match our standard inputs: 'sm' | 'default' | 'xl'.
Disabled is a native attribute. Empty options still show the trigger. Keep validation copy next to the control — do not nest base-custom-select in base-input-group.
Site-wide VPAT-style notes live on the accessibility report.
Run the following command to add this component to your project:
npx base-ui-cli add custom-select npx base-ui-cli add select
For AI agents
Copy a prompt with the registry name, CLI install, and import — or add the Base UI MCP server.
npx -y base-ui-mcp
Base UI provides standalone components. Import the exact elements you want to use into your component.
// Install: npx base-ui-cli add custom-select
// Paths are relative to aliases.components (default: src/app/components)
import { CustomSelectComponent } from './custom-select/custom-select.component';
@Component({
selector: 'app-your-component',
imports: [
CustomSelectComponent
],
template: `...`
})
export class YourComponent {} API for custom-select — generated from JSDoc in the library source.
| API | Member | Type | Default | Description |
|---|---|---|---|---|
base-custom-select | class | string | '' | Additional host CSS classes (merged via cn()). |
base-custom-select | label | string | '' | — |
base-custom-select | placeholder | unknown | 'Select an option' | — |
base-custom-select | options | unknown[] | [] | — |
base-custom-select | displayKey | unknown | 'label' | — |
base-custom-select | valueKey | unknown | 'value' | — |
base-custom-select | multiple | boolean | false | — |
base-custom-select | (selectionChange) | void | — | Emits when selectionChange occurs. |
Content