アニメーションが効かない原因は「視差効果を減らす」かも?そしてアクセシビリティへ

2023/07/14に公開

あるプロジェクトで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-behaviorautoにして瞬時に移動させる
  • アニメーション速度を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では以下の項目に該当しそうです。

概要としては以下のような内容です。

  • 演出として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にもあったんだ」くらいの印象でした。

TAM

Discussion