CSS ・ アニメーション

transition

変化をなめらかにする

ホバーなどでプロパティの値が変わるとき、その変化を指定した時間をかけてなめらかに見せます。

初期値
all 0s ease 0s
適用対象
すべての要素
継承
しない
01

サンプルコード

HTML
1<button class="btn">マウスを乗せてください</button>
CSS
1.btn {
2 padding: 12px 24px;
3 color: #7d5411;
4 background: transparent;
5 border: 1px solid #b68235;
6 border-radius: 4px;
7 transition: background-color 0.3s ease;
8}
9.btn:hover {
10 background-color: #ffe3bf;
11}
02

実行結果

ブラウザでの表示ボタンにマウスを乗せると背景色が変化します
03

解説

transition は「移り変わり」「変化」「変わり目」という意味で、ホバー時やクリック時の動きを調整できるプロパティです。animation プロパティほど細かい設定はできませんが、簡単に扱えるため、ホバー時の動きなどにおすすめです。

transition は「どのプロパティを」「何秒かけて」「どんな速度変化で」変えるかを1行で指定する一括指定プロパティです。

変化前の状態(.btn)に書くのがポイントです。こうすると、マウスを乗せたときも離したときも、なめらかに変化します。

ease は始めと終わりがゆっくりになる動き、linear は一定速度の動きです。

04

応用例・注意点

指定できる値

値説明
transition-property変化させるプロパティ名(all ですべて)
transition-duration変化にかける時間(0.3s など)
transition-timing-functionease / linear / ease-in-out など速度の変化
transition-delay変化が始まるまでの待ち時間

動きを減らす設定に配慮する

OSで「視差効果を減らす」を設定している利用者には、アニメーションを止めます。

CSS
1@media (prefers-reduced-motion: reduce) {
2 * {
3 transition: none;
4 }
5}

注意点

  1. 01all を指定すると、意図しないプロパティまで動くことがあります。
  2. 02width や top の変化は描画の負荷が高いため、transform や opacity を使うと軽く動きます。
05

ショートハンドの書き方と、うまく動かないとき

ショートハンドと省略なしは同じ意味

例:ショートハンドで書く

マウスを乗せると、0.3秒待ってから0.5秒かけて背景色が変わります。

HTML
1<div class="box">マウスを乗せてください</div>
CSS
1.box {
2 width: 220px;
3 padding: 24px 0;
4 text-align: center;
5 background-color: #e1ad66;
6 transition: background-color .5s ease-in-out .3s;
7}
8.box:hover {
9 background-color: #00f; /* 背景色をアニメーションで変化させる */
10 color: #fff;
11}
ブラウザでの表示

コードと表示の対応

  1. background-colortransition-property:背景色を変化させる
  2. .5stransition-duration:0.5秒かけて(1つ目の秒数)
  3. ease-in-outtransition-timing-function:初速と終速を遅めに
  4. .3stransition-delay:0.3秒後に(2つ目の秒数)

上のショートハンドは、次のように4つのプロパティに分けて書いたものと どちらも同じ です。

省略なしの書き方意味
transition-property: background-color;背景色を変化させる
transition-duration: .5s;0.5秒かけて
transition-timing-function: ease-in-out;初速と終速を遅めに
transition-delay: .3s;0.3秒後に

案件ベースでもショートハンドで書くことが多く、transform や opacity とセットで使うことが多いです。

transition がうまく動作しないときは

確認すること

  • 書く対象が間違えていないか確認する。transition は「ホバー前」のセレクタ(.box)に書きます。.box:hover だけに書くのはよく見かけるミスで、戻るときに動きが付きません。
  • display に transition を設定しようとしていないか確認する。display: none から block へは、なめらかに変化させられません。visibility も同様で、切り替わりはしますがフェードのようにはなりません。表示・非表示をなめらかにしたいときは opacity と組み合わせるか、animation プロパティを使うようにします。
↑↓ 選択Enter 移動Esc 閉じるCtrl K⌘K で開閉