Webアニメーション・はじめの一歩

なめらかに変化させるtransition

色や大きさが「パッ」と切り替わるのを「ふわっ」に変える。CSSアニメーションの入り口、transitionを学びます。

前回、ボタンにカーソルを乗せるとふわっと拡がる例を見ました。あの「ふわっ」の正体がtransitionです。

何もつけないと「パッ」と切り替わる

まずはtransitionが無いとどうなるか見てみましょう。

色も角の丸みも、カーソルを乗せた瞬間にカクッと切り替わります。

transitionをつけると「ふわっ」に変わる

同じCSSに、transitionを1行足すだけです。

同じ変化なのに、印象がまったく違いますね。

transitionの書き方

<div class="box">ホバーしてみて</div>
.box {
  transition: background-color 0.4s ease;
}

スペース区切りで、こういう意味を持ちます。

部分役割
background-color何を変化させるか(プロパティ名)
0.4sどれくらいの時間をかけるか
ease変化のリズム(イージング。後述)

複数のプロパティを同時になめらかにしたいときは、カンマで区切って並べます(上の例のbackground-color 0.4s ease, border-radius 0.4s easeのように)。全部まとめてなめらかにしたいときは、プロパティ名の代わりにallも使えます。

<div class="box">ホバーしてみて</div>
.box {
  transition: all 0.4s ease;
}

イージング:変化のリズム

easeの部分を変えると、変化の「勢いのつき方」が変わります。

動きの感じ
easeゆっくり始まって、ゆっくり終わる(既定値・自然な感じ)
linear最初から最後まで一定の速さ
ease-inゆっくり始まって、勢いよく終わる
ease-out勢いよく始まって、ゆっくり終わる

時間はどれくらいがいい?

0.4ssは秒(seconds)のこと。0.2sなら0.2秒です。この数字ひとつで印象が大きく変わります。

時間印象
0.1s前後速すぎて、変化に気づきにくい
0.2〜0.3sキビキビして心地よい(ボタンなどの定番)
0.4〜0.6sゆったり・上品(カードや大きめの要素向き)
1s以上「待たされている」と感じやすい

迷ったら0.2〜0.3秒から始めて、実際に触りながら調整しましょう。「気持ちいい」と感じる長さは、動かす部品の大きさによっても変わります。

遅らせて始めるtransition-delay

時間の値を2つ書くと、2つ目は「始めるまでの待ち時間」(ディレイ)になります。

<div class="box">ホバーしてみて</div>
.box {
  transition: background-color 0.4s 0.2s ease;
}

この例では「カーソルが乗って0.2秒待ってから、0.4秒かけて色が変わる」という動きになります。複数の要素の動き出しを少しずつずらして、順番に変化させたいときに活躍します。

transitionできないプロパティもある

transitionがなめらかにできるのは、中間の状態が計算できる値だけです。色なら「紫とオレンジの中間色」、大きさなら「160pxと200pxの間の180px」が作れるので、なめらかに変化できます。

一方、display: nonedisplay: blockのような中間が存在しない値は、transitionをつけてもパッと切り替わります。

なめらかにできるできない(パッと切り替わる)
colorbackground-color(色)display(表示/非表示)
widthheightfont-size(大きさ)font-family(フォントの種類)
opacity(透明度)・transform(変形)

このレッスンのまとめ

  1. transitionをつけると、値の変化がなめらかになる
  2. 書き方はプロパティ名 時間 イージング
  3. allで全プロパティ、カンマ区切りで複数指定できる
  4. transition変化前の要素につける

よくある質問

transitionが効かず、パッと切り替わってしまうのはなぜ?
transitionは変化する前(ふだんの側)のセレクタに書くのが基本です。hover側にだけ書いていないか、変化させるプロパティ名が合っているかを確認しましょう。
displayのnoneとblockの切り替えがアニメーションしないのはなぜ?
displayは中間の状態が作れないプロパティなので、transitionの対象になりません。ふわっと消したい・出したいときは、opacity(透明度)を変化させましょう。
時間はどれくらいがちょうどいい?
0.2〜0.3秒が心地よい目安です。1秒を超えると「待たされている」と感じられやすくなります。