オートコンプリートのアクセシビリティを考える

フォームのテキスト入力を補完するインタラクションとして、「オートコンプリート」があります。テキストボックスに文字をタイプし始めると、それに呼応して、タイプされた文字列と部分一致する入力値候補が一覧として提示され、ユーザーはその中から入力値を選択できるという、コンボボックス型のインターフェースです。ミスタイプ (TYPO) の軽減、情報のファインダビリティの向上、といった効果が期待できます。

オートコンプリートのコンボボックス
オートコンプリートのコンボボックス

ちょっと文字入力するとすぐに入力値候補のオプションが出てきて、あとはマウスでクリックする (または指でタップする) だけで入力ができてしまうのがオートコンプリートの特長です。とても便利で有用なだけに、この UI を採用する際には、より多様なユーザーが利用できるようにアクセシビリティもしっかりと担保したいものです。

オートコンプリートのアクセシビリティ要件

オートコンプリートをアクセシブルなものにするには、どのような要件を満たせばよいでしょうか。以下の3つの観点から検討してみましょう。

見やすく使いやすいスタイリング

ユーザーが抱える、見えかたの違いや利用状況の多様性に配慮して、見やすくかつ使いやすくオートコンプリートをスタイリングする必要があります。

キーボード操作で完結できること

マウスが使えないユーザーのために、キーボード操作だけで入力を完結できるようにする必要があります。

上記 (箇条書きの3番目) では、候補のオプションの選択において、[Tab] キーではなく上下矢印キーを用いることとしていますが、これは WAI-ARIA Authoring Practices 1.1 の「§ 6.1 Fundamental Keyboard Navigation Conventions」の以下の記述に基づいています。

A primary keyboard navigation convention common across all platforms is that the tab and shift+tab keys move focus from one UI component to another while other keys, primarily the arrow keys, move focus inside of components that include multiple focusable elements.
あらゆるプラットフォームに共通のキーボードナビゲーションの主な慣例では、Tab キーまたは Shift + Tab キーを押すと、ある UI コンポーネントから別の UI コンポーネントへとフォーカスを移動できます。また、別のキー (主として矢印キー) を押すことで、複数のフォーカス可能な要素を含むコンポーネント内でフォーカスを移動できます。

スクリーンリーダーで十分なフィードバックが得られること

オートコンプリートのインタラクションを目で見ることができない視覚障害者のために、状況を音声読み上げによって伝達し、利用できるようにする必要があります。

実装

HTML の標準仕様としては、<datalist> 要素を用いて実装するのが正しいのかもしれませんが、先に監訳した「Form Design Patterns」では、よりインクルーシブなユーザー体験を目指して、オリジナルの UI コンポーネントを採用しています (参照 : Form Design Patterns「オートコンプリート」デモ)。ベースは <select> 要素で入力値候補を用意しつつ、エンハンス (強化) された実装としてテキストボックス (<input type="text">) とリスト (<ul> および <li>) の組み合わせによるコンボボックスをユーザーに提示し、JavaScript によって上記の要件を満たす挙動を具現化しています。

大まかにコンボボックス部分の HTML のコードを拾うと、以下のような具合です。

<!-- テキストボックス -->
<label for="text-box">(ラベル)</label>
<input type="text" id="text-box" role="combobox" aria-owns="options-list" autocomplete="off" aria-autocomplete="list" aria-expanded="true/false">

<!-- 候補のオプション表示 -->
<ul role="listbox" id="options-list">
<li role="option" tabindex="-1" aria-selected="false/true">(候補のオプション)</li>
<li role="option" tabindex="-1" aria-selected="false/true">(候補のオプション)</li>
<li role="option" tabindex="-1" aria-selected="false/true">(候補のオプション)</li>
</ul>

<!-- 表示されている候補のオプション数の提示 -->
<div role=“status” aria-live=“polite”> {n個} の候補</div>

以上、アクセシブルなオートコンプリートについて検討してきました。上述のデモは、実装の一例にすぎませんが、キーボード操作やスクリーンリーダーでの挙動も含めて体感できるようになっているので、実際に触れていただいて、アクセシビリティに優れたフォームのひとつとして参考になれば幸いです。