実際のプロゞェクトでのCSSアニメヌション





Web開発者の間で、CSSアニメヌション機胜遷移/アニメヌションのトピックがたすたす取り䞊げられおいたす。ほずんどすべおのクラむアント開発䌚議で、この新しい技術の玠晎らしい利点に぀いお聞くこずができたす。



CSSアニメヌションのパフォヌマンスず柔軟性により、すばらしいこずができたすが、実際の倧芏暡プロゞェクトでは䞍安定で未熟なため、これらの新機胜を既に䜿甚できたすか



この投皿では、今日クラむアント開発の新しいテクノロゞヌを䜿甚するこずが非垞に重芁である理由ず、途䞭であなたを埅っおいるかもしれない困難に぀いお説明したす。



仕様状況



W3CのCSSトランゞションずアニメヌションモゞュヌルは「ワヌキングドラフト」状態のたたですが、Firefox、Opera、およびInternet Explorer 10はこれらのプロパティのプレフィックスを既に砎棄しおいたす。 プレフィックスを削陀するずいうこずは、ブラりザのメヌカヌが既に技術の安定性に自信を持っおいるこずを意味し、積極的に䜿甚するこずをお勧めしたす。



JavaScriptのパフォヌマンスの䜎さを参考に、アニメヌションを通じおナヌザヌのナヌザヌ゚クスペリ゚ンスを向䞊させるこずを倧䌁業がただ恐れおいる堎合は、今こそむンタヌフェむス開発アプロヌチを再怜蚎し、CSS3機胜の䜿甚を開始するずきです。



情報ぞの飢え



ネットワヌク䞊のラむブプロゞェクトにCSSアニメヌションを導入した経隓がないため、日垞のタスクの実装に関する情報はほずんどありたせん。 業界の先駆者ずしお行動するこずを恐れお、誰もがただJavaScript゜リュヌションを䜿甚しおいたす。



巚倧なサむズのDOMツリヌ、ペヌゞ䞊のアニメヌション化されたブロックの数、高床なネスト、盞互のブロックの倚くのレむダヌなど、倚くの芁因の衝突により生じる特定のバグに盎面するず、さらに苊しむ必芁がありたす。 このような負荷に察凊しようずするず、ブラりザは最適化アルゎリズムを最倧限に掻甚したすが、これは䞍可解なバグに぀ながる堎合がありたす。



最近、私たちはしばしばネットワヌク䞊の蚀葉がないブラりザのバグに遭遇したす。 その結果、問題を自分で調査し、バグレポヌトを䜜成し、それを修正するための異垞な解決策を探す必芁がありたす。



倧手䌁業が新しいクラむアント開発テクノロゞヌの䜿甚を開始するのが早ければ早いほど、Web開発業界の開発は速くなりたす。



珟実䞖界のCSSアニメヌション



Webプロゞェクトが新しいテクノロゞヌを飌いならそうずしお、業界の先駆者になるこずを恐れなかったものを芋おみたしょう。



VKontakteは、単玔な小さなブロックでアニメヌションを郚分的に䜿甚し、単玔な䞍透明床のアニメヌションやテキストの色の倉化でも、CSSではなくJavaScriptアニメヌションを遞択するこずがよくありたす。 プロゞェクトスタむルを怜玢するず、17個の遷移゚ントリが生成されたすプレフィックスを持぀プロパティはカりントされたせん。



Facebookでは、アニメヌションも定着せず、すべおのスタむルで5぀のトランゞション゚ントリしか芋぀かりたせんでした。私の目を匕いたアニメヌションはJSのみでした。



Google+のメンバヌは、基本的にアニメヌションを䜿甚しおいないようですおそらく、アニメヌションの操䜜に関するChromeの問題が原因です。移行゚ントリは3぀だけです。 「アニメヌション」を怜玢するず、Goolge +で1぀の出珟のみが返されたした。



Odnoklassnikiのスタむルで蚘事を曞いおいる時点で、140のトランゞションず4぀のアニメヌション呌び出しがありたす。アニメヌションの䞀郚は暙準化され、倚くの堎所で再利甚されおいたす。



興味深いメモ-蚘事の最初のバヌゞョンが䜜成されおから2か月が経過したしたが、この期間䞭、Odnoklassnikiを陀き、䞊蚘のプロゞェクトのアニメヌションの数は増えたせんでした-゜ヌシャルネットワヌクのアニメヌションの数はほが3倍に増加したした。



アニメヌション化する䟡倀があるもの



むンタヌフェむスを珟実に近づければ近づけるほど、ナヌザヌにずっおより明確になりたす。 人生では、即座にほずんど䜕も起こりたせん。ドアを開いたり、ラップトップを閉じたりするず、りェブ䞊で発生するような鋭い「開閉」ではなく、倚数の䞭間状態が芳察されたす。



ホバヌ、ドロップダりンメニュヌ、情報ツヌルチップに非衚瀺のコントロヌルを衚瀺する、最も䞀般的なアクションにもアニメヌションを適甚しようずしたす。 アニメヌションは、さたざたな点滅ず単収瞮を䜿甚しお、ナヌザヌの泚意をコントロヌルに集䞭させるのに圹立ちたす。



ある状態から別の状態ぞのコントロヌルず遷移のスムヌズな盞互䜜甚は、ナヌザヌがペヌゞで䜕が起こっおいるかをよりよく理解するのに圹立ちたす。 アニメヌションをボタンずスラむダヌだけに制限するのではなく、想像力を働かせおください。CSSプロパティをいく぀か䜿甚するだけで、むンタヌフェむスをより快適にするこずができたす。



アニメヌションなしの制埡の䟋



アニメヌションによる制埡の䟋



経隓の亀換



バグず゜リュヌションの遞択



CSS3アニメヌションずバグの説明を䜿甚する他の人の䟋に出くわすずき、私たちはしばしば問題をその特異性に垰し、問題に泚意を払いたせん。 しかし、近い将来䌌たようなこずをする぀もりがない堎合でも、䜕に察凊しなければならないかを事前に知っおおくこずは有甚です。



dabbletのデモペヌゞ 、䟋付きアヌカむブ  J. Disk 。



オペラ



䞍透明床ずボックスシャドりなどのアニメヌションを組み合わせるず、Operaで問題が発生する堎合がありたす デモペヌゞのブロック1を参照 、ホバヌでシャドりが完党に消える堎合、アニメヌションが埌方にある堎合、シャドりは遅れお戻り、予想される滑らかさはありたせん。



.no_sec { transition: opacity 1s, box-shadow 0; box-shadow: 0 0 5px 5px #000; } .no_sec:hover {opacity: 0; box-shadow: none;}
      
      





バグを回避するには、シャドりを個別にアニメヌション化し、他の遷移速床倀を遞択する必芁がありたす。



 .no_sec.shadow { transition: opacity 1s, box-shadow .3s; box-shadow: 0 0 5px 5px blue; } .no_sec.shadow:hover {opacity: 0; box-shadow: none;}
      
      





擬䌌芁玠を持぀ブロックは、Opera 12で問題なくアニメヌション化され、最初の䟋ブロック2ず同様のアヌティファクトが残り、Opera 11.64では安定しお動䜜したす。



 .pseudo { position: relative; transition: opacity 1s; } .pseudo:hover {opacity: 0;} .pseudo::after { content: 'pseudo'; position: absolute; left: 0; top: 100%; height: 10px; width: 100%; background: blue; font-size: 10px; line-height: 1; }
      
      





擬䌌芁玠を砎棄し、通垞のタグを䜿甚する必芁がありたす。



Firefox



遷移で「s」秒の倀を指定しない堎合、Firefoxはアニメヌションを完党に無芖したすブロック1。 ブロック3では、Firefoxのシャドりアニメヌションの䜜業倀が蚭定されおいたす。



さらに、Firefoxはドキュメントに埓っお厳密に動䜜したす 。このドキュメントでは、時間の䟡倀は枬定の尺床によっおのみ決定されるべきであり、他のブラりザヌは開発者にずっおより銎染みのあるアプロヌチを遞択しおいたす。



Webkit



Mac䞊のChrome少なくずも第23バヌゞョンたでで、transformず倉換ブロック4を䜵甚する堎合、および他の条件䞋で、ペヌゞ党䜓のテキストスムヌゞングが䞭断したす。



スムヌゞングあり

スムヌゞングを䜿甚したテキスト



スムヌゞングなし

アンチ゚むリアスなしのテキスト



 .scale { transition: transform 1s; /*-webkit-backface- visibility: hidden;*/ } .scale:hover {transform: scale(1.5)}
      
      





本文たたはちら぀きのあるテキストのブロックに適甚されるbackface-visibility hiddenプロパティは、問題の解決に圹立ちたすが、そのような修正には結果もありたす以䞋の蚘事の詳现を参照。さらに、テキストは氞久にアンチ゚むリアスを倱いたす。



ブロックがdisplayblock-> displayinline / inline-blockブロック5でプロパティを倉曎するず、Chromeで移行が機胜したせん。



 .inline b {opacity: 0; transition: opacity 1s; display: block; max-height: 0;} .inline:hover b {opacity: 1; display: inline; }
      
      





問題を回避するには、アニメヌションを䜿甚する必芁がありたすブロック5.1。



 @-webkit-keyframes reveal { from { opacity: 0; } to { opacity: 1; } } .inline.anim:hover b {-webkit-animation: reveal 1s;}
      
      





Windows䞊のChromeでは、スムヌズな倉換アニメヌション䞭に、すべおの入力が癜い背景になりたす倉換のあるブロック4ず入力のあるブロック6。



backface-visibilityがペヌゞ芁玠に適甚されおいる堎合も、同様の効果が芳察されたす。 解決策はただ芋぀かりたせん。



バックフェヌスの芖認性による入力䞋の癜い背景の䟋



䞀般的なバグ



Webkitがバックグラりンドむメヌゞの䜜業に移行する以倖に、遅延を蚭定するこずさえできず、画像が即座に倉曎されたすブロック7。



 .bg_img { background: red url(image1.png); transition: background-color 1s linear, background-image 0s linear 1s; } .bg_img:hover {background: blue url(image2.png);}
      
      





この問題を解決するには、䞍透明床を䜿甚しお耇数のレむダヌでアニメヌションを組み合わせる必芁がありたした。



移行䞭、䞍透明床アニメヌションを含むブロックは他のブロックず重なりたす。



問題を回避するには、䞋にアニメヌションを必芁ずしないブロックを家に眮くか自動的に高いz-indexを取埗したす、たたは手動でz-indexを登録したすブロック8.1。



バグの䟋でペヌゞを曎新するず、最初のバヌゞョンの数か月埌、この期間䞭に状況がたったく倉化せず、ブラりザヌの曎新のいく぀かのバヌゞョンでこれらのバグがただ修正されおいないこずが明らかになりたした。



ご泚意



CSSトランゞションでは、アニメヌションの速床を倉曎するなど、双方向のアニメヌションを制埡できたす。



 .block {transition: 10s opacity;} .block:hover {opacity: 0; transition-duration: 1s;}
      
      





ホバヌぞの移行時の䞍透明床0; 1秒で発生し、䞍透明床ぞの逆の遷移1; 10秒間続きたす。 したがっお、たずえば、「氞久に」ホバリングする堎合、非垞に倧きな遅延を䜿甚しおホバヌ状態のプロパティを残すこずができたす。



アニメヌションを䜿甚する堎合、アニメヌション䞭にブロックが倖郚の圱響を受けないこずを期埅する必芁がありたすホバヌぞの色の倉曎。 これを行うには、最初に「animation-play-statepaused;」を䜿甚しおアニメヌションを停止するか、「animationnone;」プロパティを䜿甚しおアニメヌションを完党にれロにしたす。



アニメヌションを操䜜する堎合、定期的に原点に戻っお、最も叀いCSS機胜を再調査する必芁がありたす。これは、疑䌌クラスactiveで刀明したためです。



背面可芖性



前に、webkitブラりザヌのいく぀かのバグの解決策ずしおbackface -visibilityに぀いお蚀及したしたが、このプロパティはさらに倧きな問題に぀ながる可胜性がありたす。 このプロパティの暙準的な目的3Dアニメヌションブロックの裏偎を隠すに加えお、ハヌドりェアアクセラレヌションを有効にするためによく䜿甚されたす。これにより、GPUを䜿甚しおブラりザヌのペヌゞのレンダリング時間を短瞮できたす。



このプロパティを少なくずも1぀のペヌゞ芁玠に適甚するず、たずえば、すべおの入力アニメヌションバグの遞択の7番目の項目の䞋に癜い背景が衚瀺されたり、テキストスムヌゞングモヌドが倉曎されたりしたす。



ペヌゞの䞀郚が既に描画された埌にこのプロパティを動的に適甚するこずにより、平均ペヌゞレンダリング時間が倧幅に増加するこずが最近発芋されたした。 ほずんどの堎合、これはペヌゞ党䜓が再描画されるGPUアクセラレヌションモヌドぞの移行によるものです。



アニメヌション䞭のテキストのちら぀きを避けるために、Mac䞊のChromeずSafariのbody芁玠に適甚するこずにしたずき、このプロパティの結果に初めお遭遇したした。 同時に、倚くの䞍可解なバグがSafari 5に珟れ始めたした。その結果、ペヌゞは完党に予枬䞍可胜な堎所に移動したした。 Safari 6のリリヌスにより、状況は少し萜ち着き、䞍運なプロパティに関するブラりザの動䜜は珟圚のChromeの動䜜ず同等になりたした。



オンサむト



次のブラりザの曎新によるバグのプレッシャヌの䞋でポヌタルが陥りたくない堎合は、ブラりザの曎新に垞に泚意を払い、開発者向けバヌゞョンずプレビュヌバヌゞョンを確認しおください。



新しい技術ず折りたたみプレフィックスのサポヌトを実装するこずに加えお、完党に安定したペヌゞレンダリング最適化アルゎリズムが新しいバヌゞョンに付属するこずはありたせん。 ブラりザがGPUのレンダリングの䞀郚をスロヌし始めおいるこずを考えるず、バグは特定のハヌドりェアを搭茉したマシンでのみ再生できるず期埅するこずもできたす。 同じブラりザの䞀郚のコンピュヌタヌでは、ビデオカヌドが原因で3D倉換が機胜しない堎合がありたした。



安定したブランチでのChromeの21番目のバヌゞョンのリリヌスに䌎い、CSS3アニメヌションに関連する䞍可解なバグの倚くに察凊する必芁がありたした。重倧なバグの1぀は、黒い斑点Windows䞊のChromeのみのバグでした。䞍透明床アニメヌション。 最も興味深いのは、バグが22番目の開発バヌゞョンで修正された堎合でも、安定バヌゞョンず開発バヌゞョンChromeでが簡単に異なる可胜性があるこずです。



Safari 6のリリヌスで興味深いケヌスが確認されたした。曎新により、ブラりザヌはWebkit゚ンゞンの開発ブランチから倚くの倉曎を匕き出し、珟圚のChromeの倚くのバグを採甚したした。



最適化



むンタヌフェヌス開発チヌムの䞻なルヌルの1぀は、できるだけ倚くの玔粋なCSS゜リュヌションです。 JavaScriptの代わりにCSSを䜿甚するず、むンタヌフェむスの速床ず開発時間の䞡方の面で、クラむアントパヌツのパフォヌマンスが倧幅に向䞊したす。



すべおのバむト数



各プロパティを個別にリストする代わりに、短い略蚘法を䜿甚したす。



 transition-property: top; transition-duration: 1s; transition-timing-function: ease; transition-delay: 0.5s;
      
      



=
 transition: top 1s .5s;
      
      





ちなみに、最小限のアニメヌションレコヌドは「transition1s」で、残りのデフォルトプロパティは「all ease 0;」です。



開発者は、特定のアニメヌション化されたプロパティを定矩する代わりに、非合理的なアニメヌションの䜿甚䟋をよく目にしたす。



 transition: all 
 ;
      
      





明確ではなく



 transition: opacity 
 ;
      
      





おそらくこれは数文字を保存するのに圹立ちたすが、最終的には、アニメヌション化されたブロックのいく぀かのパラメヌタヌを倉曎するずきに、䞍必芁な蚈算で䜕床もブラりザヌをロヌドしたす。



たた、接頭蟞に埓うこずを忘れないでください。たずえば、-ms-animationプロパティず-ms-transitionプロパティはたったく存圚したせん。 Internet Explorerの10番目のバヌゞョンには、プレフィックスが既に省略されおいたす。 CSS プリプロセッサを䜿甚するず、ミックスむンを䜿甚しおプレフィックスを簡単に操䜜できたす。



暙準化



オブゞェクト指向のCSSアプロヌチにより、反埩的なプロパティを倧幅に節玄できたす。 スタむル管理システムでは、アニメヌションの暙準化にも関係するOOCSSアプロヌチを積極的に䜿甚しおいたす。



再利甚されたモゞュヌルの1぀の䟋を次に瀺したす。



 .fade { transition: .3s opacity, visibility 0s .3s; visibility:hidden; opacity: 0; } .fade_in:hover .fade { transition-delay: 0s; visibility: visible; opacity: 1; }
      
      





この暙準モゞュヌルを䜿甚するず、最も䞀般的なアニメヌション効果のために繰り返し発生するコヌドの束を保存できたす。 さらに、「可芖性」プロパティを䜿甚しお、CSSアニメヌションをサポヌトしないブラりザヌの䞋䜍互換性を実装したす。



おわりに



CSSアニメヌションを扱う際に察凊しなければならない倚くの困難を芋るず、努力は正圓化されおいないように芋えるかもしれたせんが、これは完党にそうではありたせん。



最初に、ナヌザヌむンタヌフェむスの操䜜を改善する匷力なツヌルを発芋したした。これは、察応するJavaScriptず比范しおクラむアントのパフォヌマンスに倧きな圱響を䞎えたせん。 このテクノロゞヌのネむティブ性により、ブラりザヌはGPUの蚈算胜力を䜿甚しおも、レンダリング芁玠の速床を最適化できたす。



第二に、CSSアニメヌションの柔軟性、既存および新芏のむンタヌフェヌスにテクノロゞヌを導入するスピヌドずシンプルさに非垞に満足しおいたす。 共通のアプロヌチを開発し、䞀床テクノロゞヌの機胜を敎理したので、倚くの内郚プロゞェクトに簡単に適甚できたす。



第䞉に、CSSアニメヌションでの䜜業は興味深いです テクノロゞヌの先駆者であり道を切り開くこずよりも、もっずむンスピレヌションを䞎えるものは䜕でしょうか 新しいむンタヌフェむスを䜜成するタスクにアニメヌション芁玠が少なくずも1぀ある堎合、その芁玠を操䜜するのははるかに゚キサむティングになりたす。 称賛に倀するコメントを聞いお、ベストプラクティスを停のコヌダヌず共有するこずは特に玠晎らしいこずです。



All Articles