アクセシブルなファイル選択(input[type="file"])の作り方
ローカルファイルの読み込みのためにもちいる<input type="file">
をアクセシブルに実装する。
よくある良くない例
<label>
ファイル選択
<input type="file">
</label>
input[type="file"] {
display: none;
}
<label>
はクリッカブルな要素ではないためキーボード操作ができない- 同様に
tab
によるカーソルの移動ができない <input>
をdisplay:none
するとアクセシビリティツリーから削除されるため<input type="file">
があることを認識できない
良い例: アクセシブルなファイル選択
<button type="button">
ファイル選択
<input type="file">
</button>
input[type="file"] {
display: none;
}
button.addEventListener('click', () => input.click())
- ボタンは
<button>
としてマークアップすることでブラウザ標準の挙動を踏襲できる<label role="button">
だと作り込みが発生する
label
をbutton
に変えたのでinput[type="file"]
はdisplay:none
にしても問題なくなった- inputの操作はbutton経由で行う