ちいつる

フォーム入力

セレクト

ボタンを押すとリストボックスが開くカスタムのセレクト。矢印キー・Enter・Escで操作でき、選択中の項目にはチェックが付く。

ENGLISH

Select / Dropdown

  • JS
196フォーム入力 の一覧 →

プレビュー

クリック

操作クリック/タップで動きます。

実装メモ

ネイティブの <select> ではなく button + role="listbox" で組み、選択中は aria-selected とチェックマークで示します。フォーカスはボタンに保ち、矢印キーで active(視覚ハイライト)を移動、Enterで確定・Escで閉じる王道の実装です。

コード(コピーして使えます)

<div class="sd-wrap">
  <span class="sd-label" id="sd-label">プラン</span>
  <div class="sd-field">
    <button
      class="sd-button"
      id="sd-button"
      type="button"
      aria-haspopup="listbox"
      aria-expanded="false"
      aria-labelledby="sd-label sd-button"
    >
      <span class="sd-value" id="sd-value">選択してください</span>
      <svg class="sd-caret" width="14" height="14" viewBox="0 0 14 14" fill="none" aria-hidden="true">
        <polyline points="3,5 7,9 11,5" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/>
      </svg>
    </button>
    <ul class="sd-list" id="sd-list" role="listbox" aria-labelledby="sd-label" tabindex="-1" hidden>
      <li class="sd-option" role="option" data-value="free" aria-selected="false">
        <span class="sd-check" aria-hidden="true">✓</span>Free(無料)
      </li>
      <li class="sd-option" role="option" data-value="pro" aria-selected="false">
        <span class="sd-check" aria-hidden="true">✓</span>Pro(月額 980円)
      </li>
      <li class="sd-option" role="option" data-value="team" aria-selected="false">
        <span class="sd-check" aria-hidden="true">✓</span>Team(月額 2,980円)
      </li>
      <li class="sd-option" role="option" data-value="enterprise" aria-selected="false">
        <span class="sd-check" aria-hidden="true">✓</span>Enterprise(要問合せ)
      </li>
    </ul>
  </div>
</div>

タグ

関連パーツ