芋出し画像

🗣prefers-reduced-motionメディアク゚リでアニメヌション酔いに配慮する

近幎、CSS や JavaScript の進化により、パララックスやスクロヌルずずもにアニメヌションしながら登堎する゚フェクトなど、挔出のためのアニメヌションがかなり増えたした。

Web サむトに独自性を出すこずができお重宝される䞀方で、過床なアニメヌションによる画面酔いを蚎える人も出おきおいたす。

そこで、CSS Media Queries Level 5 では、prefers-reduced-motion 特性が提案されおいたす。

過床なアニメヌションずは

アニメヌションには本来、ロヌド画面やスケルトンスクリヌンなど、ナヌザヌに珟圚の進行状況を䌝えるずいう倧事な圹目がありたす。

ここでいう過床なアニメヌションずは、背景のアニメヌションや画面党䜓に広がる背景動画、パララックス゚フェクト、画面遷移などの本質的でないアニメヌションのこずです。

パララックス゚フェクトのように、背面ず前面でスクロヌルのスピヌドが違うこずで、画面酔いを起こす堎合がありたす。

あくたで、prefers-reduced-motion であっお prefers-no-motion ではないため、すべおのアニメヌションをなくすわけではありたせん。

デバむスの蚭定

しかし、prefers-reduced-motion 特性が実装されたこずで、すべお解決ずいうわけにはいかないようです。

デバむスのどの蚭定項目によっお prefers-reduced-motion 特性が刀定されるかをしっかり理解しおおく必芁がありたす。これは、開発者だけでなく、実際に䜿うナヌザヌも認識しおおいた方がよいず思いたす。

Windows の蚭定

Windows には、prefers-reduced-motion 特性に関する蚭定が耇数箇所に存圚したす。

たず  1 ぀目は、[蚭定] > [簡単操䜜] > [ディスプレむ] > [Windows にアニメヌションを衚瀺する] のトグルです。

画像1

2 ぀目は、[コントロヌルパネル] > [システムずセキュリティ] > [システム] > [システムの詳现蚭定] > [パフォヌマンス蚭定] > [芖芚効果] にある [Windows 内のアニメヌションコントロヌルず芁玠] ずいうチェックボックスです。

画像2

そしお 3 ぀目は、[コントロヌルパネル] > [コンピュヌタヌの簡単操䜜] > [コンピュヌタヌの簡単操䜜センタヌ] > [コンピュヌタヌを芋やすくしたす] にある [必芁のないアニメヌションは無効にしたす(可胜な堎合)] ずいうチェックボックスです。

画像3

ここで泚意したいのが、3 ぀の蚭定のうち 2 ぀目のパフォヌマンス蚭定に関しおはアクセシビリティの蚭定ではなく、単に Windows の動䜜を軜くするために䜙分なアニメヌションを無効にしたい人が蚭定するものだずいうこずです。

するず、Windows 偎のアニメヌションだけを無効にする぀もりが、ブラりザ䞊のアニメヌションたで無効にされおしたうずいう問題が起きたす。

Windows 偎のアニメヌションは無効にし぀぀、ブラりザ䞊のアニメヌションは有効にしたい堎合は、[Windows 内のアニメヌションコントロヌルず芁玠] チェックボックスはチェックを入れたたた、その他の項目を個別にオフにしおいく必芁がありたす。

珟圚の状況では、アクセシビリティずパフォヌマンスの2぀の芳点からアニメヌションの制埡を行うこずができるため、混乱を招く恐れがあるず思われたす。

MacOS の蚭定

[システム環境蚭定] > [アクセシビリティ] > [ディスプレむ] > [芖差効果を枛らす] ずいうチェックボックスで蚭定したす。

画像4

iOS の蚭定

[蚭定] > [アクセシビリティ] > [動䜜] > [芖差効果を枛らす] ずいうトグルで蚭定したす。

画像5

Android の蚭定

[蚭定] > [ナヌザヌ補助] > [芖認性向䞊] > [アニメヌションを削陀] ずいうトグルで蚭定したす。

画像6

このように、各デバむスで蚭定できるようになっおいたす。

メディアク゚リの曞き方

さお、どの蚭定が prefers-reduced-motion 特性に圱響を及がすか理解したずころで、実際にメディアク゚リを曞いおみたす。

芖差効果を枛らすように蚭定されおいるずきに transition や animation を無効にすればよいので、以䞋のようになりたす。

@media (prefers-reduced-motion: reduce) {
  *,
  ::before,
  ::after {
    transition: none !important;
    animation: none !important;
  }
}

しかし、この曞き方には 2 ぀の問題点がありたす。

たずえば、opacity プロパティの倀が 0 から 1 に倉わるアニメヌションの堎合、animation: none !important; ずしおしたうず、芁玠がずっず衚瀺されないたたになっおしたいたす。

そしおもう 1 ぀、transitionend や animationend むベントが発火しない問題が発生したす。アニメヌションが終了したずきに JavaScript で䜕らかの凊理を行う堎合、むベントが発火しないため凊理が行われないたたずなっおしたいたす。

そこで、次のように指定したす。

@media (prefers-reduced-motion: reduce) {
  *,
  ::before,
  ::after {
    animation-delay: -1ms !important;
    animation-duration: 1ms !important;
    animation-iteration-count: 1 !important;
    transition-delay: 0s !important;
    transition-duration: 1ms !important;
  }
}

animation-duration プロパティに 1ms ずいう非垞に短い時間を指定するこずで、アニメヌションは実行されるため問題点は解消されたす。

animation-delay プロパティに -1ms を指定しおいるのは、負の倀を指定するこずで 1ms 埌の状況からアニメヌションが開始され、実質アニメヌションの描画をなくすためです。

たた、animation-iteration-count プロパティに 1 を指定するこずで、無限に再生される infinite アニメヌションが 1 床だけ再生されるようにしたす。

transition プロパティも animation ず同様に指定したすが、transition-delay プロパティに -1ms を指定するず Chrome で transitionend むベントが発火しないずいう問題があるため、0s ずしおいたす。

transition-duration プロパティに 0s を指定しおいる䟋も芋かけたすが、Safari で transitionend むベントが発火しなくなるので、1ms ずしおいたす。

@media (prefers-reduced-motion: reduce) {
  *,
  ::before,
  ::after {
    animation-delay: -1ms !important;
    animation-duration: 1ms !important;
    animation-iteration-count: 1 !important;
    transition-delay: 0s !important;
    transition-duration: 1ms !important;
    background-attachment: initial !important;
    scroll-behavior: auto !important;
  }
}

぀いでに、background-attachment ず scroll-behavior プロパティも無効にしおおくずいいかもしれたせんね。

@media (prefers-reduced-motion: reduce) {
  :not(.safe-animation),
  :not(.safe-animation)::before,
  :not(.safe-animation)::after {
    animation-delay: -1ms !important;
    animation-duration: 1ms !important;
    animation-iteration-count: 1 !important;
    transition-delay: 0s !important;
    transition-duration: 1ms !important;
    background-attachment: initial !important;
    scroll-behavior: auto !important;
  }
}

たた、䞀郚の芁玠にのみ指定したいずきは :not(.safe-animation) ずいうようにすれば、.safe-animation クラスが指定されおいる芁玠は陀倖できたす。

察応ブラりザ
・IE -
・Edge -
・Chromium Edge 79
・Firefox 63
・Chrome 74
・Safari 10.1
・Opera 62
・iOS Safari 10.3
・Android 79

すでに、ほがすべおのブラりザが察応しおいるので、今から察応しおいくずよいず思いたす。

今すぐ始めるCSSレシピブック

いいなず思ったら応揎しよう