Translate
Also called translateX or translateY
A CSS transform that moves an element along the x or y axis while the layout around it stays exactly where it was.
import { Toast } from '@base-ui/react/toast';
export function SaveToast() {
return (
<Toast.Provider>
<SaveButton />
<Toast.Portal>
<Toast.Viewport className='fixed right-4 bottom-4 flex w-80 flex-col gap-2'>
<ToastList />
</Toast.Viewport>
</Toast.Portal>
</Toast.Provider>
);
}
function SaveButton() {
const toastManager = Toast.useToastManager();
return (
<button
type='button'
onClick={() =>
toastManager.add({
title: 'Changes saved',
description: 'Your profile is up to date.'
})
}
className='rounded-full bg-primary px-4 py-2 text-sm font-medium text-primary-foreground'
>
Save changes
</button>
);
}
function ToastList() {
const { toasts } = Toast.useToastManager();
return toasts.map((toast) => (
<Toast.Root
key={toast.id}
toast={toast}
// Enter from 16px below and leave the same way. Reduced motion keeps only the fade.
className='rounded-xl border bg-background p-4 shadow-lg transition-[opacity,translate] duration-250 ease-[cubic-bezier(0.23,1,0.32,1)] data-ending-style:opacity-0 data-starting-style:opacity-0 motion-safe:data-ending-style:translate-y-4 motion-safe:data-starting-style:translate-y-4'
>
<Toast.Title className='text-sm font-medium' />
<Toast.Description className='text-sm text-muted-foreground' />
</Toast.Root>
));
}Make the toast slide up into view: start it 16px below its final spot at opacity 0, then animate transform to translateY(0) and opacity to 1 over 250ms with cubic-bezier(0.23, 1, 0.32, 1). Animate only transform and opacity, never top or margin, and use a plain fade when prefers-reduced-motion is set.
Paste into Layerwise or any AI coding tool.
What is Translate?
transform: translate(40px, -20px) shifts where an element is drawn: 40px to the right and 20px up. Its original slot in the layout stays reserved, so neighbors never move and the element can slide over them. Percentages are based on the element's own size, which is why translate(-50%, -50%) centers an element on a point.
Translate powers most movement in interfaces: toasts sliding up, drawers sliding in, a card lifting a few pixels on hover, an item following your finger while you drag it. Browsers can usually move a transformed element without recalculating layout, so animating translate is much smoother than animating top, left, or margin.
Keep UI distances short, around 4 to 16px for entrances, so motion feels quick. Modern CSS also has a standalone translate property (translate: 0 8px) that you can set separately from transform. For people who prefer reduced motion, swap long slides for a simple fade.
Often confused with
- Slide in
- A slide-in is an entrance animation. Translate is the transform that usually moves the element during it.
Related terms
All termsScale
A CSS transform that draws an element larger or smaller around its transform origin, without pushing neighboring elements.
Slide in
An entrance animation where an element moves into place from one side, often while fading in, so people see where it came from.
GPU acceleration
A browser technique where the graphics chip moves, fades, or scales an element on its own layer instead of redrawing the page every frame.
Layout thrashing
A slowdown caused by code that alternates style changes with size reads, forcing the browser to recalculate layout many times in one frame.
Build it with Layerwise
Describe your app, watch it run in a live preview, and publish it with a database, storage, and sign-in built in.