Kotak kombo Tailwind CSS khusus CSS dengan pemfilteran penelusuran langsung dan daftar tarik-turun yang dapat diakses. Navigasi keyboard, varian warna. WCAG AA dapat diakses, bekerja dengan Django, HTMX, Laravel, React, dan tumpukan apa pun.
Combobox menggabungkan input teks dengan daftar dropdown. Gunakan komponen input untuk bidang — varian ukuran, warna, dan status berasal dari sana. Utilitas combobox-* hanya menangani daftar dropdown, item, dan status terbuka.
Hanya CSS, tidak diperlukan JavaScript. WCAG AA dapat diakses dan tidak memiliki kerangka kerja — bekerja dengan Django, HTMX, Laravel, React, dan tumpukan apa pun.
| Kelas | Jenis | Keterangan |
|---|---|---|
| combobox-list | Basis | Wadah daftar tarik-turun untuk opsi kotak kombo |
| combobox-item | Pengubah | Opsi individual di dalam daftar dropdown |
| combobox-open | Pengubah | Menampilkan daftar dropdown saat diterapkan ke pembungkus |
| combobox-primary | Warna | Sorotan warna tema utama untuk item |
| combobox-secondary | Warna | Sorotan warna tema sekunder untuk item |
| combobox-accent | Warna | Sorotan warna tema aksen untuk item |
| combobox-info | Warna | Info sorotan warna semantik |
| combobox-success | Warna | Sorotan warna semantik sukses |
| combobox-warning | Warna | Sorotan warna semantik peringatan |
| combobox-error | Warna | Kesalahan sorotan warna semantik |
Penggunaan Dasar
Bungkus input dan combobox-list dalam wadah relative. Tambahkan combobox-open ke pembungkus untuk menampilkan daftar — alihkan melalui JS atau :focus-within.
1 2 3 4 5 6 7 8 9 | <div class="relative w-64 combobox-open"> <input type="text" class="input w-full" placeholder="Search or select..."> <ul class="combobox-list"> <li class="combobox-item">React</li> <li class="combobox-item combobox-item-active">Vue</li> <li class="combobox-item">Angular</li> <li class="combobox-item">Svelte</li> </ul> </div> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import { useCombobox } from 'frutjam/react' const frameworks = ['React', 'Vue', 'Angular', 'Svelte'] export default function ComboboxDemo() { const combo = useCombobox({ items: frameworks }) return ( <div {...combo.containerProps} className="relative w-64"> <input {...combo.inputProps} className="input w-full" placeholder="Search or select..." /> <ul className="combobox-list" role="listbox"> {combo.filtered.map((item, i) => ( <li key={item} {...combo.optionProps(item, i)} className="combobox-item">{item}</li> ))} </ul> </div> ) } |
Buka pada Fokus
Gunakan focus-within:combobox-open pada wrapper untuk membuka daftar ketika input terfokus — tidak diperlukan JavaScript.
1 2 3 4 5 6 7 8 9 | <div class="relative w-64 focus-within:combobox-open"> <input type="text" class="input w-full" placeholder="Focus to open..."> <ul class="combobox-list"> <li class="combobox-item">React</li> <li class="combobox-item">Vue</li> <li class="combobox-item">Angular</li> <li class="combobox-item">Svelte</li> </ul> </div> |
Ukuran
Gunakan input-sm, input-lg, dll. pada kolom input. Dropdown beradaptasi secara alami.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <div class="relative w-64 combobox-open"> <input type="text" class="input input-sm w-full" placeholder="Small"> <ul class="combobox-list"> <li class="combobox-item">Banana</li> <li class="combobox-item combobox-item-active">Mango</li> <li class="combobox-item">Papaya</li> </ul> </div> <div class="relative w-64 combobox-open"> <input type="text" class="input input-lg w-full" placeholder="Large"> <ul class="combobox-list"> <li class="combobox-item">Banana</li> <li class="combobox-item combobox-item-active">Mango</li> <li class="combobox-item">Papaya</li> </ul> </div> |
Warna
Gunakan input-primary dll. pada input untuk warna bidang. Tambahkan combobox-primary yang cocok ke pembungkus untuk mewarnai sorotan item aktif.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <div class="relative w-64 combobox-open combobox-primary"> <input type="text" class="input input-primary w-full" placeholder="Primary"> <ul class="combobox-list"> <li class="combobox-item">React</li> <li class="combobox-item combobox-item-active">Vue</li> <li class="combobox-item">Angular</li> </ul> </div> <div class="relative w-64 combobox-open combobox-error"> <input type="text" class="input input-error w-full" placeholder="Error"> <ul class="combobox-list"> <li class="combobox-item">React</li> <li class="combobox-item combobox-item-active">Vue</li> <li class="combobox-item">Angular</li> </ul> </div> |
Dengan disabilitas
1 2 3 | <div class="relative w-64"> <input type="text" class="input w-full" placeholder="Disabled" disabled> </div> |
Dengan Tombol
Tulis dengan join untuk melampirkan ikon pencarian atau tombol pemicu.
1 2 3 4 5 6 7 8 9 10 11 12 | <div class="relative w-64 combobox-open"> <div class="join w-full"> <span class="join-item btn btn-soft">🔍</span> <input type="text" class="input join-item" placeholder="Search..."> </div> <ul class="combobox-list"> <li class="combobox-item">React</li> <li class="combobox-item combobox-item-active">Vue</li> <li class="combobox-item">Angular</li> <li class="combobox-item">Svelte</li> </ul> </div> |
Item sebagai Tautan atau Tombol
combobox-item berfungsi pada elemen apa pun — <li>, <a>, atau <button>.
1 2 3 4 5 6 7 8 | <div class="relative w-64 combobox-open"> <input type="text" class="input w-full" placeholder="Search pages..."> <ul class="combobox-list"> <a href="#" class="combobox-item">Home</a> <a href="#" class="combobox-item combobox-item-active">About</a> <button class="combobox-item">Contact</button> </ul> </div> |
JS & Pembantu React
Gunakan createCombobox dari frutjam/js atau useCombobox dari frutjam/react untuk mendapatkan pemfilteran, navigasi keyboard (↑ ↓ Enter Escape), dan wiring aria-* lengkap. Dengarkan event fj:select untuk menangani seleksi.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <div class="relative w-64" id="js-combobox"> <input type="text" class="input w-full" placeholder="Search frameworks..."> <ul class="combobox-list"> <li class="combobox-option" data-value="react">React</li> <li class="combobox-option" data-value="vue">Vue</li> <li class="combobox-option" data-value="angular">Angular</li> <li class="combobox-option" data-value="svelte">Svelte</li> </ul> </div> <script type="module"> import { createCombobox } from 'frutjam/js' const combo = createCombobox(document.getElementById('js-combobox')) document.getElementById('js-combobox').addEventListener('fj:select', (e) => { console.log('Selected:', e.detail.value) }) </script> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import { useCombobox } from 'frutjam/react' const frameworks = [ { label: 'React', value: 'react' }, { label: 'Vue', value: 'vue' }, { label: 'Angular', value: 'angular' }, { label: 'Svelte', value: 'svelte' }, ] export default function ComboboxDemo() { const combo = useCombobox({ items: frameworks }) return ( <div {...combo.containerProps} className="relative w-64"> <input {...combo.inputProps} className="input w-full" placeholder="Search frameworks..." /> <ul {...combo.listboxProps} className="combobox-list"> {combo.filtered.map((item, i) => ( <li key={item.value} {...combo.optionProps(item, i)}>{item.label}</li> ))} </ul> </div> ) } |
Using Claude Code, Cursor, or another AI editor?
Cherry MCP memberi editor AI Anda nama dan struktur kelas kotak kombo yang tepat sesuai permintaan. Tidak ada lagi kelas berhalusinasi.