Loading...
Loading...
View Transitions implements the React View Transition API for seamless animated transitions between UI states and routes.
npx skill4agent add itallstartedwithaidea/agent-skills view-transitions<ViewTransition>addTransitionTypeview-transition-namesequenceDiagram
participant User
participant React
participant Browser
participant CSS
User->>React: Navigate to new route
React->>Browser: startViewTransition()
Browser->>Browser: Capture old state snapshot
React->>React: Update DOM (concurrent)
Browser->>Browser: Capture new state snapshot
Browser->>CSS: Apply ::view-transition pseudo-elements
CSS->>Browser: Animate old → new
Browser->>User: Smooth transition rendered<ViewTransition>import { ViewTransition } from "react";
import { useRouter } from "next/navigation";
function PageLayout({ children }: { children: React.ReactNode }) {
return (
<ViewTransition>
{children}
</ViewTransition>
);
}function ProductCard({ product }: { product: Product }) {
return (
<Link href={`/products/${product.id}`}>
<ViewTransition name={`product-${product.id}`}>
<img src={product.image} alt={product.name} />
</ViewTransition>
<h3>{product.name}</h3>
</Link>
);
}
function ProductDetail({ product }: { product: Product }) {
return (
<article>
<ViewTransition name={`product-${product.id}`}>
<img src={product.image} alt={product.name} />
</ViewTransition>
<h1>{product.name}</h1>
<p>{product.description}</p>
</article>
);
}import { addTransitionType } from "react";
function handleNavigation(direction: "forward" | "back") {
addTransitionType(direction);
router.push(targetUrl);
}::view-transition-old(root) {
animation: slide-out 200ms ease-in;
}
::view-transition-new(root) {
animation: slide-in 200ms ease-out;
}
@keyframes slide-out { to { transform: translateX(-100%); opacity: 0; } }
@keyframes slide-in { from { transform: translateX(100%); opacity: 0; } }
/* Reverse for back navigation */
[data-transition-type="back"]::view-transition-old(root) {
animation: slide-in 200ms ease-in reverse;
}
[data-transition-type="back"]::view-transition-new(root) {
animation: slide-out 200ms ease-out reverse;
}view-transition-nameprefers-reduced-motionaddTransitionType| Platform | Support | Notes |
|---|---|---|
| Cursor | Full | React + Next.js aware |
| VS Code | Full | CSS pseudo-element support |
| Windsurf | Full | Frontend framework support |
| Claude Code | Full | Code generation |
| Cline | Full | React component generation |
| aider | Partial | Limited CSS context |
view-transitionsreactshared-elementspage-transitionsanimationnext-jscss-pseudo-elementscross-faderoute-animation