「まかないてっく#1杯目 〜フロントエンドを語ろう〜」 masuP9
生放送がログイン不要・高画質で見放題のプラットフォーム
本題
キーボード操作対応してますか?
Caution!!
LTにつき乱暴な要約や
意訳、私見が混ざっています
ここでは特別なショートカットキーを用意することではなく、通常のUIがキーボードから操作できることを指します
実行したよ!
キーボード操作できる!
(力強く)ある
(カチャカチャカチャ…) (ッターン!)
したかった俺たちは...
昨日からgoogle検索の j, kショートカットが使えなくて辛い
— AAkira (@_a_akira) July 27, 2017
キーボードだけでブラウジング出来ないじゃん!
正確に言うとこれはショートカットキーやけどな…
分かりやすく言うと
キーボード操作に対応していると、キーボード以外の様々なデバイス(マウスも含む)や支援技術からの操作に対応しやすい。
さらに言うと
キーボード操作はデバイスとUIとの標準的なプロトコル
未知のデバイスでも
キーボード操作信号さえ生成すれば操作可能
例えばこのスライドも視線入力装置で操作できる(かもしれない)
UIが対応さえしていればの話
やるしかないのでは?
💪
キーボード操作対応しよう
1
キーボード操作できない例の実装
<div onclick="hoge();">hogehoge</div>
Better
<div tabindex="0" onclick="hoge();" onkeyup="fuga();">
実行
</div>
Best
<button type="button" onclick="hoge();">実行</button>
基本的は適切な要素を使用するだけ
button
input[type="text"]
input[type="checkbox"]
input[type="range"]
とはいえまだそのまま使えなかったり...
detail(summary)
dialog
input[type="date"]
オリジナルデザインだったり...
onFocusIn
/onFocusOut
イベントがない。
そのかわり `onFocus` が伝搬する(blurも一緒)
本来は、focusin
はバブリングしfocus
はバブリングしない
実際使用する場合はCSSの:focus
と:focus-within
ぽい感じ
以下でおk
<div onFocus={} onBlur={}>
<button type="button">Button</button>
<button type="button">Button</button>
<button type="button">Button</button>
</div>
onFocus
でも、ラッパーの要素でイベントが発火する
ただし中のButtonにはフォーカスが当たる必要があるので、フォーカスが当たる形で隠す必要がある。
レンダリングされてないのはもちろん、display: none
やvisibility:hidden
でもフォーカスを受け取らなくなる
.Element:not(.is-focus) {
opacity: 0;
pointer-events: none;
}
の組み合わせがオススメ。
どのキーでどう動けばいいの?
最低限はTabとEnterで動くようにするでOK
他にもいろいろあるけど…
やっていきましょう 💪
\(^o^)/オワリ
[PR]WCAGもくもく会 #2
定員なので9月以降に乞うご期待!