transition-delay
『transition』の『イベント開始からアニメーションが始まるまでの待ち時間』を指定できます。
基本的な使い方は『transition-duration』と同じですが、『transition』でまとめて指定した際に『transition-delay』の値は省略できる為、『transition-duration』の様に上書きをする必要はありません。
ブラウザのバージョンによっては、ベンダープレフィックス『webkit』、『moz』、『ms』等を付けないと動かない場合があるので、使用する際はベンダープレフィックスを付けるようにすることが一般的です。またPCのスペックによっては動きがカクついてしまう場合があります。
サンプルコード
style.css
/* 1秒待ってからアニメーション開始 */
.btn { transition: background-color 0.3s ease; transition-delay: 1s;}
/* 遅延なし(即アニメーション開始)*/
.box { transition: opacity 0.5s; transition-delay: 0s;}
/* 負の値: アニメーションを途中から開始 */
.item { transition: transform 1s; transition-delay: -0.5s;}
/* transition一括指定で遅延を含める(第4引数が遅延) */
.card { transition: background-color 0.3s ease 0.5s;}
/* 複数プロパティに異なる遅延をつける */
.menu-item:hover .icon { transition: transform 0.3s; transition-delay: 0s;}
.menu-item:hover .label { transition: opacity 0.3s; transition-delay: 0.1s;}
ブラウザでの表示結果
div {
background: #f00;
width: 200px;
transition: 0.5s;
-webkit-transition: 0.5s;
-moz-transition: 0.5s;
-ms-transition: 0.5s;
transition-delay: 1s;
-webkit-transition-delay: 1s;
-moz-transition-delay: 1s;
-ms-transition-delay: 1s;
}
div:hover {
width: 300px;
}
概要
『transition』の『イベント開始からアニメーションが始まるまでの待ち時間』を指定できます。
『transition-delay』の値は『,』で区切る事により複数の『アニメーションが始まるまでの待ち時間』を同時に指定できます。
div {
background: #f00;
width: 200px;
height: 100px;
transition: width 1s, height 1s;
-webkit-transition: width 1s, height 1s;
-moz-transition: width 1s, height 1s;
-ms-transition: width 1s, height 1s;
transition-delay: 1s, 2s;
-webkit-transition-delay: 1s, 2s;
-moz-transition-delay: 1s, 2s;
-ms-transition-delay: 1s, 2s;
}
div:hover {
width: 300px;
height: 200px;
background: #ff0;
}
指定されているプロパティの数より『transition-delay』の値が少ない場合は指定した値が繰り返されているものとして適用されます。
div {
background: #f00;
width: 200px;
height: 100px;
transition: width 1s, height 1s, background 1s;
-webkit-transition: width 1s, height 1s, background 1s;
-moz-transition: width 1s, height 1s, background 1s;
-ms-transition: width 1s, height 1s, background 1s;
transition-delay: 1s, 2s;
-webkit-transition-delay: 1s, 2s;
-moz-transition-delay: 1s, 2s;
-ms-transition-delay: 1s, 2s;
}
div:hover {
width: 300px;
height: 200px;
background: #ff0;
}
『transition-delay』で指定した値の方が多い場合は指定されているプロパティ数以上の値は無視されます。
div {
background: #f00;
width: 200px;
height: 100px;
transition: width 1s, height 1s;
-webkit-transition: width 1s, height 1s;
-moz-transition: width 1s, height 1s;
-ms-transition: width 1s, height 1s;
transition-delay: 1s, 2s, 4s;
-webkit-transition-delay: 1s, 2s, 4s;
-moz-transition-delay: 1s, 2s, 4s;
-ms-transition-delay: 1s, 2s, 4s;
}
div:hover {
width: 300px;
height: 200px;
}
よくあるミス
transition-durationとtransition-delayの値を混同してしまう
『transition』の一括指定では値の順序が重要です。時間の値が2つある場合、1つ目が『transition-duration』(アニメーション時間)、2つ目が『transition-delay』(遅延時間)と解釈されます。逆に指定してしまうと意図しない動作になります。
『transition』の一括指定では、時間の値が2つある場合、1つ目が継続時間、2つ目が遅延時間として解釈されます(例: transition: プロパティ 継続時間 遅延時間 イージング;)。
NG
/* 意図とは逆で、遅延1秒・継続0.5秒になってしまう例として誤解しやすい書き方 */
/* 「0.5sで動いてほしい、でも1s後に」という意図がある場合、順序を確認する */
.btn { transition: background-color 1s 0.5s; }
OK
/* 0.3秒で変化し、0.5秒後に開始する */
.btn { transition: background-color 0.3s 0.5s; }
負の遅延値の挙動を理解していない
『transition-delay』に負の値を指定すると、アニメーションが途中から始まります。例えば『-0.5s』を指定すると、1秒のアニメーションが0.5秒経過した状態から開始します。
/* 1秒のアニメーションを0.5秒分スキップして開始する */
.box {
transition: transform 1s;
transition-delay: -0.5s;
}
対応ブラウザ
25 △
24 △
23 △
22 △
21 △
20 △
19 △
18 △
15 △
14 △
13 △
12 △
11 △
10 △
9 △
8 △
3 以前 ×
7 △
6 △
5 △
4 △
3 以前 ×
8 ×
7 ×
6 ×
10 以前 ×
7 △
6 △
5 △
4 △
3 △
2 △
1 以前 ×
Android Browser
4.4 以降 ○
2 △記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。