CSS 3D transforms extend 2D positioning onto the Z-axis—bringing elements closer to or farther from the viewer and rotating cards in three-dimensional space. Combining perspective, rotateY(), transform-style: preserve-3d, and backface-visibility: hidden lets you create crisp interactive flip cards with zero JavaScript rendering engines.
perspective: Sets viewing distance (for example, perspective: 900px; on the parent container). Smaller numbers create dramatic distortion; larger values (800px–1200px) create natural depth.rotateX() / rotateY() / translateZ(): Tilts forward/backward around X, spins left/right around Y, or pushes forward along Z.transform-style: preserve-3d: Applied to the flipping inner wrapper so child front and back faces keep their 3D coordinates instead of flattening to 2D.backface-visibility: hidden: Hides the mirror-reversed back of a rotated face so the opposite card side shows cleanly..flip-scene {
width: 240px;
height: 150px;
perspective: 900px;
}
.flip-card {
position: relative;
width: 100%;
height: 100%;
transform-style: preserve-3d;
transition: transform 0.6s ease;
}
.flip-scene:hover .flip-card {
transform: rotateY(180deg);
}
.card-face {
position: absolute;
inset: 0;
backface-visibility: hidden;
display: grid;
place-items: center;
border-radius: 10px;
}
.card-front { background: #2563eb; color: #ffffff; }
.card-back { background: #0f172a; color: #38bdf8; transform: rotateY(180deg); }
perspective: Rotating along rotateY(45deg) without perspective looks flat and squished horizontally instead of showing 3D depth.overflow: hidden on a preserve-3d parent: Overflow clipping forces browsers to flatten 3D children back into 2D (flat).prefers-reduced-motion: reduce for visitors sensitive to motion.Setting perspective: 900px; on a parent container gives all child cards one shared vanishing point, while transform: perspective(900px) rotateY(...) gives a single element its own individual vanishing point.
Because both faces occupy the same plane unless the back face gets transform: rotateY(180deg); alongside backface-visibility: hidden;.
Sign in to track your learning journey, earn industry-recognized certificates, and join our elite developer community.
Quick Access With
Experiment with the code from this lesson in our interactive playground.