≪ Today I learned. RSS購読
公開日
タグ
HTML
著者
ダーシノ(@bc_rikko)

dialog要素のどこにフォーカスを当てればよいか考える

dialog要素を表示したときに、ブラウザのデフォルトの挙動でフォーカスが当たる場所が微妙なので考えてみる。

TL;DR

dialog要素は用法用量を守って正しく使う

As with all HTML elements, it is not conforming to use the dialog element when attempting to represent another type of control. For example, context menus, tooltips, and popup listboxes are not dialog boxes, so abusing the dialog element to implement these patterns is incorrect. https://html.spec.whatwg.org/multipage/interactive-elements.html#the-dialog-element

dialog要素をコンテキストメニューやツールチップなどに使ってはいけない。

dialog要素自体にtabindex属性を付与しない

<dialog> element as it is not interactive and does not receive focus https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog#usage_notes

dialog要素はインタラクティブでないし、フォーカスを受け取らないために dialog要素にtabindex属性を付与してはならない。

autofocus属性はすぐにユーザーが操作するような場合に使う

The autofocus attribute should be added to the element the user is expected to interact with immediately upon opening a modal dialog. If no other element involves more immediate interaction, it is recommended to add autofocus to the close button inside the dialog, or the dialog itself if the user is expected to click/activate it to dismiss.

dialogを表示してすぐ操作すると思われる場所に autofocus属性 を付与する。すぐ操作する要素がなければ閉じるボタンにautofocus属性を付与する。(推奨)

autofocus属性にはアクセシビリティに関する懸念がある

Automatically focusing a form control can confuse visually-impaired people using screen-reading technology and people with cognitive impairments. When autofocus is assigned, screen-readers “teleport” their user to the form control without warning them beforehand. https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/autofocus#accessibility_concerns

Automatically focusing on a control can cause the page to scroll on load.

スクロールが発生するほど長いコンテンツを持った dialog要素の場合、autofocusがあると読み込んだときにスクロールが発生する。(テレポートする)

The focus can also cause dynamic keyboards to display on some touch devices.

フォームコントロールにフォーカスが当たるとdialog要素を表示したタイミングでソフトウェアキーボードが表示される。

While a screen reader will announce the label of the form control receiving focus, the screen reader will not announce anything before the label, and the sighted user on a small device will equally miss the context created by the preceding content.

スクリーンリーダーはフォーカスがあるコントロールのラベルを読み上げるため、ウィンドウサイズが小さいデバイスを使っているとコンテンツを見逃してしまう。

If content is large enough that focusing the first interactive element could cause the beginning of content to scroll out of view, it is advisable to add tabindex=“-1” to a static element at the top of the dialog, such as the dialog title or first paragraph, and initially focus that element. https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/

大きなコンテンツを含む場合は、スクロールされて文章を見逃してしまう可能性があるため、ダイアログのタイトルや最初の文章にフォーカスを当てる。