--- meta: title: Select description: Selects allow you to choose items from a menu of predefined options. layout: component --- ```html:preview Option 1 Option 2 Option 3 Option 4 Option 5 Option 6 ``` ```jsx:react import { SlOption, SlSelect } from '@shoelace-style/shoelace/dist/react'; const App = () => ( Option 1 Option 2 Option 3 Option 4 Option 5 Option 6 ); ``` :::tip This component works with standard `
` elements. Please refer to the section on [form controls](/getting-started/form-controls) to learn more about form submission and client-side validation. ::: ## Examples ### Labels Use the `label` attribute to give the select an accessible label. For labels that contain HTML, use the `label` slot instead. ```html:preview Option 1 Option 2 Option 3 ``` ```jsx:react import { SlOption, SlSelect } from '@shoelace-style/shoelace/dist/react'; const App = () => ( Option 1 Option 2 Option 3 ); ``` ### Help Text Add descriptive help text to a select with the `help-text` attribute. For help texts that contain HTML, use the `help-text` slot instead. ```html:preview Novice Intermediate Advanced ``` ```jsx:react import { SlOption, SlSelect } from '@shoelace-style/shoelace/dist/react'; const App = () => ( Novice Intermediate Advanced ); ``` ### Placeholders Use the `placeholder` attribute to add a placeholder. ```html:preview Option 1 Option 2 Option 3 ``` ```jsx:react import { SlOption, SlSelect } from '@shoelace-style/shoelace/dist/react'; const App = () => ( Option 1 Option 2 Option 3 ); ``` ### Clearable Use the `clearable` attribute to make the control clearable. The clear button only appears when an option is selected. ```html:preview Option 1 Option 2 Option 3 ``` ```jsx:react import { SlOption, SlSelect } from '@shoelace-style/shoelace/dist/react'; const App = () => ( Option 1 Option 2 Option 3 ); ``` ### Filled Selects Add the `filled` attribute to draw a filled select. ```html:preview Option 1 Option 2 Option 3 ``` ```jsx:react import { SlOption, SlSelect } from '@shoelace-style/shoelace/dist/react'; const App = () => ( Option 1 Option 2 Option 3 ); ``` ### Pill Use the `pill` attribute to give selects rounded edges. ```html:preview Option 1 Option 2 Option 3 ``` ```jsx:react import { SlOption, SlSelect } from '@shoelace-style/shoelace/dist/react'; const App = () => ( Option 1 Option 2 Option 3 ); ``` ### Disabled Use the `disabled` attribute to disable a select. ```html:preview Option 1 Option 2 Option 3 ``` ```jsx:react import { SlOption, SlSelect } from '@shoelace-style/shoelace/dist/react'; const App = () => ( Option 1 Option 2 Option 3 ); ``` ### Multiple To allow multiple options to be selected, use the `multiple` attribute. It's a good practice to use `clearable` when this option is enabled. To set multiple values at once, set `value` to a space-delimited list of values. ```html:preview Option 1 Option 2 Option 3 Option 4 Option 5 Option 6 ``` ```jsx:react import { SlOption, SlSelect } from '@shoelace-style/shoelace/dist/react'; const App = () => ( Option 1 Option 2 Option 3 Option 4 Option 5 Option 6 ); ``` :::tip Note that multi-select options may wrap, causing the control to expand vertically. You can use the `max-options-visible` attribute to control the maximum number of selected options to show at once. ::: ### Setting Initial Values Use the `value` attribute to set the initial selection. When using `multiple`, use space-delimited values to select more than one option. ```html:preview Option 1 Option 2 Option 3 Option 4 ``` ```jsx:react import { SlDivider, SlOption, SlSelect } from '@shoelace-style/shoelace/dist/react'; const App = () => ( Option 1 Option 2 Option 3 ); ``` ### Grouping Options Use `` to group listbox items visually. You can also use `` to provide labels, but they won't be announced by most assistive devices. ```html:preview Section 1 Option 1 Option 2 Option 3 Section 2 Option 4 Option 5 Option 6 ``` ```jsx:react import { SlOption, SlSelect } from '@shoelace-style/shoelace/dist/react'; const App = () => ( Option 1 Option 2 Option 3 Option 4 Option 5 Option 6 ); ``` ### Sizes Use the `size` attribute to change a select's size. Note that size does not apply to listbox options. ```html:preview Option 1 Option 2 Option 3
Option 1 Option 2 Option 3
Option 1 Option 2 Option 3 ``` ```jsx:react import { SlOption, SlSelect } from '@shoelace-style/shoelace/dist/react'; const App = () => ( <> Option 1 Option 2 Option 3
Option 1 Option 2 Option 3
Option 1 Option 2 Option 3 ); ``` ### Placement The preferred placement of the select's listbox can be set with the `placement` attribute. Note that the actual position may vary to ensure the panel remains in the viewport. Valid placements are `top` and `bottom`. ```html:preview Option 1 Option 2 Option 3 ``` ```jsx:react import { SlOption, SlSelect } from '@shoelace-style/shoelace/dist/react'; const App = () => ( Option 1 Option 2 Option 3 ); ``` ### Prefix Icons Use the `prefix` slot to prepend an icon to the control. ```html:preview Option 1 Option 2 Option 3
Option 1 Option 2 Option 3
Option 1 Option 2 Option 3 ``` ```jsx:react import { SlIcon, SlOption, SlSelect } from '@shoelace-style/shoelace/dist/react'; const App = () => ( <> Option 1 Option 2 Option 3
Option 1 Option 2 Option 3
Option 1 Option 2 Option 3 ); ```