From 0dc6ed0f5136ba2579a6f737acb91c20c2b269f7 Mon Sep 17 00:00:00 2001 From: ken7253 Date: Tue, 6 Feb 2024 01:39:06 +0900 Subject: [PATCH] =?UTF-8?q?=E3=81=96=E3=81=A3=E3=81=8F=E3=82=8A=E6=9B=B8?= =?UTF-8?q?=E3=81=8D=E4=B8=8A=E3=81=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../public/img/apg-tooltip-patterns.png | Bin 0 -> 30241 bytes .../public/img/bad-tooltip-listener.svg | 55 +++++++++++++ .../public/img/good-tooltip-listener.svg | 62 +++++++++++++++ the-tooltip/slides.md | 74 ++++++++++++++---- 4 files changed, 177 insertions(+), 14 deletions(-) create mode 100644 the-tooltip/public/img/apg-tooltip-patterns.png create mode 100644 the-tooltip/public/img/bad-tooltip-listener.svg create mode 100644 the-tooltip/public/img/good-tooltip-listener.svg diff --git a/the-tooltip/public/img/apg-tooltip-patterns.png b/the-tooltip/public/img/apg-tooltip-patterns.png new file mode 100644 index 0000000000000000000000000000000000000000..e7edea456442f814acb8a4a5a9632c1ecf94dcf7 GIT binary patch literal 30241 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 ASO5S3 literal 0 HcmV?d00001 diff --git a/the-tooltip/public/img/bad-tooltip-listener.svg b/the-tooltip/public/img/bad-tooltip-listener.svg new file mode 100644 index 0000000..d57dc78 --- /dev/null +++ b/the-tooltip/public/img/bad-tooltip-listener.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/the-tooltip/public/img/good-tooltip-listener.svg b/the-tooltip/public/img/good-tooltip-listener.svg new file mode 100644 index 0000000..a5874b6 --- /dev/null +++ b/the-tooltip/public/img/good-tooltip-listener.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/the-tooltip/slides.md b/the-tooltip/slides.md index 623fb83..0c06e5d 100644 --- a/the-tooltip/slides.md +++ b/the-tooltip/slides.md @@ -32,12 +32,22 @@ layout: section --- -## ツールチップで考慮しなければいけない点 +## ツールチップの実装時に考慮すること - Machine readability - Cancelability - Selectivity +基本的には [ARIA Authoring Practices Guide](https://www.w3.org/WAI/ARIA/apg/) や [WCAG](https://www.w3.org/TR/WCAG22)を参考にする。 +その中で関連のありそうな項目を参考にUIを組み立てていく。 + +- [Tooltip Pattern | APG | WAI | W3C](https://www.w3.org/WAI/ARIA/apg/patterns/tooltip/) +- [WCAG 2.2 - Success Criterion 1.4.13 Content on Hover or Focus](https://www.w3.org/TR/WCAG22/#content-on-hover-or-focus) + +今回の対象としては上記を参考にしています。 + +--- +layout: center --- ## 実装時の注意点 @@ -49,16 +59,24 @@ layout: section - `role`と`aria-describedby`を設定する。 - フォーカス可能な要素を含む場合はモードレスダイアログとして実装する。 +汎用UIパーツは適切なマークアップをしないとテストコードが汚くなる。 +見た目だけがUIではないのでブラウザからもUIが認識できるようにしておく。 + --- ### Cancelability `ESC`キーで一時的に非表示にできるようにする。 +ARIA APGを見るとインタラクションとして`ESC`キーでのキャンセルが記載されている。 + +![ARIA APG disappears when Escape is pressed or on mouse out.](/img/apg-tooltip-patterns.png) + --- ### Selectivity +大抵のツールチップはツールチップ内部のテキストをコピペできない イベントハンドラーを張る要素に気をつける。 --- @@ -95,9 +113,10 @@ layout: section ### Selectivity -#### Bad +なぜコンポーネント全体に`onPointerEnter`と`onPointerLeave`を設定するのか。 +下記は素直にボタンにだけにイベントハンドラーを貼った場合の例 -```tsx{5} +```tsx{5-7}
``` -#### Good +--- -```tsx{1} -
- - -
-``` \ No newline at end of file +### Selectivity + +![](/img/bad-tooltip-listener.svg) + +トリガーとなる要素だけにイベントハンドラーを貼ると +ツールチップにポインタが移動した場合`PointerLeave`が発火して消えてしまう。 + +--- + +### Selectivity + +![](/img/good-tooltip-listener.svg) + +ツールチップとして認識する範囲を広げてWrapperを用意すると +ツールチップにポインタが移動しても`PointerLeave`が発火せず選択できる。 + +--- +layout: center +--- + +## 解説されると分かるけど、普段はあまり気付けない + +--- +layout: center +--- + +## どうしてこうなった + +--- + +## どうしてこうなった + +- ググって最初に出てきたコードをコピペ +- 既存の実装を参考にする +- UIライブラリの実装を参考にする + +これらが本当にユーザビリティの高い実装をしているとは限らない。