Select
Native HTML select dropdown with styled wrapper.
Native Select
Plain <select> with no DaisyUI classes — the browser's
own rendering, included as a baseline reference.
Styled Native Select
Same native element, styled with DaisyUI's select classes —
still a real <select>, so it keeps full native
keyboard, screen-reader, and mobile picker behavior for free.
Small
Medium (default)
Large
<select class="select select-bordered w-full">
<option value="">Select a country…</option>
<option value="id">Indonesia</option>
</select>
Grouped Options
Native <optgroup> sections options under a label —
no DaisyUI or custom CSS needed, the browser renders the grouping.
Custom Dropdown
Each option needs a color swatch and a description line, which a
native <option> can't render — full keyboard
navigation (arrows, enter, escape) is still implemented so it's
not a regression versus the native element it replaces.
- ✓
<div class="sc-csel" x-data="customSelect({ items: plans, initial: 'starter' })">
<button @click="toggle()">...</button>
<ul x-show="open">
<template x-for="item in items" :key="item.value">
<li @click="choose(item)">...</li>
</template>
</ul>
</div>
States
Disabled, error, and success states using DaisyUI's color modifiers.
Disabled
Error
Country is required.Success
Looks good.
Reach for the native <select> (Variants 1–3) whenever option
content is plain text — it's free, accessible, and works on every device's own
picker UI. Reach for the custom dropdown (Variant 4) only when an option needs
markup a native <option> can't render, like the swatch and
description here. For search or tagging within a select, see
Tom Select instead of building
another custom dropdown.