Kombai Logo

Tailwind CSS Translate

The translate is used to reposition elements along the X and Y axes. This enables elements to move without affecting their surrounding context or layout, offering smooth animation effects and precise control.

Tailwind simplifies this process further with a comprehensive library of translate utilities. By leveraging these utilities, you can easily configure and customize transformations for elements in a responsive, maintainable, and scalable manner.

ClassPropertiesExample
translate-x-0transform: translateX(0px);<div className="translate-x-0"></div>
translate-y-0transform: translateY(0px);<div className="translate-y-0"></div>
translate-x-pxtransform: translateX(1px);<div className="translate-x-px"></div>
translate-y-pxtransform: translateY(1px);<div className="translate-y-px"></div>
translate-x-0.5transform: translateX(0.125rem);<div className="translate-x-0.5"></div>
translate-y-0.5transform: translateY(0.125rem);<div className="translate-y-0.5"></div>
translate-x-1transform: translateX(0.25rem);<div className="translate-x-1"></div>
translate-y-1transform: translateY(0.25rem);<div className="translate-y-1"></div>
translate-x-1.5transform: translateX(0.375rem);<div className="translate-x-1.5"></div>
translate-y-1.5transform: translateY(0.375rem);<div className="translate-y-1.5"></div>
translate-x-2transform: translateX(0.5rem);<div className="translate-x-2"></div>
translate-y-2transform: translateY(0.5rem);<div className="translate-y-2"></div>
translate-x-2.5transform: translateX(0.625rem);<div className="translate-x-2.5"></div>
translate-y-2.5transform: translateY(0.625rem);<div className="translate-y-2.5"></div>
translate-x-3transform: translateX(0.75rem);<div className="translate-x-3"></div>
translate-y-3transform: translateY(0.75rem);<div className="translate-y-3"></div>
translate-x-3.5transform: translateX(0.875rem);<div className="translate-x-3.5"></div>
translate-y-3.5transform: translateY(0.875rem);<div className="translate-y-3.5"></div>
translate-x-4transform: translateX(1rem);<div className="translate-x-4"></div>
translate-y-4transform: translateY(1rem);<div className="translate-y-4"></div>
translate-x-5transform: translateX(1.25rem);<div className="translate-x-5"></div>
translate-y-5transform: translateY(1.25rem);<div className="translate-y-5"></div>
translate-x-6transform: translateX(1.5rem);<div className="translate-x-6"></div>
translate-y-6transform: translateY(1.5rem);<div className="translate-y-6"></div>
translate-x-7transform: translateX(1.75rem);<div className="translate-x-7"></div>
translate-y-7transform: translateY(1.75rem);<div className="translate-y-7"></div>
translate-x-8transform: translateX(2rem);<div className="translate-x-8"></div>
translate-y-8transform: translateY(2rem);<div className="translate-y-8"></div>
translate-x-9transform: translateX(2.25rem);<div className="translate-x-9"></div>
translate-y-9transform: translateY(2.25rem);<div className="translate-y-9"></div>
translate-x-10transform: translateX(2.5rem);<div className="translate-x-10"></div>
translate-y-10transform: translateY(2.5rem);<div className="translate-y-10"></div>
translate-x-11transform: translateX(2.75rem);<div className="translate-x-11"></div>
translate-y-11transform: translateY(2.75rem);<div className="translate-y-11"></div>
translate-x-12transform: translateX(3rem);<div className="translate-x-12"></div>
translate-y-12transform: translateY(3rem);<div className="translate-y-12"></div>
translate-x-14transform: translateX(3.5rem);<div className="translate-x-14"></div>
translate-y-14transform: translateY(3.5rem);<div className="translate-y-14"></div>
translate-x-16transform: translateX(4rem);<div className="translate-x-16"></div>
translate-y-16transform: translateY(4rem);<div className="translate-y-16"></div>
translate-x-20transform: translateX(5rem);<div className="translate-x-20"></div>
translate-y-20transform: translateY(5rem);<div className="translate-y-20"></div>
translate-x-24transform: translateX(6rem);<div className="translate-x-24"></div>
translate-y-24transform: translateY(6rem);<div className="translate-y-24"></div>
translate-x-28transform: translateX(7rem);<div className="translate-x-28"></div>
translate-y-28transform: translateY(7rem);<div className="translate-y-28"></div>
translate-x-32transform: translateX(8rem);<div className="translate-x-32"></div>
translate-y-32transform: translateY(8rem);<div className="translate-y-32"></div>
translate-x-36transform: translateX(9rem);<div className="translate-x-36"></div>
translate-y-36transform: translateY(9rem);<div className="translate-y-36"></div>
translate-x-40transform: translateX(10rem);<div className="translate-x-40"></div>
translate-y-40transform: translateY(10rem);<div className="translate-y-40"></div>
translate-x-44transform: translateX(11rem);<div className="translate-x-44"></div>
translate-y-44transform: translateY(11rem);<div className="translate-y-44"></div>
translate-x-48transform: translateX(12rem);<div className="translate-x-48"></div>
translate-y-48transform: translateY(12rem);<div className="translate-y-48"></div>
translate-x-52transform: translateX(13rem);<div className="translate-x-52"></div>
translate-y-52transform: translateY(13rem);<div className="translate-y-52"></div>
translate-x-56transform: translateX(14rem);<div className="translate-x-56"></div>
translate-y-56transform: translateY(14rem);<div className="translate-y-56"></div>
translate-x-60transform: translateX(15rem);<div className="translate-x-60"></div>
translate-y-60transform: translateY(15rem);<div className="translate-y-60"></div>
translate-x-64transform: translateX(16rem);<div className="translate-x-64"></div>
translate-y-64transform: translateY(16rem);<div className="translate-y-64"></div>
translate-x-72transform: translateX(18rem);<div className="translate-x-72"></div>
translate-y-72transform: translateY(18rem);<div className="translate-y-72"></div>
translate-x-80transform: translateX(20rem);<div className="translate-x-80"></div>
translate-y-80transform: translateY(20rem);<div className="translate-y-80"></div>
translate-x-96transform: translateX(24rem);<div className="translate-x-96"></div>
translate-y-96transform: translateY(24rem);<div className="translate-y-96"></div>
translate-x-1/2transform: translateX(50%);<div className="translate-x-1/2"></div>
translate-x-1/3transform: translateX(33.333333%);<div className="translate-x-1/3"></div>
translate-x-2/3transform: translateX(66.666667%);<div className="translate-x-2/3"></div>
translate-x-1/4transform: translateX(25%);<div className="translate-x-1/4"></div>
translate-x-2/4transform: translateX(50%);<div className="translate-x-2/4"></div>
translate-x-3/4transform: translateX(75%);<div className="translate-x-3/4"></div>
translate-x-fulltransform: translateX(100%);<div className="translate-x-full"></div>
translate-y-1/2transform: translateY(50%);<div className="translate-y-1/2"></div>
translate-y-1/3transform: translateY(33.333333%);<div className="translate-y-1/3"></div>
translate-y-2/3transform: translateY(66.666667%);<div className="translate-y-2/3"></div>
translate-y-1/4transform: translateY(25%);<div className="translate-y-1/4"></div>
translate-y-2/4transform: translateY(50%);<div className="translate-y-2/4"></div>
translate-y-3/4transform: translateY(75%);<div className="translate-y-3/4"></div>
translate-y-fulltransform: translateY(100%);<div className="translate-y-full"></div>

Overview of Translate

Adding the Translate

The core translation utility in Tailwind allows developers to reposition elements on both the X and Y axes. Below is a JSX implementation showcasing how translate-x and translate-y are applied.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Here, the image shifts 2.5rem on the X-axis and 1.25rem on the Y-axis using translate-x-10 and translate-y-5.

Adding the Negative Translate

Tailwind supports negative values for translate to move elements in the opposite direction. This flexibility is invaluable when designing fluid and dynamic layouts.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Resetting Translate

In cases where you'd like to reset translate, use translate-x-0, translate-y-0 utilities. To remove all transformations, use the transform-none utility.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Accelerating the Hardware

If the rendered element transitions better with GPU than CPU, you can enforce it by using transform-gpu utility.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

States and Responsiveness

Interactions and responsive behaviors can add significant value to transformed elements. Tailwind provides utilities to modify transformations conditionally, based on hover, focus states, or breakpoints.

Hover and Focus States

Transforming elements during hover or focus interactions emphasizes features and improves user experiences. Use the hover and focus prefixes ensures to transform elements only during those interactions.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Breakpoint Modifiers

Tailwind’s breakpoint modifiers allows you to translate elements conditionally at various screen sizes. Use sm, md, etc. to target a particular screen.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Custom Translate

Tailwind allows extensive customization of translate utilities. You can either extend your theme or directly use arbitrary values for specific needs.

Extending the Theme

Modify your tailwind.config.js to add custom translation values to your project.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

This approach ensures the added values are available globally in your project.

Using Arbitrary Values

For scenarios requiring one-off transformation values that aren't defined in the theme, arbitrary values are invaluable.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

By using arbitrary values, you can quickly experiment with specific units without modifying the theme.

Real World Examples

Animated Product Cards Slider

A horizontal product card slider with translate animation on hover, showcasing fashion items with smooth transitions.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Staggered Team Members Grid

A grid layout of team members with staggered translate animations on scroll.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Interactive Feature Showcase

A feature showcase with translate effects on interaction, highlighting key product features.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

A testimonial carousel with sliding translate animations between reviews.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Animated Service Cards

Service cards with diagonal translate animations on hover.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Customization Examples

Hover Translation Effect on Product Cards

This example demonstrates a product card that translates upward on hover, creating an engaging interaction for e-commerce listings.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Staggered Sidebar Navigation Translation

This example shows a sidebar navigation with staggered translation effects when items are hovered.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Reveal Text Effect

This example shows a text reveal effect using translate and clip-path.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Best Practices

Maintain Design Consistency

Design consistency is essential for creating visually appealing interfaces. When using Tailwind's translate utilities, ensure consistent spacing and alignment guidelines are applied across components. For example, if a translate-x-5 value is used to offset buttons or cards in one section, it’s recommended to reuse the same value elsewhere to maintain uniformity. Define these values centrally in a custom theme configuration to align with your design system.

Centralizing design decisions can also prevent unintended inconsistencies in utility usage. For example, instead of arbitrarily applying different translate values repeatedly, consider extending the Tailwind config. By doing so, developers and teams can ensure globally consistent spacing and movement scales, which improves maintainability.

Optimize for Reusability

To optimize for scalability, design reusable components that incorporate translate utilities effectively. Reusable components, such as sliding panels or animated cards, should allow easy customization through props.

By abstracting animations into reusable classes or components, you reduce redundancy and promote consistency across the project. Documenting these components in your design system or component library ensures they are easy to discover and reuse in different contexts.

Lastly, design reusable components with responsiveness in mind, allowing them to adapt to varying screen sizes or user preferences. For instance, use responsive modifiers like md:translate-x-* or lg:translate-y-* to ensure animations look great across devices.

Accessibility Considerations

Enhance Readability and Navigability

Translate utilities can significantly impact how users navigate and understand your content. When used thoughtfully, these utilities guide user attention to key elements without introducing confusion. For example, animating tooltips or notifications into view using translate-y-* creates a clear focus for users.

Animations should always enhance readability. Avoid overly fast or complex movements that can distract users or make content difficult to comprehend. Tailwind’s duration-* classes allow you to control the speed of animations, ensuring they support, rather than hinder, navigation.

Support Accessible Interactive Elements

Interactive elements like buttons, links, and dropdowns benefit from thoughtful animations using translate utilities. For example, a button can slide slightly downward when pressed, providing tactile feedback for users. Pair these animations with focus indicators and ARIA roles to ensure accessibility.

Always test interactive elements with assistive technologies to ensure that animations enhance, rather than hinder, usability. Focus indicators, in particular, should remain visible and intuitive for keyboard users.

Debugging Common Issues

Resolve Common Problems

Translate utilities can occasionally cause issues like unintended overflow or misalignment. For example, animating elements using translate-x-* or translate-y-* without considering their container’s dimensions may result in overflow.

To address this, carefully increase the parent width or lower the translate values to confine the transition within the container. Always test animations in various scenarios to identify and fix these issues proactively.

Isolate Utility Conflicts

Conflicting utilities can cause unintended behavior when using translate. For instance, applying multiple translate classes to the same element (e.g., translate-x-4 and -translate-x-4) can cancel out or override styles. Use Tailwind’s important modifier (!) or carefully structure class orders to prevent conflicts.

Organizing class utilities logically and testing component behavior at different breakpoints can help isolate and resolve such conflicts efficiently.