1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

<select> 要素でショートカットキーを有効にする実装方法

Last updated at Posted at 2025-06-30

今年(2025年)になって select 要素にスタイルを自由に適用できるようになりました。
それを活用して、JavaScript なしで Windows のメニューの様にショートカットキーを表示する実装が出来たので、参考までに実装方法の共有です。

参考:

現時点では対応ブラウザが限られているなど有るので利用にはご注意ください。
参考)CSS property: appearance: base-select | Can I use...

実装サンプル

MDN のコードを流用して以下のように調整してみました。
セレクトボックスをクリック後、対応するキーを押下すると対象を選択できます。

See the Pen Modern Select Element Styling by k-utsumi (@k-utsumi) on CodePen.

MDN に載っている例では、キーを押下しても選択肢を選べませんが、<option> 要素内の先頭にアルファベット文字を入れる事で選べるようになりました。

実装サンプルでは display: flexorder で順序を制御していますが、他にも flex-direction: row-reverse や grid を利用しても制御できるかと思います。
非表示にした要素内のテキストが先頭の場合でも問題なく選択できました。
(e.g. <span style="display:none">text</span>)

また、先頭からアルファベットが続く場合、それらを続けて打つとより細かく選択できるようです。(実装サンプルだと chicken を選びたい場合は ch を打つなど)

細かい挙動について

チェックマークがデフォルトで付くようですが、セレクタ ::checkmark で簡単に調整できます。
選択時は <selectedcontent> に選択した <option> 内の要素が複製されるようです。

先の例をもう少し実用的な感じに調整してみました。

See the Pen Modern Select Element Styling by k-utsumi (@k-utsumi) on CodePen.

css
/* チェックマークが不要な場合 */
option {
  &::checkmark { display: none }
}

/* option 内ではキーを表示、select の選択した状態では非表示にする場合 */
selectedcontent {
  .option-key { display: none }
}

スタイルの当て方に問題が有るのか、セレクト要素にフォーカスした状態でもキー操作が効かない時が有るなど、不安定な挙動が少し気になります。

もし不備など有りましたらご指摘くださいませ🤒

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?