Using in: and out: Directives

+15 Mana ✨

Sometimes you want different animations for entering and leaving. Use in: and out: instead of transition:.

Basic Usage

svelte
<script>
  import { fly, fade, scale } from 'svelte/transition';
  
  let visible = $state(true);
</script>

{#if visible}
  <div
    in:fly={{ y: 200, duration: 500 }}
    out:fade={{ duration: 200 }}
  >
    Flies in dramatically, fades out quickly
  </div>
{/if}

Why Separate?

| Scenario | In | Out | |----------|----|----|| | Toast notification | Slide from top | Fade | | Modal | Scale up | Fade fast | | Sidebar | Slide | Slide (same) | | Deleted item | - | Shrink + fade |

transition: vs in:/out:

transition:fn is shorthand for in:fn out:fn:

svelte
<!-- These are equivalent -->
<div transition:fade>
<div in:fade out:fade>

Different Configurations

You can use the same transition with different parameters:

svelte
<div
  in:fly={{ y: 100, duration: 600, easing: elasticOut }}
  out:fly={{ y: -50, duration: 200, easing: cubicIn }}
>
  Bouncy entrance, quick exit upward
</div>

Intro Only or Outro Only

You can have animation in only one direction:

svelte
<!-- Only animates when appearing -->
<div in:fade>
  Fades in, instant disappear
</div>

<!-- Only animates when leaving -->
<div out:fly={{ y: 100 }}>
  Instant appear, flies out
</div>

šŸ“– Transitions documentation

āœ“ Completed