Skip to content

Transitions & Animation

sz propTailwind class
{ transition: true }transition
{ transition: 'all' }transition-all
{ transition: 'colors' }transition-colors
{ transition: 'opacity' }transition-opacity
{ transition: 'shadow' }transition-shadow
{ transition: 'transform' }transition-transform
{ transition: 'none' }transition-none
{ transition: 'colors', duration: 200 } — hover to see color change
ease-out vs spring vs backout — click Trigger to compare
EASE-OUT
SPRING BOUNCE
BACKINOUT BOUNCE
sz propTailwind class
{ duration: 75 }duration-75
{ duration: 100 }duration-100
{ duration: 150 }duration-150
{ duration: 200 }duration-200
{ duration: 300 }duration-300
{ duration: 500 }duration-500
{ duration: 700 }duration-700
{ duration: 1000 }duration-1000
{ duration: '2000ms' }duration-[2000ms]
sz propTailwind class
{ ease: 'linear' }ease-linear
{ ease: 'in' }ease-in
{ ease: 'out' }ease-out
{ ease: 'in-out' }ease-in-out
{ ease: 'initial' }ease-initial
sz propTailwind class
{ delay: 75 }delay-75
{ delay: 100 }delay-100
{ delay: 300 }delay-300
{ delay: 500 }delay-500
{ delay: 1000 }delay-1000
sz propTailwind class
{ animate: 'none' }animate-none
{ animate: 'spin' }animate-spin
{ animate: 'ping' }animate-ping
{ animate: 'pulse' }animate-pulse
{ animate: 'bounce' }animate-bounce
{ motionReduce: { animate: 'none' } }motion-reduce:animate-none
{ animate: 'spin' } — continuous rotation
{ animate: 'pulse' } — staggered delay: 0, 150, 300ms
{ animate: 'bounce' } — staggered loading indicator

Tailwind v4 has no animation-delay-* utility. CSSzyx emits an arbitrary CSS property.

sz propTailwind class
{ animationDelay: 150 }[animation-delay:150ms]
{ animationDelay: 0 }[animation-delay:0ms]
{ animationDelay: 300 }[animation-delay:300ms]
{ animationDelay: '0.5s' }[animation-delay:0.5s]
// Smooth color transition on hover
<button sz={{
bg: 'blue-500',
transition: 'colors',
duration: 200,
ease: 'in-out',
hover: { bg: 'blue-600' },
}} />
// Loading spinner
<div sz={{ animate: 'spin', size: 6 }}>
{/* spinner icon */}
</div>
// Staggered pulse dots — animationDelay, not delay
<div sz={{ animate: 'pulse', animationDelay: 0 }} />
<div sz={{ animate: 'pulse', animationDelay: 150 }} />
<div sz={{ animate: 'pulse', animationDelay: 300 }} />
// delay is transition-delay — only for CSS transitions
<div sz={{ transition: 'colors', delay: 100 }} />
// Respect reduced motion
<div sz={{
animate: 'bounce',
motionReduce: { animate: 'none' },
}} />