Transitions
Create smooth transitions between sequence items using overlap and CSS animations.
Overlap Attribute
Use overlap on sequence timegroups to make items overlap in time:
<ef-timegroup mode="sequence" overlap="1s"><ef-timegroup mode="contain"><!-- Scene 1 --></ef-timegroup><ef-timegroup mode="contain"><!-- Scene 2 --></ef-timegroup></ef-timegroup>
This creates a 1-second overlap where both scenes are visible simultaneously.
CSS Variables for Transitions
Use these variables to time animations:
--ef-duration- Element's total duration (e.g.,"10s")--ef-transition-duration- Overlap duration for transitions--ef-transition-out-start- When fade-out should start (near end)
Crossfade Transition
Fade out first clip while fading in second clip:
<style>@keyframes fade-in {from { opacity: 0; }to { opacity: 1; }}@keyframes fade-out {from { opacity: 1; }to { opacity: 0; }}</style><ef-timegroup mode="sequence" overlap="1s"><ef-timegroup mode="contain"><ef-videosrc="clip1.mp4"class="size-full"style="animation: 1s fade-out var(--ef-transition-out-start)"></ef-video></ef-timegroup><ef-timegroup mode="contain"><ef-videosrc="clip2.mp4"class="size-full"style="animation: 1s fade-in 0s"></ef-video></ef-timegroup></ef-timegroup>
How it works:
overlap="1s"makes clips overlap by 1 second- First clip fades out during last 1 second (
--ef-transition-out-start) - Second clip fades in during first 1 second (
0sdelay) - Result: Smooth crossfade
Slide Transition
Slide second clip in from the right:
<style>@keyframes slide-in-right {from { transform: translateX(100%); }to { transform: translateX(0); }}@keyframes slide-out-left {from { transform: translateX(0); }to { transform: translateX(-100%); }}</style><ef-timegroup mode="sequence" overlap="0.5s"><ef-timegroup mode="contain" class="absolute w-full h-full"><ef-videosrc="clip1.mp4"class="size-full"style="animation: 0.5s slide-out-left var(--ef-transition-out-start)"></ef-video></ef-timegroup><ef-timegroup mode="contain" class="absolute w-full h-full"><ef-videosrc="clip2.mp4"class="size-full"style="animation: 0.5s slide-in-right 0s"></ef-video></ef-timegroup></ef-timegroup>
Zoom Transition
Zoom out first clip while zooming in second:
<style>@keyframes zoom-in {from { transform: scale(0.5); opacity: 0; }to { transform: scale(1); opacity: 1; }}@keyframes zoom-out {from { transform: scale(1); opacity: 1; }to { transform: scale(1.5); opacity: 0; }}</style><ef-timegroup mode="sequence" overlap="0.8s"><ef-timegroup mode="contain" class="absolute w-full h-full"><ef-videosrc="clip1.mp4"class="size-full object-cover"style="animation: 0.8s zoom-out var(--ef-transition-out-start)"></ef-video></ef-timegroup><ef-timegroup mode="contain" class="absolute w-full h-full"><ef-videosrc="clip2.mp4"class="size-full object-cover"style="animation: 0.8s zoom-in 0s"></ef-video></ef-timegroup></ef-timegroup>
Dissolve Transition
Gradual opacity transition with blur:
<style>@keyframes dissolve-in {from { opacity: 0; filter: blur(10px); }to { opacity: 1; filter: blur(0); }}@keyframes dissolve-out {from { opacity: 1; filter: blur(0); }to { opacity: 0; filter: blur(10px); }}</style><ef-timegroup mode="sequence" overlap="1.5s"><ef-timegroup mode="contain"><ef-videosrc="clip1.mp4"class="size-full"style="animation: 1.5s dissolve-out var(--ef-transition-out-start)"></ef-video></ef-timegroup><ef-timegroup mode="contain"><ef-videosrc="clip2.mp4"class="size-full"style="animation: 1.5s dissolve-in 0s"></ef-video></ef-timegroup></ef-timegroup>
Multiple Clips with Transitions
Chain multiple clips with consistent transitions:
<ef-timegroup mode="sequence" overlap="1s"><ef-timegroup mode="contain"><ef-videosrc="clip1.mp4"class="size-full"style="animation: 1s fade-out var(--ef-transition-out-start)"></ef-video></ef-timegroup><ef-timegroup mode="contain"><ef-videosrc="clip2.mp4"class="size-full"style="animation: 1s fade-in 0s, 1s fade-out var(--ef-transition-out-start)"></ef-video></ef-timegroup><ef-timegroup mode="contain"><ef-videosrc="clip3.mp4"class="size-full"style="animation: 1s fade-in 0s, 1s fade-out var(--ef-transition-out-start)"></ef-video></ef-timegroup><ef-timegroup mode="contain"><ef-videosrc="clip4.mp4"class="size-full"style="animation: 1s fade-in 0s"></ef-video></ef-timegroup></ef-timegroup>
Pattern:
- First clip: fade-out only
- Middle clips: fade-in and fade-out
- Last clip: fade-in only
Transition Timing
Match overlap duration to animation duration:
<!-- overlap="1s" matches animation duration of 1s --><ef-timegroup mode="sequence" overlap="1s"><ef-timegroup mode="contain"><ef-video style="animation: 1s fade-out var(--ef-transition-out-start)"></ef-video></ef-timegroup><ef-timegroup mode="contain"><ef-video style="animation: 1s fade-in 0s"></ef-video></ef-timegroup></ef-timegroup>
Important: Animation duration should match overlap duration for smooth transitions.
No Overlap (Cut)
Omit overlap for instant cuts between clips:
<ef-timegroup mode="sequence"><ef-timegroup mode="contain"><ef-video src="clip1.mp4" class="size-full"></ef-video></ef-timegroup><ef-timegroup mode="contain"><ef-video src="clip2.mp4" class="size-full"></ef-video></ef-timegroup></ef-timegroup>
Tips
-
Match durations - Overlap and animation duration should be equal
-
Use contain mode - Wrap clips in
mode="contain"timegroups -
Absolute positioning - Add
class="absolute w-full h-full"for overlays -
Test transitions - Preview to ensure smooth timing
-
Combine effects - Mix opacity, transform, and filter for complex transitions
See Also
- css-variables.md - CSS variables reference
- timegroup.md - Timegroup modes and sequencing