アニメーションが効かない原因は「視差効果を減らす」かも?そしてアクセシビリティへ
あるプロジェクトでCSSアニメーションを実装したけれど、iPhoneの実機で確認すると動かない…なんてことがありました。
今回起こった原因とその背景、「視差効果を減らす」に関連する設定方法をまとめました。
原因はリセットCSS
今回のプロジェクトで「modern CSS reset」が使用されていて、以下のような記述があることが原因でした。
/* Remove all animations and transitions for people that prefer not to see them */
@media (prefers-reduced-motion: reduce) {
html:focus-within {
scroll-behavior: auto;
}
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}
- CSSでスムーススクロールを設定する
scroll-behavior
をauto
にして瞬時に移動させる - アニメーション速度を
0.00001 秒
にして瞬時に完了させる - アニメーションの繰り返しを1回に制限する
上記のような指定がされているので、アニメーションは実際に適用されているけど、体感する間もなく終わってしまうことになります。
none
などでアニメーションを無効にしていないのは、アニメーションが完了する前提でCSSが書かれていると、要素が表示されないままになる可能性を考慮しているようです。
ちなみにprefers-reduced-motion
は、すべてのモダンブラウザで対応済みです。
"prefers-reduced-motion" | Can I use... Support tables for HTML5, CSS3, etc
JavaScriptでもwindow.matchMedia('(prefers-reduced-motion: reduce)');
のように判定が可能です。
prefers-reduced-motion: Sometimes less movement is more
今回はリセットCSSでしたが、その他のCSSやJSのライブラリでも対応しているものがあるので、注意が必要そうです。
対策
やや抽象的ですが、以下のような対策が考えられます。
- アニメーションが無効化されても、機能を損なわないデザインにする
- アニメーションが無効化されても、コンテンツがすべて表示できて操作できるコーディングをする
-
prefers-reduced-motion
を使ってアニメーションの有効・無効に関わらず最適な機能を提供する - アニメーションを無効化・停止する機能を提供する
アニメーションの無効化に対応したほうがいいのか
結論から言うとYESです。
ユーザーのプリファレンスに応じて過度なアニメーションを無効にする「prefers-reduced-motion」 | Accessible & Usable
上記の記事がわかりやすいのですが、「注意欠陥障害」のある方には活動に集中できなくさせてしまったり、「前庭機能障害」のある方にはめまい・頭痛・吐き気などの症状を引き起こしてしまう可能性もあるようです。
そこまでいかなくても、大きく動くのが苦手だったり、スクロールハイジャックが好きではなかったりする利用者も一定数いると思います。
WCAGでは以下の項目に該当しそうです。
- 達成基準 2.2.2: 一時停止、停止、非表示を理解する(レベル A)
- 達成基準 2.3.3: インタラクションによるアニメーションを理解する(レベル AAA)
概要としては以下のような内容です。
- 演出として5秒以上、自動的に動かしている場合は、一時停止や停止、非表示などの機能を提供する
- 利用者がモーションの無効化を設定している場合は、必要不可欠ではないアニメーションを無効化する
「利用者の体験を良いものにするため」にアニメーションを使用していると考えると、利用者の体験を損なう可能性にも対応しておくことが必要になりますね。
「視差効果を減らす」の設定方法
prefers-reduced-motion
に紐づく設定方法をまとめておきます。
iOS
iPhoneをはじめとしたiOSは「設定」にある「アクセシビリティ」から設定できます。
iPhone、iPad、iPod touch で画面の視差効果を減らす - Apple サポート (日本)
個人的にはアプリを開いたときなどのアニメーションに酔う感じがしてオンにしていました。
また、バッテリーの減りを経験する方法ともしても紹介されていました。
オンにしている人は比較的多いかもしれません。
Android
Androidでは「設定」の「ユーザー補助」にある「アニメーションの削除」という項目のようです。
Android 9:「アニメーションの削除」でスマホの動作をサクサク高速化する方法 - enjoypclife.net
その他に「ウィンドウ アニメスケール」という項目で細かな調整もできるようです。
開発者向けオプションという画面から設定できるのですが、設定にある「ビルド番号」を7回タップすると表示されるようで、この項目は利用者が目に触れる機会は少なそうです。
デバイスの開発者向けオプションを設定する | Android Studio | Android Developers
Windows
Windows10では「Windowsにアニメーションを表示する」、Windows11では「視覚効果」の「アニメーション効果」という項目のようです。
Mac
MacはiOSと同じように「システム設定」にある「アクセシビリティ」から設定できます。
Macで画面の視差効果を減らす - Apple サポート (日本)
個人的にMacのことはけっこう調べているほうだと思っていますが、「Macにもあったんだ」くらいの印象でした。
Discussion