CSS TransitionやCSS Animationについて入門の入門

Published: 2018年9月12日 by tomsato

概要

CSSアニメーションについてまとめる

CSSでアニメーションを実装する上でCSS AnimationとCSS Transitionの2種類があるのでそれぞれまとめていく

CSSアニメーションのメリットについて

何故CSSでアニメーションを行うのか

  • JavaScriptが不要(クリック時に何かアニメーションさせるなどの場合はJavaScriptは必要)
  • 単純なアニメーションの場合は実装が簡単

CSSアニメーションの種類

CSS Animation

キーフレームアニメーションを適用できる機能、細かい動きのアニメーションを実装する時に利用する

キーフレームアニメーションとは、アニメーションの開始(0%)から終了(100%)までの経過地点にプロパティを指定できるアニメーションのこと(プロパティを指定した経過地点のことをキーフレームという)

CSS Transition

一定時間でプロパティを変化させる機能、単純な動きのアニメーションを実装する際に利用する

ブラウザのサポート状況

CSS Animation

IEについてはIE10以降からサポートしている
またiOS8.0以下やAndroid4.4.x系向けに対応したい場合はベンダープレフィックスを書く
詳細はこちらのcaniuseを参考にする

ベンダープレフィックスについての参考:そのベンダープレフィックス、いつまでつけてるの?

CSS Transition

IEについてはIE10以降からサポートしている
Androidは4.3以下も対応する場合はベンダープレフィックスが必要
詳細はこちらのcaniuseを参考にする

CSSアニメーションの使い分けについて

JavaScriptとの使い分け

CSSアニメーションとJavaScriptの使い分けについてはこちらを参考にする
CSS アニメーションと JavaScript のアニメーションの比較

要素を拡大/縮小させるなど、単純なアニメーションの時にはCSSアニメーションを使うのが良さそう

CSS TransitionとCSS Animationの使い分け

  • CSS Transitionはhoverなどきっかけがないと動かない
  • CSS Animationはループが可能
  • CSS Animationはキーフレームで細かい設定が可能(10%の段階でこの色に、50%の段階ではこの色で高さはこうするなどが指定できる)

サンプル

CSS Animation

記述例

animation: anime1 2000ms ease -2s infinite alternate;

animationプロパティは以下のプロパティを一括で指定することができるプロパティである
左から↓の指定となっている

プロパティ名 説明
animation-name 適用するアニメーションの名前(どういうものを記述するかは後述する)
animation-duration かかる時間
animation-timing-function アニメーションの種類
animation-delay アニメーションを何秒後に開始するか(0の場合でも0sとしないと動かないので注意)
animation-iteration-count 繰り返す回数
animation-direction アニメーション再生の向き、normalの場合は0%→100%までアニメーションさせたらまた0%からのサイクルでアニメーションさせる、alternateの場合は1回目(奇数回)のアニメーションでは0%→100%、2回目(偶数回)では100%→0%と逆方向の再生となってアニメーションサイクルを繰り返すことになる

また他には以下のようなプロパティもある

animation-fill-mode アニメーションの開始前、終了後のスタイルを指定する
animation-play-state アニメーションの再生・停止を指定する

キーフレームの書き方としては、animation-nameで指定したanime1(アニメーションの名前)を定義する形で、XX%毎(キーフーム毎)にどういう状態になっているかを記述する

@keyframes anime1 {
  0% {
    width: 100px;
    background-color: #01579b;
  }
  100% {
    width: 200px;
    background-color: #439889;
  }
}

See the Pen css animation example by tomsato (@tomsato) on CodePen.0

CSS Transition

記述例

transition: all 1000ms 0s ease;

transition: margin-left, color 5s -2s ease;

transitionプロパティは以下のプロパティを一括で指定することができるプロパティである
左から↓の指定となっている

プロパティ名 説明
transition-property トランジション効果を適用するCSSプロパティを指定する、allの場合は全プロパティが指定される、カンマ区切りで複数のプロパティを指定可能
transition-duration かかる時間
transition-timing-function アニメーションの種類
transition-delay アニメーションを何秒後に開始するか(0の場合でも0sとしないと動かないので注意)

See the Pen css animation example by tomsato (@tomsato) on CodePen.0

アニメーションの終了をJavaScriptで検知する

アニメーションの終了イベントはCSS Animationの場合は「animationend」、CSS Transitionの場合は「transitionend」となる
animation-iteration-countにinfiniteを指定したときの1ループ終了時のイベントはanimationendではなくanimationiterationとなることに注意

また例えばCSSで「-webkit-」のベンダープレフィックスをつけていた場合はJavaScriptのイベントも「webkitAnimationEnd」となることにも注意

See the Pen css animation example by tomsato (@tomsato) on CodePen.0

またtransitionendの場合、変化させたプロパティの分だけイベントが発火するので1回だけカウントしたい場合はpropertyNameで確認する必要がある

See the Pen css transition example by tomsato (@tomsato) on CodePen.0

Animate.css

手軽にCSSアニメーションが実装可能なCSSライブラリとしてAnimate.cssというものがある
簡単に導入、利用ができるのでこれを入れるのが良さそう

公式サイトで各アニメーション毎の挙動を確認できる

サンプルを見るとわかる通りアニメーションを付加させたい要素のclassに「animated (付加させたいアニメーションの種類)」をつけるだけでアニメーションが適用できる、アニメーションをループさせたい場合はclassにinfiniteをつける

See the Pen css animation example by tomsato (@tomsato) on CodePen.0

コメントを書く

※ 個別に返信が必要な時のみご記入ください

※ Emailは公開されません

※ 承認されると名前・コメントが下記に表示されます

コメント一覧

最近の投稿

ビジュアルリグレッションテストについてまとめ、ネットで調べると数多くのライブラリがありどれがどんな立ち位置なのか全体像がわかりずらかったのでどんな種類があるのか入門の入門としてまとめます、またPlaywrightを使って実際に触ってみました

社内ツールなどの超小規模なAPIをGolangで実装する際にフレームワークを使うべきかを、実際にnet/httpを使った実装とフレームワークを使った実装を比較することでどれだけ優位性があるかを見ていきたいと思います。今回はフレームワークにはシンプルで使いやすそうなEchoを使うことにします。

vue-pdfを使ってNuxt.jsで作成しているアプリケーションに pdfスライドを表示させるサンプルを作成しました README.md通りに実装してもうまくいかないところがあったのでそのあたり含めてまとめます

Vue.js / Nuxt.jsにおけるログインの実装方法をまとめる Auth0やNuxt.jsのAuth Moduleとmiddlewareについて調べつつサンプルを作成することで理解を深める

コンポーネント設計について考える Atomic DesignやPresentational Component, Container Componentについてまとめつつ 自分だったらVue.js / Nuxt.jsでどういうコンポーネント設計にするかについてまとめます

カテゴリ一覧

タグ一覧