Kodza

Combobox

A real select you can type into: the list filters as you type, accents and case aside, the matched letters underlined and the best match lit for Enter. Codes on the right are searched too.

Forms No dependencies comboboxautocompleteselectformkeyboard Added Nov 2026
/anim/combobox/ GitHub Fullscreen

With your AI

Just ask.

Say it to your AI. It gets the exact code below, not its best guess, and knows where it goes.

Add the Kodza Combobox to my page.

Not plugged in yet?
claude mcp add -t http kodza https://kodza.dev/api/mcp
Also in Codex, Cursor and VS Code.
kodza-combobox.html
<div class="kodza-combobox">
  <label class="kodza-combobox__box">
    <span class="kodza-combobox__label">Country</span>
    <select class="kodza-combobox__native" name="country" required>
      <option value="" selected hidden></option>
      <option value="ar" data-meta="AR">Argentina</option>
      <option value="au" data-meta="AU">Australia</option>
      <option value="at" data-meta="AT">Austria</option>
      <option value="be" data-meta="BE">Belgium</option>
      <option value="br" data-meta="BR">Brazil</option>
      <option value="ca" data-meta="CA">Canada</option>
      <option value="cl" data-meta="CL">Chile</option>
      <option value="cn" data-meta="CN">China</option>
      <option value="co" data-meta="CO">Colombia</option>
      <option value="ci" data-meta="CI">Côte d’Ivoire</option>
      <option value="cz" data-meta="CZ">Czechia</option>
      <option value="dk" data-meta="DK">Denmark</option>
      <option value="eg" data-meta="EG">Egypt</option>
      <option value="ee" data-meta="EE">Estonia</option>
      <option value="fi" data-meta="FI">Finland</option>
      <option value="fr" data-meta="FR">France</option>
      <option value="de" data-meta="DE">Germany</option>
      <option value="gh" data-meta="GH">Ghana</option>
      <option value="gr" data-meta="GR">Greece</option>
      <option value="is" data-meta="IS">Iceland</option>
      <option value="in" data-meta="IN">India</option>
      <option value="id" data-meta="ID">Indonesia</option>
      <option value="ie" data-meta="IE">Ireland</option>
      <option value="it" data-meta="IT">Italy</option>
      <option value="jp" data-meta="JP">Japan</option>
      <option value="ke" data-meta="KE">Kenya</option>
      <option value="mx" data-meta="MX">Mexico</option>
      <option value="ma" data-meta="MA">Morocco</option>
      <option value="nl" data-meta="NL">Netherlands</option>
      <option value="nz" data-meta="NZ">New Zealand</option>
      <option value="ng" data-meta="NG">Nigeria</option>
      <option value="no" data-meta="NO">Norway</option>
      <option value="pe" data-meta="PE">Peru</option>
      <option value="pl" data-meta="PL">Poland</option>
      <option value="pt" data-meta="PT">Portugal</option>
      <option value="re" data-meta="RE">Réunion</option>
      <option value="sn" data-meta="SN">Senegal</option>
      <option value="sg" data-meta="SG">Singapore</option>
      <option value="za" data-meta="ZA">South Africa</option>
      <option value="kr" data-meta="KR">South Korea</option>
      <option value="es" data-meta="ES">Spain</option>
      <option value="se" data-meta="SE">Sweden</option>
      <option value="ch" data-meta="CH">Switzerland</option>
      <option value="tr" data-meta="TR">Türkiye</option>
      <option value="gb" data-meta="GB">United Kingdom</option>
      <option value="us" data-meta="US">United States</option>
      <option value="uy" data-meta="UY">Uruguay</option>
      <option value="vn" data-meta="VN">Vietnam</option>
    </select>
  </label>
  <p class="kodza-combobox__note">
    <span class="kodza-combobox__hint">Accents optional. Try “cote”.</span>
    <span class="kodza-combobox__error" aria-live="polite"></span>
  </p>
</div>

<div class="kodza-combobox">
  <label class="kodza-combobox__box">
    <span class="kodza-combobox__label">Time zone</span>
    <select class="kodza-combobox__native" name="timezone">
      <optgroup label="Europe">
        <option value="Europe/London" data-meta="UTC+0">London</option>
        <option value="Europe/Lisbon" data-meta="UTC+0">Lisbon</option>
        <option value="Europe/Paris" data-meta="UTC+1" selected>Paris</option>
        <option value="Europe/Berlin" data-meta="UTC+1">Berlin</option>
        <option value="Europe/Madrid" data-meta="UTC+1">Madrid</option>
        <option value="Europe/Stockholm" data-meta="UTC+1">Stockholm</option>
        <option value="Europe/Athens" data-meta="UTC+2">Athens</option>
        <option value="Europe/Helsinki" data-meta="UTC+2">Helsinki</option>
        <option value="Europe/Istanbul" data-meta="UTC+3">Istanbul</option>
      </optgroup>
      <optgroup label="Africa">
        <option value="Africa/Dakar" data-meta="UTC+0">Dakar</option>
        <option value="Africa/Lagos" data-meta="UTC+1">Lagos</option>
        <option value="Africa/Cairo" data-meta="UTC+2">Cairo</option>
        <option value="Africa/Johannesburg" data-meta="UTC+2">Johannesburg</option>
        <option value="Africa/Nairobi" data-meta="UTC+3">Nairobi</option>
      </optgroup>
      <optgroup label="Americas">
        <option value="America/Anchorage" data-meta="UTC−9">Anchorage</option>
        <option value="America/Los_Angeles" data-meta="UTC−8">Los Angeles</option>
        <option value="America/Denver" data-meta="UTC−7">Denver</option>
        <option value="America/Mexico_City" data-meta="UTC−6">Mexico City</option>
        <option value="America/Chicago" data-meta="UTC−6">Chicago</option>
        <option value="America/New_York" data-meta="UTC−5">New York</option>
        <option value="America/Bogota" data-meta="UTC−5">Bogotá</option>
        <option value="America/Halifax" data-meta="UTC−4">Halifax</option>
        <option value="America/Santiago" data-meta="UTC−3">Santiago</option>
        <option value="America/Sao_Paulo" data-meta="UTC−3">São Paulo</option>
        <option value="America/Argentina/Buenos_Aires" data-meta="UTC−3">Buenos Aires</option>
      </optgroup>
      <optgroup label="Asia">
        <option value="Asia/Dubai" data-meta="UTC+4">Dubai</option>
        <option value="Asia/Karachi" data-meta="UTC+5">Karachi</option>
        <option value="Asia/Kolkata" data-meta="UTC+5:30">Mumbai</option>
        <option value="Asia/Kathmandu" data-meta="UTC+5:45">Kathmandu</option>
        <option value="Asia/Dhaka" data-meta="UTC+6">Dhaka</option>
        <option value="Asia/Bangkok" data-meta="UTC+7">Bangkok</option>
        <option value="Asia/Singapore" data-meta="UTC+8">Singapore</option>
        <option value="Asia/Shanghai" data-meta="UTC+8">Shanghai</option>
        <option value="Asia/Seoul" data-meta="UTC+9">Seoul</option>
        <option value="Asia/Tokyo" data-meta="UTC+9">Tokyo</option>
      </optgroup>
      <optgroup label="Pacific">
        <option value="Pacific/Honolulu" data-meta="UTC−10">Honolulu</option>
        <option value="Australia/Perth" data-meta="UTC+8">Perth</option>
        <option value="Australia/Sydney" data-meta="UTC+11">Sydney</option>
        <option value="Pacific/Fiji" data-meta="UTC+12">Fiji</option>
        <option value="Pacific/Auckland" data-meta="UTC+13">Auckland</option>
      </optgroup>
    </select>
  </label>
  <p class="kodza-combobox__note">
    <span class="kodza-combobox__hint">City or offset: “+9” works.</span>
    <span class="kodza-combobox__error" aria-live="polite"></span>
  </p>
</div>

<div class="kodza-combobox">
  <label class="kodza-combobox__box">
    <span class="kodza-combobox__label">Assign to</span>
    <select class="kodza-combobox__native" name="assignee">
      <option value="" selected>Unassigned</option>
      <option value="amara" data-meta="@amara">Amara Okafor</option>
      <option value="hanna" data-meta="@hanna">Hanna Nowak</option>
      <option value="ines" data-meta="@ines">Inès Moreau</option>
      <option value="kenji" data-meta="@kenji">Kenji Watanabe</option>
      <option value="leo" data-meta="@leo">Léo Lefebvre</option>
      <option value="mateo" data-meta="@mateo">Mateo García</option>
      <option value="ravi" data-meta="@ravi">Ravi Iyer</option>
      <option value="sofia" data-meta="@sofia">Sofia Rossi</option>
      <option value="dependabot" data-meta="@bot" disabled>Dependabot (just bumps)</option>
    </select>
  </label>
  <p class="kodza-combobox__note">
    <span class="kodza-combobox__hint">Name or @handle.</span>
    <span class="kodza-combobox__error" aria-live="polite"></span>
  </p>
</div>

Checked

Checked before you paste.

Robots poked at it before you did. Every component goes through the same checks, and again each time it changes.

What ranLast run
Accessibilityaxe-core 4.10.2: the WCAG 2.1 A and AA rules, plus best practices. 0 issues
KeyboardThe Tab key gets there, and the focus ring shows when it does. Passed
Reduced motionTurn on reduced motion and what moved just appears. Nothing loops. Passed
Light and darkThe same checks on both themes, contrast included. Passed
WordPressPasted into Twenty Twenty-Five, Twenty Twenty-One, Astra, Blocksy, GeneratePress, Hello Elementor, Kadence and OceanWP. Nothing to flag. 8 / 8 themes
Robots checked this. A human with VoiceOver hasn't yet.
KeyboardPress them in the preview
In the field, while it's open
  • Next or previous option in the list, no looping↓/↑
  • Five options down or upPage Down/Page Up
  • Picks the highlighted option and closesEnter
  • Picks the highlighted option and moves onTab
  • Closes it and puts the last choice backEsc
In the field
  • Filters the list, best match first and litA–Z
  • Opens the whole list on the current choice↓/↑
  • Edits the search; leaving it empty clears the choiceBackspace

More like this

More in Forms