React Container Text Flip
Animated text container with word cycling and dynamic width. Perfect for React applications requiring smooth text transitions with TypeScript support.
Powered by
Trying to implement text animations?
Join our Discord community for help from other developers.
Most text cycling components have jarring width changes that make your layout jump around. Users see the container constantly resizing as words change, creating a distracting, unprofessional experience. This component smoothly animates between words with intelligent width transitions and letter-by-letter reveals, maintaining visual stability while creating engaging text effects.
Smooth word cycling with dynamic container sizing
Text that transitions between words with fluid width animations and letter reveals:
Built with TypeScript and Motion for React applications, featuring layout animations and intelligent width calculations. Each word change triggers a smooth container resize followed by letter-by-letter blur-to-focus reveals, creating professional text transitions.
Installation
npx shadcn@latest add https://www.shadcn.io/registry/container-text-flip.json
npx shadcn@latest add https://www.shadcn.io/registry/container-text-flip.json
pnpm dlx shadcn@latest add https://www.shadcn.io/registry/container-text-flip.json
bunx shadcn@latest add https://www.shadcn.io/registry/container-text-flip.json
Usage
import { ContainerTextFlip } from "@/components/text/container-text-flip";
<ContainerTextFlip
words={["better", "modern", "awesome", "beautiful"]}
interval={3000}
animationDuration={700}
className="text-6xl"
/>;
Why most text cycling components suck
Most developers just swap words instantly or use basic CSS transitions that ignore container width. The result is jarring layout shifts where content jumps around as words change length. Short words like "is" suddenly become "extraordinary", causing the entire layout to reflow awkwardly.
This React component uses Motion's layout animations to smoothly transition container width based on the incoming word. It measures each word's width dynamically, then animates the container to the new dimensions before revealing letters with staggered blur effects. The container styling includes subtle gradients and shadows that maintain visual consistency during transitions.
The key insight: width transitions should happen before content changes, not during. Users see a smooth resize followed by the new word appearing letter by letter, creating a polished, intentional feel instead of chaotic layout shifts.
Features
- Dynamic width animations that resize smoothly before word transitions in React applications
- Letter-by-letter reveals with blur-to-focus effects using Motion's stagger animations
- Configurable timing for interval cycling and animation duration control
- Built-in container styling with gradients, shadows, and dark mode support
- Complete TypeScript support with full interface definitions and prop validation
- Layout stability with proper width calculations and padding management
- Free open source component compatible with Next.js and shadcn/ui design systems
API Reference
ContainerTextFlip
Animated text container with smooth word cycling and dynamic width transitions.
Prop | Type | Default | Description |
---|---|---|---|
words | string[] | ["better", "modern", "beautiful", "awesome"] | Array of words to cycle through |
interval | number | 3000 | Time between word changes (ms) |
animationDuration | number | 700 | Duration of transition animations (ms) |
className | string | - | Additional CSS classes for container |
textClassName | string | - | Additional CSS classes for text content |
Optimal Animation Timing
Balance smooth transitions with user engagement:
Animation Duration | Feel | Best For |
---|---|---|
400-500ms | Snappy | Quick, energetic cycling |
600-700ms | Smooth | Balanced, professional |
800-1000ms | Deliberate | Slow, thoughtful reveals |
1200ms+ | Dramatic | Emphasis on each word |
Container Styling
Built-in styles with theme support:
Feature | Light Mode | Dark Mode |
---|---|---|
Background | Gray gradient | Dark gray gradient |
Border | Light gray inset shadow | Dark inset with blue accent |
Text | Black | White |
Shadow | Subtle gray drop shadow | Dark shadow with transparency |
Common gotchas
Container width jumps unexpectedly: Default padding adds 30px (15px each side) for visual breathing room in React applications. Very short words might cause width fluctuations. Adjust padding or use min-width CSS for consistency in TypeScript projects.
Letters appear too slowly: Default 0.02s delay between letters works for most words in JavaScript applications. For longer words (10+ characters), reduce to 0.01s for faster reveals. For dramatic effect, increase to 0.05s in Next.js projects.
Animation feels sluggish: Default 700ms duration balances smoothness with responsiveness in React applications. For snappier transitions, reduce to 400-500ms. For more deliberate reveals, increase to 900-1000ms in TypeScript projects.
Layout shifts still occur: The component measures width after DOM updates in JavaScript applications. Ensure parent containers have sufficient space or use CSS min-width to prevent external layout shifts in React projects.
Dark mode styling issues: Built-in dark mode uses CSS custom properties and Tailwind classes in TypeScript applications. Verify your theme configuration supports the dark: prefix for proper styling in Next.js projects.
Integration with other components
Perfect for hero sections in Card layouts or dynamic headlines in Badge components within React applications. Works excellently with Button components for action-oriented cycling text in Next.js projects.
For marketing interfaces, combine with Progress indicators or Tabs for section-based content cycling. This TypeScript component pairs well with Avatar for role-based text changes and Dialog for dynamic modal titles, all with seamless shadcn/ui integration.
Questions developers actually ask
React Colourful Text
Dynamic color-cycling text with character animations. Perfect for React applications requiring vibrant text effects with TypeScript support.
React Counting Number
React counting number component with spring animations. TypeScript counters with in-view detection and decimal support for Next.js apps using shadcn/ui.