Transitions

Loading concept...

Alpine.js Transitions: Making Things Appear and Disappear Like Magic ✨


The Story of the Magical Curtain 🎭

Imagine you’re at a puppet show. When the show starts, the curtain doesn’t just vanish—it glides open smoothly. When it ends, it slides closed gracefully. That smooth movement is what makes the show feel magical!

In Alpine.js, transitions are like that magical curtain. They help elements appear and disappear smoothly instead of just popping in and out.


What You’ll Learn

graph TD A[x-transition Basics] --> B[Transition Timing] B --> C[Transition Effects] C --> D[CSS Transition Classes]

1. x-transition Basics: Your First Magic Spell 🪄

What is x-transition?

Think of x-transition as a magic word you add to any element. When you say this magic word, Alpine knows: “Hey, make this appear and disappear smoothly!”

The Simplest Example

<div x-data="{ show: false }">
  <button @click="show = !show">
    Toggle Box
  </button>

  <div x-show="show" x-transition>
    I fade in and out!
  </div>
</div>

What happens:

  • Click the button → Box fades in smoothly
  • Click again → Box fades out smoothly

Why This Works

Without x-transition:

  • Element appears → POOF! (instant)
  • Element disappears → POOF! (instant)

With x-transition:

  • Element appears → Faaaade in… (smooth)
  • Element disappears → Faaaade out… (smooth)

It’s like the difference between a light switch and a dimmer!


2. Transition Timing: How Fast Should the Magic Happen? ⏱️

The Speed of Magic

You can control how fast transitions happen using duration and delay.

Duration: How Long the Magic Takes

<div
  x-show="show"
  x-transition.duration.500ms>
  I take half a second!
</div>

Common durations:

Value Feeling
100ms Super quick (zippy!)
300ms Normal (just right)
500ms Slow (dramatic)
1000ms Very slow (cinematic)

Different Speeds for In and Out

<div
  x-show="show"
  x-transition:enter.duration.300ms
  x-transition:leave.duration.500ms>
  Fast in, slow out!
</div>

Think of it like this:

  • Enter = When the element arrives (like a guest walking in)
  • Leave = When the element goes away (like saying goodbye)

Adding Delay: Wait Before the Magic

<div
  x-show="show"
  x-transition.delay.200ms>
  I wait, then appear!
</div>

3. Transition Effects: Types of Magic ✨

Alpine.js gives you different “flavors” of magic. Let’s explore them!

Opacity (Fade)

The default! Elements become see-through, then solid.

<div x-show="show" x-transition.opacity>
  I fade in and out
</div>

Scale (Grow/Shrink)

Elements grow from tiny to full size (or shrink away).

<div x-show="show" x-transition.scale>
  I grow and shrink!
</div>

Customize the starting size:

<div
  x-show="show"
  x-transition.scale.75>
  I start at 75% size
</div>

Combining Effects

Mix and match for cooler transitions!

<div
  x-show="show"
  x-transition.opacity
  x-transition.scale.90>
  I fade AND scale!
</div>

Visual Guide to Effects

graph TD A[Element Hidden] --> B{Which Effect?} B --> C[Opacity: Invisible → Visible] B --> D[Scale: Tiny → Full Size] B --> E[Both: Tiny+Invisible → Full+Visible]

4. CSS Transition Classes: Full Control Mode 🎮

Sometimes you want complete control over your transitions. That’s where CSS classes come in!

The Six Magic Classes

When an element enters (appears):

Class When It’s Applied
enter During entire enter phase
enter-start Starting state
enter-end Ending state

When an element leaves (disappears):

Class When It’s Applied
leave During entire leave phase
leave-start Starting state
leave-end Ending state

How They Work Together

graph LR A[Hidden] --> B[enter-start] B --> C[enter + enter-end] C --> D[Visible] D --> E[leave-start] E --> F[leave + leave-end] F --> A

A Real Example: Slide Down

<style>
  .slide-enter {
    transition: all 0.3s ease-out;
  }
  .slide-enter-start {
    transform: translateY(-20px);
    opacity: 0;
  }
  .slide-enter-end {
    transform: translateY(0);
    opacity: 1;
  }
  .slide-leave {
    transition: all 0.3s ease-in;
  }
  .slide-leave-start {
    transform: translateY(0);
    opacity: 1;
  }
  .slide-leave-end {
    transform: translateY(-20px);
    opacity: 0;
  }
</style>

<div
  x-show="show"
  x-transition:enter="slide-enter"
  x-transition:enter-start="slide-enter-start"
  x-transition:enter-end="slide-enter-end"
  x-transition:leave="slide-leave"
  x-transition:leave-start="slide-leave-start"
  x-transition:leave-end="slide-leave-end">
  I slide down when appearing!
</div>

Named Transitions (Cleaner Code)

You can use prefixes to keep things tidy:

<div
  x-show="show"
  x-transition:enter="fade-enter"
  x-transition:enter-start="fade-enter-start"
  x-transition:enter-end="fade-enter-end"
  x-transition:leave="fade-leave"
  x-transition:leave-start="fade-leave-start"
  x-transition:leave-end="fade-leave-end">
  Custom CSS transition!
</div>

Quick Summary: The Transition Toolbox 🧰

What You Want What To Use
Simple fade x-transition
Faster/slower x-transition.duration.300ms
Scale effect x-transition.scale
Wait before x-transition.delay.100ms
Full control CSS classes with x-transition:enter etc.

The Big Picture 🖼️

graph TD A[x-transition] --> B[Modifiers] A --> C[CSS Classes] B --> D[.duration.Xms] B --> E[.delay.Xms] B --> F[.opacity] B --> G[.scale.X] C --> H[:enter] C --> I[:enter-start] C --> J[:enter-end] C --> K[:leave] C --> L[:leave-start] C --> M[:leave-end]

Remember This! 💡

  1. x-transition alone = Simple, beautiful fade (default)
  2. Add modifiers = Customize timing and effects
  3. Use CSS classes = Complete creative control
  4. Enter vs Leave = Appearing vs Disappearing
  5. Duration = How long the magic takes
  6. Delay = Wait before starting

You Did It! 🎉

Now you know how to make elements appear and disappear like magic. No more harsh, sudden changes—everything can flow smoothly like that puppet show curtain.

Go make your web pages feel alive!

Loading story...

No Story Available

This concept doesn't have a story yet.

Story Preview

Story - Premium Content

Please sign in to view this concept and start learning.

Upgrade to Premium to unlock full access to all content.

Interactive Preview

Interactive - Premium Content

Please sign in to view this concept and start learning.

Upgrade to Premium to unlock full access to all content.

No Interactive Content

This concept doesn't have interactive content yet.

Cheatsheet Preview

Cheatsheet - Premium Content

Please sign in to view this concept and start learning.

Upgrade to Premium to unlock full access to all content.

No Cheatsheet Available

This concept doesn't have a cheatsheet yet.

Quiz Preview

Quiz - Premium Content

Please sign in to view this concept and start learning.

Upgrade to Premium to unlock full access to all content.

No Quiz Available

This concept doesn't have a quiz yet.