Isometric 3D Projection•React + Framer Motion
Isometric Revive 3D Tactile Button
Multi-angle 3D button engineered with a true 30° axonometric projection matrix, multi-tier extruded facets, and glowing core indicators.
preview.tsx
tus apr 29
10:05 am
Interactions:0
Hover or click to interact
Customizer
PRESETS & VARIATIONS
All Variants Preview
Click or hover over buttons to test 30° isometric matrix spring depression
Figma Master Obsidiantheme="figma"
tus apr 29
10:05 am
Amber Solar Flaretheme="amber"
tus apr 29
10:05 am
Electric Cyantheme="cyan"
tus apr 29
10:05 am
Cyber Violettheme="violet"
tus apr 29
10:05 am
UI Pirate Magmatheme="uipirate"
tus apr 29
10:05 am
Gold Luxurytheme="gold-luxury"
tus apr 29
10:05 am
Installation & Setup
Install the required dependencies for Framer Motion spring physics and Tailwind utility classes:
npm install framer-motion clsx
Code & Integration
IsometricReviveButton.tsx• Production Ready
"use client";
import React, { useState } from "react";
import { motion } from "framer-motion";
export type IsometricReviveTheme = "figma" | "amber" | "cyan" | "emerald" | "violet" | "crimson" | "uipirate";
export type IsometricReviveSize = "xs" | "sm" | "md" | "lg" | "xl";
export interface IsometricReviveButtonProps {
label?: string;
theme?: IsometricReviveTheme;
size?: IsometricReviveSize;
onClick?: () => void;
disabled?: boolean;
className?: string;
}
export function IsometricReviveButton({
label = "Revive Now",
theme = "figma",
size = "md",
onClick,
disabled = false,
className = "",
}: IsometricReviveButtonProps) {
const [isHovered, setIsHovered] = useState(false);
const [isPressed, setIsPressed] = useState(false);
const scale = size === "sm" ? 0.8 : size === "lg" ? 1.2 : 1;
return (
<div
className={`relative select-none ${className}`}
style={{ perspective: 1000 }}
onMouseEnter={() => setIsHovered(true)}
onMouseLeave={() => {
setIsHovered(false);
setIsPressed(false);
}}
>
<motion.button
type="button"
disabled={disabled}
onClick={onClick}
onMouseDown={() => setIsPressed(true)}
onMouseUp={() => setIsPressed(false)}
animate={{
rotateX: 25,
rotateY: -20,
rotateZ: 10,
y: isPressed ? 4 : isHovered ? -8 : 0,
scale: scale * (isPressed ? 0.98 : 1),
}}
transition={{ type: "spring", stiffness: 400, damping: 25 }}
className="relative px-8 py-4 rounded-2xl bg-[#0D1015] border border-white/20 text-white font-bold text-sm shadow-[0_20px_40px_rgba(0,0,0,0.8),inset_0_1px_0_rgba(255,255,255,0.4)] cursor-pointer focus:outline-none flex items-center gap-3"
>
<span className="w-2 h-2 rounded-full bg-[#FFA000] shadow-[0_0_8px_#FFA000] animate-pulse" />
<span className="tracking-wide uppercase text-xs font-mono">{label}</span>
</motion.button>
</div>
);
}Component API Reference
| Prop | Type | Default | Description |
|---|---|---|---|
| label | string | "Revive Now" | Text displayed on the isometric face |
| theme | IsometricReviveTheme | "figma" | Color scheme preset (Obsidian, Amber, Cyan, etc.) |
| size | "xs" | "sm" | "md" | "lg" | "xl" | "md" | Scale multiplier |
| onClick | () => void | undefined | Click callback event handler |
Personalized Help
Struggling with isometric 3D buttons or custom web animations? Let's talk about your product.
UI Pirate is a product design & development agency trusted by 50+ SaaS founders and enterprise teams across the US, UK & beyond. Tell us what you need.