skills/yoanbernabeu/slidev-skills/slidev-transitions

slidev-transitions

SKILL.md

Slide Transitions in Slidev

This skill covers adding smooth transitions between slides in Slidev, including built-in transitions, custom animations, and directional transitions.

When to Use This Skill

  • Adding polish to presentations
  • Creating smooth navigation experiences
  • Emphasizing slide changes
  • Matching presentation themes
  • Creating unique visual effects

Setting Transitions

Global Transition (Frontmatter)

---
transition: slide-left
---

Applied to all slides in the presentation.

Per-Slide Transition

---
transition: fade
---

# This slide fades in

---
transition: slide-up
---

# This slide slides up

Inline with Separator

# Slide 1

---
transition: zoom
---

# Slide 2 (zooms in)

Built-in Transitions

Fade Transitions

Name Effect
fade Simple fade in/out
fade-out Fade out, then appear
---
transition: fade
---

Slide Transitions

Name Effect
slide-left New slide enters from right
slide-right New slide enters from left
slide-up New slide enters from bottom
slide-down New slide enters from top
---
transition: slide-left
---

View Transition

Uses the modern View Transitions API:

---
transition: view-transition
---

Note: Requires browser support for View Transitions API.

Directional Transitions

Forward/Backward Different

Use | to separate forward and backward transitions:

---
transition: slide-left | slide-right
---
  • Going forward: slides left
  • Going backward: slides right

Common Patterns

# Natural slide direction
---
transition: slide-left | slide-right
---

# Vertical navigation
---
transition: slide-up | slide-down
---

# Fade forward, slide back
---
transition: fade | slide-right
---

Custom Transitions

CSS-based Custom Transition

Create styles/index.css:

/* Define custom transition */
.my-transition-enter-active,
.my-transition-leave-active {
  transition: all 0.5s ease;
}

.my-transition-enter-from {
  opacity: 0;
  transform: translateX(100px) rotate(10deg);
}

.my-transition-leave-to {
  opacity: 0;
  transform: translateX(-100px) rotate(-10deg);
}

Use in frontmatter:

---
transition: my-transition
---

Transition Classes

Slidev uses Vue transition classes:

Class When Applied
[name]-enter-from Starting state for enter
[name]-enter-active During enter transition
[name]-enter-to Ending state for enter
[name]-leave-from Starting state for leave
[name]-leave-active During leave transition
[name]-leave-to Ending state for leave

Transition Examples

Scale Transition

.scale-enter-active,
.scale-leave-active {
  transition: all 0.4s ease;
}

.scale-enter-from {
  opacity: 0;
  transform: scale(0.8);
}

.scale-leave-to {
  opacity: 0;
  transform: scale(1.2);
}

Flip Transition

.flip-enter-active,
.flip-leave-active {
  transition: all 0.6s ease;
  transform-style: preserve-3d;
}

.flip-enter-from {
  opacity: 0;
  transform: rotateY(-90deg);
}

.flip-leave-to {
  opacity: 0;
  transform: rotateY(90deg);
}

Blur Transition

.blur-enter-active,
.blur-leave-active {
  transition: all 0.5s ease;
}

.blur-enter-from {
  opacity: 0;
  filter: blur(20px);
}

.blur-leave-to {
  opacity: 0;
  filter: blur(20px);
}

Bounce Transition

.bounce-enter-active {
  animation: bounce-in 0.5s;
}

.bounce-leave-active {
  animation: bounce-out 0.5s;
}

@keyframes bounce-in {
  0% {
    opacity: 0;
    transform: scale(0.3);
  }
  50% {
    transform: scale(1.1);
  }
  100% {
    opacity: 1;
    transform: scale(1);
  }
}

@keyframes bounce-out {
  0% {
    opacity: 1;
    transform: scale(1);
  }
  100% {
    opacity: 0;
    transform: scale(0.3);
  }
}

Swipe Transition

.swipe-enter-active,
.swipe-leave-active {
  transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

.swipe-enter-from {
  opacity: 0;
  transform: translateX(100%);
}

.swipe-leave-to {
  opacity: 0;
  transform: translateX(-100%);
}

View Transitions API

Basic Usage

---
transition: view-transition
---

Named View Transitions

<div style="view-transition-name: hero">
  Content that transitions smoothly
</div>

Elements with the same view-transition-name on consecutive slides will animate between their positions.

Practical Example

---
transition: view-transition
---

<div style="view-transition-name: card" class="w-32 h-32 bg-blue-500">
  Small card
</div>

---
transition: view-transition
---

<div style="view-transition-name: card" class="w-64 h-64 bg-blue-500">
  Card grows!
</div>

Transition Timing

Duration

.slow-fade-enter-active,
.slow-fade-leave-active {
  transition: all 1s ease; /* 1 second */
}

Easing Functions

/* Common easing functions */
.ease-in { transition-timing-function: ease-in; }
.ease-out { transition-timing-function: ease-out; }
.ease-in-out { transition-timing-function: ease-in-out; }
.linear { transition-timing-function: linear; }

/* Cubic bezier for custom easing */
.custom { transition-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55); }

Delay

.delayed-enter-active {
  transition: all 0.5s ease 0.2s; /* 0.2s delay */
}

Transition Per Slide Type

Different Transitions for Different Content

---
layout: cover
transition: fade
---

# Title Slide

---
layout: default
transition: slide-left
---

# Content Slide

---
layout: section
transition: zoom
---

# Section Break

---
layout: end
transition: fade
---

# Thank You

Disabling Transitions

No Transition

---
transition: none
---

Disable Globally

---
transition: false
---

Best Practices

1. Consistency

Use the same transition family throughout:

# Good: Consistent slide family
---
transition: slide-left | slide-right
---

2. Match Content Type

Content Suggested Transition
Cover/Title fade
Regular content slide-left
Section break fade or zoom
Demo/Code fade
Conclusion fade

3. Keep It Subtle

āŒ Too flashy

.crazy-enter-active {
  animation: spin 2s, bounce 1s, flash 0.5s;
}

āœ“ Professional

.subtle-enter-active {
  transition: opacity 0.3s ease;
}

4. Consider Audience

  • Technical presentations: Minimal transitions
  • Creative presentations: More freedom
  • Long presentations: Less distracting

5. Test Performance

Complex transitions may lag on:

  • Large presentations
  • Older devices
  • When exporting to PDF

Transition Presets

Professional Set

/* styles/transitions.css */

/* Gentle fade */
.pro-fade-enter-active,
.pro-fade-leave-active {
  transition: opacity 0.3s ease;
}
.pro-fade-enter-from,
.pro-fade-leave-to {
  opacity: 0;
}

/* Smooth slide */
.pro-slide-enter-active,
.pro-slide-leave-active {
  transition: all 0.35s ease-out;
}
.pro-slide-enter-from {
  opacity: 0;
  transform: translateX(30px);
}
.pro-slide-leave-to {
  opacity: 0;
  transform: translateX(-30px);
}

Playful Set

/* Energetic bounce */
.playful-enter-active {
  animation: pop-in 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);
}

@keyframes pop-in {
  0% { transform: scale(0); opacity: 0; }
  80% { transform: scale(1.1); }
  100% { transform: scale(1); opacity: 1; }
}

Output Format

When configuring transitions:

---
# GLOBAL TRANSITION (first slide)
transition: [transition-name] | [backward-transition]
---

# Slide content...

---
# PER-SLIDE OVERRIDE (if needed)
transition: [different-transition]
---

# Different slide content...

TRANSITION PLAN:

  1. Cover slide: [transition]
  2. Content slides: [transition]
  3. Section breaks: [transition]
  4. Conclusion: [transition]

CUSTOM CSS (if needed):

.[name]-enter-active { ... }
.[name]-leave-to { ... }
Weekly Installs
1
Installed on
claude-code1