65
38

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CSSAdvent Calendar 2022

Day 6

【CSS】セレクトボックスのプルダウンをデザインできるselectmenuが便利すぎた。

Last updated at Posted at 2022-11-07

はじめに

みなさんは、<select> タグを使う時、<option> をいい感じのデザインしたいと思ったことはないでしょうか?

多くの方は、妥協して、<select> タグを使うか、ライブラリーを使うか、
<div><button>などを使いWAI-ARIA補完するなどで実装しているのではないでしょうか?

実は、Open UIから提出された、セレクトボックスのプルダウンをデザインするための草案が、
Google Chrome チームとMicrosoft Edge チームの協力で実験的な機能として、<selectmenu> が公開されました。

そのため、この記事では <selectmenu> の具体的な内容の紹介と実装方法の解説を行います。

動作環境

<selectmenu> は、まだ実験的なものであるため、限られた環境で再現できます。
そのため、<selectmenu> が動いているのを確認したい方は次のようにお願いします。

ぜひ、環境を整えて、この記事をご覧いただけると嬉しいです。

  1. 以下のブラウザでのみ確認できます。 ダウンロードお願いします。
  2. about:flagsページを開いて Experimental Web Platform featuresenabled にしてください。

image2.png

<selectmenu>

<selectmenu> は、デザインのカスタマイズができる <select> 要素です。

※ 2022年現在は、まだ実験的な機能のため、ChromeとEdgeのCanaryバージョンでのみ使うことができます。

<selectmenu>の構造を理解する。

<selectmenu> にデザインを当てるためには、<selectmenu> の内部構造を理解することが必要です。

<selectmenu> の内部構造は↓こうなっています。
image1.png

  • <selectmenu>
    • ボタンとリストボックスを含むルート要素です。
  • <button>
    • <listbox> を見えるようにするためのトリガーとなる要素です。
    • このボタンを押すことで、プルダウンが表示されます。
  • <selected-value>
    • 現在選択されているオプションの値を表示する要素です。
    • この要素は、必ずしも<button> 内に配置する必要はありません。
  • <listbox>
    • <option><optgroup>を含むWrapperです。
  • <optgroup>
    • <option>をオプションのラベルと一緒にグループ化している要素です。
  • <option>
    • ユーザーが選択できる値を表している要素です。
    • <selectmenu> には、1つ以上の <option> が必要です。

<selectmenu>の基本的な使い方。

HTML

<selectmenu>は、<select> タグ同様に、
子要素に <option>タグで、選択肢を記載することで、使えるようになります。
image3.png
↑この例では、<selectmenu> の中にOption1~3の3つの選択肢を作っています。
class="sample" は、CSSでスタイルを当てるのに使います。

サンプルコードはこちらからコピーできます。
sample.html
<selectmenu>
  <option>Option 1</option>
  <option>Option 2</option>
  <option>Option 3</option>
</selectmenu>
 

CSS

<selectmenu> にデザインを当てるには、疑似要素 の::part()で、<selectmenu>の内部構造を指定することで、デザインを変更することができます。
image4.png
↑この例では、<selectmenu> の listboxの構成要素にスタイルを当てています。

サンプルコードはこちらからコピーできます。
sample.css
.sample::part(listbox) {
    color: white;
    background-color: red;
}

サンプル

2022年現在、<selectmenu> はまだ実験的な機能のため、ChromeとEdgeのCanaryバージョンでのみ使うことができます。

ChromeとEdgeのCanaryバージョンをダウンロードしてご確認ください。

サンプル ①

See the Pen Selectmenu① by でぐぅー | Qiita (@sp_degu) on CodePen.

ChromeとEdgeのCanaryバージョンでは、↓こんな感じに見えます。
画面収録 2022-11-03 23.39.42_1.gif

サンプル ②

See the Pen Selectmenu① by でぐぅー | Qiita (@sp_degu) on CodePen.

ChromeとEdgeのCanaryバージョンでは、↓こんな感じに見えます。
画面収録 2022-11-03 23.39.42_2.gif

まとめ

今回は、<selectmenu> について紹介しました。

<selectmenu> は、まだまだ実験的なものですが、今まではデザインを妥協したり、デザインを当てるためにWAI-ARIAやJavaScriptでごちゃごちゃしたりとしていたことを考えると、早く主要ブラウザで対応していただけると嬉しいです。

実装された暁には、selectタグやライブラリーを使っていたところなどは、全部 <selectmenu> に置き換えたいですね


最後まで読んでくださってありがとうございます!

普段はデザインやフロントエンドを中心にQiitaに記事を投稿しているので、ぜひQiitaのフォローとX(Twitter)のフォローをお願いします。

ref

65
38
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
65
38

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?