Open11
アイコンの入った選択肢を持つselectを作成したい(アクセシビリティを考慮して)
optionには画像などを含むことができません。
font iconであればできそう
ですが、単純に画像を入れられた方が使い勝手が良さそう。
MUIのSelectでもできますね。
import { Select, MenuItem } from "@mui/material";
import { FaAccessibleIcon } from "react-icons/fa";
export default function App() {
return (
<div className="App">
<Select>
<MenuItem>
<FaAccessibleIcon />
test
</MenuItem>
</Select>
</div>
);
}
MUIそのまま使えれば良いですが、カスタマイズしようとすると途端にハードルが高い。(と本人は感じているが、自作するハードルの方が高いです。)
なので、アクセシビリティの勉強も兼ねて自作してみようと。
selectを構成するためのroleとしてはlistboxを使用するようです。
単純なdivなどを使用するので画像などを入れることができます。Reactを使っていくとどういう流れになるか。
- onClickで選択肢リストが開く
- Portalで実現する?
- 選択肢onClickで選択状態になり、リストが閉じる
- Stateを更新する必要がありそうです。
Adobeのライブラリ
Floating UI
1個の長大なライブラリができる分量だというのは把握した。
ひとまず形を作る
選択が可能なところまで作る
選択肢の外をClickした場合は閉じる
documentをクリックすると閉じるようにeventListnerを付与する
参考:https://qiita.com/penpen22/items/f2924bcf2ffaeb3ea30b