キーボード フォーカス

多くのユーザーは、キーボード(またはキーボードの機能を模倣したソフトウェアやハードウェア、スイッチ デバイスなど)を主なナビゲーション手段として使用しています。これは、個人の好み、効率性、ハードウェアの損傷が原因である可能性があります。

手首の捻挫や手根管の微細な運動障がいなど、一時的に身体的障がいがある人は、キーボードで操作することもできます。ロービジョンまたは目の見えないユーザーは、拡大やスクリーン リーダーのソフトウェアと組み合わせたナビゲーションにキーボードを使用することがあります。ただし、視覚障がいのあるユーザーは、画面を移動するために、視覚のあるユーザーとは異なるキーボード ショートカット コマンドを使用する場合があります。

障がいのないユーザーも、キーボードを使って操作することを選択する場合があります。

これらすべての障がいや状況に対応するキーボードのサポートが不可欠です。キーボードのユーザー補助の大部分はフォーカスが中心です。フォーカスとは、現在画面上のどの要素がキーボードからの入力を受け取っているかを指します。

このモジュールでは、キーボードとフォーカス可能な要素の HTML 構造と CSS スタイル設定に焦点を当てます。JavaScript モジュールには、インタラクティブな要素のフォーカス管理とキーストロークに関する詳細情報が記載されています。

フォーカス順序

キーボード ユーザーが移動できる要素は、フォーカス可能な要素と呼ばれます。フォーカス順序は、要素がフォーカスされる順序です。タブまたはナビゲーション順序とも呼ばれます。デフォルトのフォーカス順序は、論理的で直感的で、ページの表示順序と一致している必要があります。

ほとんどの言語では、フォーカス順序はページの上から始まり、左から右に移動して下で終了します。ただし、一部の言語は右から左に読むため、ページの主要言語によってはフォーカス順序が異なる場合があります。

デフォルトでは、フォーカス順序には、リンク、チェックボックス、テキスト入力など、自然にフォーカスできる HTML 要素が含まれます。自然にフォーカス可能な HTML 要素には、タブオーダーのサポートと基本的なキーボード イベント処理が組み込まれています。

フォーカス順序を更新して、通常はフォーカスされない要素(インタラクティブでない HTML 要素、カスタム コンポーネント、ARIA を使用する要素など)を含め、自然なフォーカス セマンティクスをオーバーライドできます。

tabIndex

フォーカス順序は、正の tabindex 属性を持つ要素(存在する場合)から始まり、最小の正の数から最大の数に移動します(1、2、3 など)。次に、DOM 内の順序に従って、tabindex がゼロの要素を処理します。tabindex が負の要素は、通常のフォーカス順序から削除されます。

通常はフォーカスできない要素に 0(tabindex="0")の tabindex が適用されると、DOM に表示される順序に従って、ページの自然なフォーカス順序に追加されます。ただし、自然にフォーカスできる HTML 要素とは異なり、完全にアクセスできるようにするには、追加のキーボード サポートを提供する必要があります。

同様に、通常はフォーカス可能で非アクティブな要素(入力フィールドが入力されるまで動作しないボタンなど)の場合、負のタブインデックス(tabindex="-1")をこの要素に追加する必要があります。負の tabindex シグナルを追加すると、このボタンが自然なフォーカス順序から削除される必要があることを支援技術とキーボードに通知できます。ただし、必要に応じて JavaScript を使用して要素にフォーカスを再度追加できます。

この例では、自然にフォーカスを受け取らない要素に tabindex 属性が追加されています。要素の順序は tabindex を使用して操作され、フォーカス順序に与える影響を示しています。以下は、避けるべき例です。

新しいフォーカス順序は HTML を反映しています。
キーボード ユーザーが CodePen HTML をタブで移動する様子をご覧ください。

現在のほとんどのウェブサイトでは、ページのメインヘッダーに、ページごとに同じメニューリンクの長いリストがあります。これは一般的なナビゲーションには適していますが、キーボードのみのユーザーがタブキーを複数回押さずにウェブサイトのメイン コンテンツに簡単にアクセスできない場合があります。

重複するリンクや役に立たないリンクのグループをスキップするには、スキップリンクを追加します。スキップリンクは、ユーザーをウェブサイトの別のページや外部リソースに誘導するのではなく、そのセクションの ID を使用して、同じページの別のセクションにジャンプするアンカーリンクです。スキップリンクは通常、ユーザーがウェブサイトにアクセスしたときに最初にフォーカスされる要素として追加されます。デザインに応じて、ユーザーがタブキーを押すまで表示または非表示にできます。

ユーザーが Tab キーを押すと、アクティブなスキップリンクがある場合、キーボード フォーカスがスキップリンクに移動します。ユーザーがスキップリンクをクリックすると、ヘッダー セクションとメイン ナビゲーションを移動できます。ユーザーがスキップ リンクをクリックせずに DOM をタブで下へ移動すると、フォーカス可能な次の要素に移動します。

他のすべてのリンクと同様に、スキップリンクにはリンクの目的に関するコンテキストを含めることが重要です。「メイン コンテンツにスキップ」というフレーズを追加すると、リンク先をユーザーに知らせることができます。リンクに追加のコンテキストを提供する際には、aria-labelledbyaria-label などの多くのコード オプションから選択できます。また、例に示すように、<a> 要素のテキスト コンテンツに追加することもできます。

キーボード フォーカスを使用して CodePen をプレビューします。
キーボード ユーザーがスキップリンクありとスキップリンクなしでナビゲートする様子を確認する。

フォーカス インジケーター

前述のとおり、フォーカス順序はキーボード ユーザー補助の重要な要素です。フォーカスのスタイルも決めておく必要があります。フォーカス順序が適切であっても、適切なスタイル設定がないと、ユーザーはページ上のどこにいるのかわかりません。

フォーカス インジケーターを視覚的に表示することは、ユーザーがページ上のどこにいるのかを常に把握できるようにするために重要です。これは、キーボードのみの目の見えるユーザーの場合は特に重要です。 フォーカスが隠れていない(最小): フォーカス インジケーターが他のコンポーネントの下に隠れないようにします。

ブラウザのデフォルトのスタイル設定

現在、すべての最新のウェブブラウザには、ウェブサイトやアプリのフォーカス可能な要素に適用されるデフォルトの視覚的なスタイルが異なります。一部のスタイルは他のスタイルよりも視認性が高いものもあります。ユーザーがページをタブで移動すると、要素がキーボード フォーカスを受け取ると、このスタイル設定が適用されます。

ブラウザにフォーカス スタイルの処理を許可する場合は、コードを確認して、テーマがブラウザのデフォルトのスタイルを上書きしないようにすることが重要です。オーバーライドは通常、スタイルシートで "outline: 0" または "outline: none" と記述します。この小さなコードによって、ブラウザのデフォルトのフォーカス インジケーターのスタイルが削除され、ユーザーがウェブサイトやアプリを操作するのが非常に難しくなります。

非推奨 - 枠線なし

a:focus {
 
outline: none; /* don't do this! */
}

推奨 - スタイル設定されたアウトライン

a:focus {
 
outline: auto 5px Highlight; /* for non-webkit browsers */
 
outline: auto 5px -webkit-focus-ring-color; /* for webkit browsers */
}

カスタム スタイル

もちろん、デフォルトのブラウザ スタイルを超えて、テーマを補完するカスタム フォーカス インジケーターを作成することもできます。カスタム フォーカス インジケーターを作成する際は、自由に創造性を発揮できます。

フォーカス インジケーターの形状は、アウトライン、境界線、下線、ボックス、背景の変更など、さまざまな形状にできます。また、色だけでなく、その要素にキーボードのフォーカスがアクティブであることを示す明らかなスタイルの変更も可能です。

フォーカス インジケーターのスタイルを変更して、確実に表示できるようにします。たとえば、ページの背景が白の場合、ボタン フォーカス インジケーターを青の背景に設定できます。ページの背景が青色の場合は、同じボタンのフォーカス スタイルを白色の背景に設定できます。

要素のタイプに基づいてフォーカス要素のスタイルを変更できます。たとえば、本文のリンクには点線の下線を使用し、ボタン要素には丸い枠線を選択できます。

CSS で示されているフォーカス スタイル
キーボード ユーザーがスタイル設定された各フォーカス要素を Tab キーで移動するとどうなるかを確認します。

1 ページに表示するフォーカス インジケーターのスタイルに決まりはありませんが、不要な混乱を避けるため、妥当な数に抑えてください。

理解度を確認する

ARIA と HTML に関する知識をテストします。

:focus CSS スタイルの例のうち、白色の背景で最もアクセスしやすいのはどれですか。

text-decoration: dotted underline 2px blue;
outline: none; text-decoration:none; background:none;
background-color:black;
outline: 0.5rem solid yellow;

スキップリンクの目的は何ですか?

キーボードを使用するユーザーが、重複するリンクや役に立たないリンクのグループをスキップできるようにします。
キーボード ユーザーが興味のないコンテンツをスキップできるようにします。