Animation Styles

Learn how to use animation styles to define reusable motion properties.

Overview

Animation styles allow you to define reusable animation properties. The goal is to reduce the amount of code needed to animate components.

The supported animation styles are:

  • Animation: animation composition, delay, direction, duration, fill mode, iteration count, name, play state, timing function

  • Animation range: animation range, start, end, timeline

  • Transform origin: transform origin

Defining animation styles

Animation styles are defined using the defineAnimationStyles function.

Here's an example of an animation style:

animation-styles.ts
import { defineAnimationStyles } from "@pandacss/dev"
const animationStyles = defineAnimationStyles({
bounceFadeIn: {
value: {
animationName: "bounce, fade-in",
animationDuration: "1s",
animationTimingFunction: "ease-in-out",
animationIterationCount: "infinite",
},
},
})

Built-in animation styles

Cerberus provides a set of built-in animation styles that you can use.

emphasized-fade-in

Update the theme

To use the animation styles, update the theme object with the animationStyles property.

panda.config.ts
import {
createCerberusConfig,
createCerberusPreset,
} from '@cerberus/panda-preset'
import { animationStyles } from "./animation-styles"
export default createCerberusConfig({
presets: [createCerberusPreset()],
include: ['./app/**/*.{ts,tsx}'],
exclude: [],
theme: {
extend: {
animationStyles,
},
}
})

Using animation styles

Now you can use animationStyle property in your components.

<Box
data-state="open"
animationDuration="slow"
animationStyle={{ _open: "slide-fade-in", _closed: "slide-fade-out" }}
>
This content will fade in
</Box>

JSX Patterns

To make using animations even easier, Cerberus provides JSX patterns for all built-in animation styles. You can use these patterns to quickly apply animations to your components.

import { Box, EmphasizedFadeIn } from "styled-system/jsx"
<EmphasizedFadeIn duration="slow" asChild>
<Box>This content will fade in with emphasis</Box>
</EmphasizedFadeIn>