* Add prefix and suffix slot to sl-select component * Adding align-items: center in prefix/suffix and changing documentation to showcase using as visual aids
6.9 KiB
Select
[component-header:sl-select]
Selects allow you to choose one or more items from a dropdown menu.
<sl-select>
<sl-menu-item value="option-1">Option 1</sl-menu-item>
<sl-menu-item value="option-2">Option 2</sl-menu-item>
<sl-menu-item value="option-3">Option 3</sl-menu-item>
<sl-menu-divider></sl-menu-divider>
<sl-menu-item value="option-4">Option 4</sl-menu-item>
<sl-menu-item value="option-5">Option 5</sl-menu-item>
<sl-menu-item value="option-6">Option 6</sl-menu-item>
</sl-select>
?> This component doesn't work with standard forms. Use <sl-form> instead.
Examples
Placeholders
Use the placeholder attribute to add a placeholder.
<sl-select placeholder="Select one">
<sl-menu-item value="option-1">Option 1</sl-menu-item>
<sl-menu-item value="option-2">Option 2</sl-menu-item>
<sl-menu-item value="option-3">Option 3</sl-menu-item>
</sl-select>
Clearable
Use the clearable attribute to make the control clearable.
<sl-select placeholder="Clearable" clearable>
<sl-menu-item value="option-1">Option 1</sl-menu-item>
<sl-menu-item value="option-2">Option 2</sl-menu-item>
<sl-menu-item value="option-3">Option 3</sl-menu-item>
</sl-select>
Pill
Use the pill attribute to give selects rounded edges.
<sl-select pill>
<sl-menu-item value="option-1">Option 1</sl-menu-item>
<sl-menu-item value="option-2">Option 2</sl-menu-item>
<sl-menu-item value="option-3">Option 3</sl-menu-item>
</sl-select>
Disabled
Use the disabled attribute to disable a select.
<sl-select placeholder="Disabled" disabled>
<sl-menu-item value="option-1">Option 1</sl-menu-item>
<sl-menu-item value="option-2">Option 2</sl-menu-item>
<sl-menu-item value="option-3">Option 3</sl-menu-item>
</sl-select>
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. When using this option, value will be an array instead of a string.
<sl-select placeholder="Select a few" multiple clearable>
<sl-menu-item value="option-1">Option 1</sl-menu-item>
<sl-menu-item value="option-2">Option 2</sl-menu-item>
<sl-menu-item value="option-3">Option 3</sl-menu-item>
<sl-menu-divider></sl-menu-divider>
<sl-menu-item value="option-4">Option 4</sl-menu-item>
<sl-menu-item value="option-5">Option 5</sl-menu-item>
<sl-menu-item value="option-6">Option 6</sl-menu-item>
</sl-select>
Grouping Options
Options can be grouped visually using menu labels and menu dividers.
<sl-select placeholder="Select one">
<sl-menu-label>Group 1</sl-menu-label>
<sl-menu-item value="option-1">Option 1</sl-menu-item>
<sl-menu-item value="option-2">Option 2</sl-menu-item>
<sl-menu-item value="option-3">Option 3</sl-menu-item>
<sl-menu-divider></sl-menu-divider>
<sl-menu-label>Group 2</sl-menu-label>
<sl-menu-item value="option-4">Option 4</sl-menu-item>
<sl-menu-item value="option-5">Option 5</sl-menu-item>
<sl-menu-item value="option-6">Option 6</sl-menu-item>
</sl-select>
Sizes
Use the size attribute to change a select's size.
<sl-select placeholder="Small" size="small" multiple>
<sl-menu-item value="option-1">Option 1</sl-menu-item>
<sl-menu-item value="option-2">Option 2</sl-menu-item>
<sl-menu-item value="option-3">Option 3</sl-menu-item>
</sl-select>
<br>
<sl-select placeholder="Medium" size="medium" multiple>
<sl-menu-item value="option-1">Option 1</sl-menu-item>
<sl-menu-item value="option-2">Option 2</sl-menu-item>
<sl-menu-item value="option-3">Option 3</sl-menu-item>
</sl-select>
<br>
<sl-select placeholder="Large" size="large" multiple>
<sl-menu-item value="option-1">Option 1</sl-menu-item>
<sl-menu-item value="option-2">Option 2</sl-menu-item>
<sl-menu-item value="option-3">Option 3</sl-menu-item>
</sl-select>
Selecting Options Programmatically
The value property is bound to the current selection. As the selection changes, so will the value. To programmatically manage the selection, update the value property.
<div class="selecting-example">
<sl-select placeholder="">
<sl-menu-item value="option-1">Option 1</sl-menu-item>
<sl-menu-item value="option-2">Option 2</sl-menu-item>
<sl-menu-item value="option-3">Option 3</sl-menu-item>
</sl-select>
<br>
<sl-button data-option="option-1">Set 1</sl-button>
<sl-button data-option="option-2">Set 2</sl-button>
<sl-button data-option="option-3">Set 3</sl-button>
</div>
<script>
const container = document.querySelector('.selecting-example');
const select = container.querySelector('sl-select');
[...container.querySelectorAll('sl-button')].map(button => {
button.addEventListener('click', () => {
select.value = button.dataset.option;
});
});
</script>
Labels
Use the label attribute to give the select an accessible label. For labels that contain HTML, use the label slot instead.
<sl-select label="Select one">
<sl-menu-item value="option-1">Option 1</sl-menu-item>
<sl-menu-item value="option-2">Option 2</sl-menu-item>
<sl-menu-item value="option-3">Option 3</sl-menu-item>
</sl-select>
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.
<sl-select
label="Experience"
help-text="Please tell us your skill level."
>
<sl-menu-item value="option-1">Novice</sl-menu-item>
<sl-menu-item value="option-2">Intermediate</sl-menu-item>
<sl-menu-item value="option-3">Advanced</sl-menu-item>
</sl-select>
Prefix and Suffix
Use the prefix or suffix slot to add a prefix or suffix to the selected value
<sl-select label="Sort by" class="sort">
<sl-menu-item value="name.asc">Name (Asc)</sl-menu-item>
<sl-menu-item value="name.desc">Name (Desc)</sl-menu-item>
<sl-menu-item value="value.asc">Value (Asc)</sl-menu-item>
<sl-menu-item value="value.desc">Value (Desc)</sl-menu-item>
<sl-icon name="sort-down" slot="suffix"></sl-icon>
</sl-select>
<br>
<sl-select label="Transaction Price" class="price">
<sl-icon name="currency-bitcoin" slot="prefix"></sl-icon>
<sl-menu-item value="option-1">0.02</sl-menu-item>
<sl-menu-item value="option-2">0.04</sl-menu-item>
<sl-menu-item value="option-3">0.06</sl-menu-item>
</sl-select>
<style>
sl-select.sort sl-icon {
font-size: 24px;
}
sl-select.price sl-icon {
font-size: 24px;
}
</style>
<script>
const select = document.querySelector('sl-select.sort');
select.addEventListener('sl-change', event => {
const icon = select.value.startsWith('name') ? 'sort-alpha-down' : 'sort-numeric-down';
const variation = select.value.endsWith('asc') ? '' : '-alt';
select.querySelector('sl-icon').name = `${icon}${variation}`;
})
</script>
[component-metadata:sl-select]