CSSアニメーション Transition

CSSアニメーション Transition
Image by 🎄Merry Christmas 🎄 from Pixabay

2021.01.24(更新日:2021.01.25)

手軽にスムーズに動くことやJSを介さなくとも動く点などメリットも多いCSSでのアニメーション。
速度やイージング、時間の調節など細かい部分も設定出来る。
細かい設定…ってことで、やっぱりどう書くかすぐに忘れる「Transitionプロパティ」をまとめてみる。

この記事は1年以上経過しています。内容的に古い場合があります。

transitionでアニメーションの時間設定

transitionはアニメーションの時間などを指定するためのプロパティ。アニメーションが終了すると元のプロパティに戻るので、ループさせたり、より細かい指定が必要な場合は「animation」を使用した方が良い。
hoverアクションなど「ちょっとしたアニメーション」時に使用するのが多いと思われる。

それぞれ個別に指定出来るプロパティ。

  • transition-property・・・適用するプロパティの名前(初期値「all」)
  • transition-duration・・・アニメーション開始から終了までの所要時間を指定(初期値「0s」)
  • transition-timing-function・・・アニメーションのイージングを指定(初期値「ease」)
  • transition-delay・・・アニメーションを開始するまでの遅延時間を指定(初期値「0s」)

これらをひとまとめで書けるのが「transition

/*
長ったらしいので以下に置き換えて書いてます。
property -> transition-property値
duration -> transition-duration値
easing -> transition-timing-function値
delay -> transition-delay値
*/

/* 1つのプロパティに指定(スペース区切り) */
transition: property duration easing delay;

/* 複数のプロパティに指定(カンマ区切りにする) */
transition: property duration easing delay, property duration easing delay;
/* Vendor prefixesの例 これらは省略します */
-webkit-transition-property: all;
-o-transition-property: all;
transition-property: all;

Autoprefixer CSS: Browserslist last 4 version 2021.01

ひとまとめでも入れる値は一緒なのでそれぞれまとめてみる。

プロパティの指定 - transition-property

/* 値はCSSプロパティ(初期値はall) */
transition-property: 値;

値部分にはCSSで使うプロパティ(幅なら「width」、背景色なら「background-color」)が入る。すべてを含めるなら「all」となる。複数の値の指定はカンマ区切りで指定。

アニメーションの時間 - transition-duration

/* 値はsもしくはms(初期値は0s) */
transition-duration: 値;

値単位は「s」なら「秒(1sなら1秒)」、「ms」なら「ミリ秒(1msなら1000分の1秒)」を指定。
複数指定する場合カンマ区切りで。この部分はtransition-propertyのプロパティと連動しているようなので同一数にする方が無難。

/* 複数指定の例 */
transition-property: width, background-color;
transition-duration: 3s, 1s;

イージングの指定 - transition-timing-function

transition-timing-function: 値;

値には以下がある。

  • ease・・・始めと終わりをゆっくり
  • linear・・・均一の速度
  • ease-in・・・除々に加速しながら
  • ease-out・・・除々に減速しながら
  • ease-in-out・・・加速し減速
  • cubic-bezier( 値1, 値2, 値3, 値4 )・・・独自のイージングを設定する
  • steps( ステップ数, 変化する位置 )・・・ステップ数ごとに等間隔で変化

stepsは一定時間内で段階的に変化する。変化する位置は「start」もしくは「end(デフォルト)」。
パラパラ漫画やコマ撮りアニメーションみたいのを作るのに便利そう。
cubic-bezierのジェネレーター以下のページ参照。目視出来る上に設定したらコピペで完了。Excellent

遅延時間 - transition-delay

/* 値はsもしくはms(初期値は0s) */
transition-delay: 値;

値単位は「s」なら「秒(1sなら1秒)」、「ms」なら「ミリ秒(1msなら1000分の1秒)」を指定。
transition-durationと同じく複数指定する場合カンマ区切りで。この部分はtransition-propertyのプロパティと連動しているようなので扱いはtransition-durationと同じ。