| この記事の要点 |
|
animation-delay プロパティとは
animation-delay は CSS アニメーションがいつ開始されるかを制御するプロパティです。要素にアニメーションを適用してから、実際にキーフレームが動き始めるまでの待ち時間を秒またはミリ秒で指定します。
基本構文
セレクタ {
animation-delay: 時間;
}
/* 例 */
.fadein { animation-delay: 0.5s; }
.late-start { animation-delay: 1500ms; }
指定できる値
| 値 | 意味 | 例 |
|---|---|---|
| 正の時間 | その時間だけ開始を遅らせる | 2s / 500ms |
0 / 0s | 遅延なし(既定値) | 0s |
| 負の時間 | 途中から開始(既に経過したものとみなす) | -1s |
負の値で「途中から始める」テクニック
負の animation-delay は CSS アニメーションの中でも特に重要なテクニックです。アニメーションが既に N 秒間進行した状態として開始されるため、複数要素を時間差で動かしつつ既に動き始めた状態に見せられます。
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.dot1 { animation: spin 2s linear infinite; animation-delay: 0s; }
.dot2 { animation: spin 2s linear infinite; animation-delay: -0.5s; }
.dot3 { animation: spin 2s linear infinite; animation-delay: -1s; }
.dot4 { animation: spin 2s linear infinite; animation-delay: -1.5s; }
負の delay はローディングインジケータの位相差やパーティクル風の表現でよく使われるテクニックです。
複数アニメーションへの適用
カンマ区切りで複数のアニメーションを並べた場合、animation-delay も同じ順序でカンマ区切りで指定します。
.elem {
animation-name: fade, slide;
animation-duration: 1s, 2s;
animation-delay: 0s, 0.5s;
}
delay の個数が name より少ない場合は、足りない分は最初から繰り返されます(0s, 0.5s しか書かなくても name が 4 つあれば 0s, 0.5s, 0s, 0.5s として処理)。
animation 一括指定での書き方
ショートハンドの animation プロパティでは、duration の後ろに登場する時間値が delay として扱われます。
.elem {
animation: fade 1s ease 0.5s 3 normal;
/* name dur ease delay count direction */
}
順序が重要なので、慣れないうちは個別プロパティで書く方が間違いがありません。
delay と iteration-delay の違い
animation-delay は最初の 1 回目の前の待ち時間だけに効きます。繰り返し再生のたびに毎回挟みたい場合は、キーフレーム内で「最後の数 % を停止状態」にする小細工が必要です。
@keyframes blink {
0%, 50% { opacity: 1; } /* 前半: 表示 */
60%, 100% { opacity: 0; } /* 後半: 非表示 = 視覚的に休憩 */
}
.elem { animation: blink 2s infinite; }
transition-delay との違い
| 項目 | animation-delay | transition-delay |
|---|---|---|
| 対象 | @keyframes による定期アニメーション | プロパティ変化(hover など) |
| 負の値 | 途中から開始 | 無視される(即時開始) |
| トリガ | 要素マウント時 or クラス追加時 | プロパティ変化時 |
JavaScript からの取得 / 設定
const el = document.querySelector('.elem');
// 取得
const delay = getComputedStyle(el).animationDelay; // '0.5s'
// 設定
el.style.animationDelay = '1.5s';
子要素を順番に登場させる UI
リストや fadeIn のスタッガード(順次表示)表現は :nth-child と animation-delay の組み合わせが定番です。
@keyframes fadein {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
.list li {
opacity: 0;
animation: fadein 0.4s ease forwards;
}
.list li:nth-child(1) { animation-delay: 0.1s; }
.list li:nth-child(2) { animation-delay: 0.2s; }
.list li:nth-child(3) { animation-delay: 0.3s; }
.list li:nth-child(4) { animation-delay: 0.4s; }
項目数が多い場合は CSS カスタムプロパティと組み合わせて、HTML 側で style="--i:3" のように渡すと簡潔に書けます。
.list li { animation-delay: calc(var(--i) * 0.1s); }
animation-fill-mode との合わせ技
delay 中の要素はキーフレーム適用前の状態で表示されます。「最初は完全に消しておきたい」場合は animation-fill-mode: backwards または both を指定します。
.elem {
opacity: 1;
animation: fadein 1s ease 1s backwards;
/* delay 中も from の状態 (opacity: 0) を保つ */
}
delay と prefers-reduced-motion
長い delay やループアニメは、動きに敏感なユーザにとって不快な場合があります。OS の「視差効果を減らす」設定を尊重するメディアクエリで丸ごと止めるのが現代的な作法です。
@media (prefers-reduced-motion: reduce) {
.elem {
animation: none;
}
}
関連
- アニメーション — 親カテゴリ
- CSS — CSS トップ
- animation-name — 適用する @keyframes 名
- animation-duration — 1 サイクルの長さ
- animation-iteration-count — 繰り返し回数
- animation-fill-mode — 開始前 / 終了後の状態保持
- transition-delay — transition 版の開始遅延
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38