CSS 3D Transforms
Create immersive 3D experiences with CSS 3D Transform properties
What are CSS 3D Transforms?
CSS 3D Transforms allow you to manipulate elements in three-dimensional space. Unlike 2D transforms that work on the X and Y axes, 3D transforms add the Z-axis, enabling depth perception and creating immersive visual effects.
Key 3D Transform Concepts:
- perspective - Creates depth perception for 3D transformations
- transform-style: preserve-3d - Maintains 3D positioning of child elements
- translate3d() - Moves element in 3D space
- rotate3d() - Rotates element in 3D space
- scale3d() - Scales element in 3D space
- matrix3d() - Combines transforms using a 4x4 matrix
- backface-visibility - Controls visibility of element backfaces
CSS 3D Transforms Reference
| Property/Function | Description | Values |
|---|---|---|
| perspective | Sets the perspective for 3D transformations | length | none |
| perspective-origin | Sets the origin point for perspective | x-position y-position |
| transform-style | Sets how child elements are positioned in 3D space | flat | preserve-3d |
| backface-visibility | Controls visibility of element backfaces | visible | hidden |
| translate3d() | Moves element in 3D space | translate3d(tx, ty, tz) |
| translateZ() | Moves element along the Z-axis | translateZ(tz) |
| rotate3d() | Rotates element in 3D space | rotate3d(x, y, z, angle) |
| rotateX() | Rotates element around X-axis | rotateX(angle) |
| rotateY() | Rotates element around Y-axis | rotateY(angle) |
| rotateZ() | Rotates element around Z-axis | rotateZ(angle) |
| scale3d() | Scales element in 3D space | scale3d(sx, sy, sz) |
| scaleZ() | Scales element along Z-axis | scaleZ(sz) |
| matrix3d() | Combines transforms using a 4x4 matrix | matrix3d(a1, b1, c1, d1, a2, b2, c2, d2, a3, b3, c3, d3, a4, b4, c4, d4) |
CSS 3D Transforms in Action
Example Code
/* CSS 3D Transforms */
/* Basic 3D Transform Properties */
.container-3d {
perspective: 1000px;
transform-style: preserve-3d;
}
/* 3D Translate - Move element in 3D space */
.translate-3d {
transform: translate3d(50px, 100px, 50px);
}
.translateZ {
transform: translateZ(100px);
}
/* 3D Rotate - Rotate element in 3D space */
.rotate-3d {
transform: rotate3d(1, 1, 1, 45deg);
}
.rotateX {
transform: rotateX(45deg);
}
.rotateY {
transform: rotateY(45deg);
}
.rotateZ {
transform: rotateZ(45deg);
}
/* 3D Scale - Resize element in 3D space */
.scale-3d {
transform: scale3d(1.5, 1.5, 1.5);
}
.scaleZ {
transform: scaleZ(1.5);
}
/* Matrix3D - Combine 3D transforms */
.matrix-3d {
transform: matrix3d(
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 100, 1
);
}
/* Perspective */
.perspective {
perspective: 500px;
}
.perspective-origin {
perspective-origin: 20% 30%;
}
/* Transform Style */
.preserve-3d {
transform-style: preserve-3d;
}
.flat-3d {
transform-style: flat;
}
/* Backface Visibility */
.backface-visible {
backface-visibility: visible;
}
.backface-hidden {
backface-visibility: hidden;
}
/* Multiple 3D transforms */
.multiple-3d {
transform: translateZ(100px) rotateY(45deg) scale3d(1.2, 1.2, 1.2);
}
/* 3D Transform origin */
.origin-3d-center {
transform-origin: center;
transform: rotateY(45deg);
}
.origin-3d-custom {
transform-origin: 20% 40% 50px;
transform: rotateX(45deg);
}
/* 3D Transition effects */
.transition-3d {
transition: transform 0.5s ease;
}
.transition-3d:hover {
transform: rotateY(180deg);
}
/* 3D Card flip effect */
.card-3d {
perspective: 1000px;
}
.card-inner-3d {
transition: transform 0.6s;
transform-style: preserve-3d;
}
.card-3d:hover .card-inner-3d {
transform: rotateY(180deg);
}
.card-front-3d, .card-back-3d {
backface-visibility: hidden;
}
.card-back-3d {
transform: rotateY(180deg);
}
/* 3D Cube */
.cube {
perspective: 1000px;
transform-style: preserve-3d;
}
.cube-face {
position: absolute;
width: 200px;
height: 200px;
backface-visibility: hidden;
}
.cube-front { transform: translateZ(100px); }
.cube-back { transform: rotateY(180deg) translateZ(100px); }
.cube-right { transform: rotateY(90deg) translateZ(100px); }
.cube-left { transform: rotateY(-90deg) translateZ(100px); }
.cube-top { transform: rotateX(90deg) translateZ(100px); }
.cube-bottom { transform: rotateX(-90deg) translateZ(100px); }
/* 3D Carousel */
.carousel-3d {
perspective: 1000px;
transform-style: preserve-3d;
}
.carousel-item {
transform: rotateY(calc(var(--item-angle) * 1deg)) translateZ(250px);
}
/* 3D Gallery */
.gallery-3d {
perspective: 1000px;
}
.gallery-item-3d {
transition: transform 0.3s ease;
transform-style: preserve-3d;
}
.gallery-item-3d:hover {
transform: translateZ(50px) rotateY(10deg);
}
/* 3D Button effects */
.btn-3d {
transition: all 0.3s ease;
transform-style: preserve-3d;
}
.btn-3d:hover {
transform: translateZ(10px) rotateX(5deg);
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
}
/* 3D Text effects */
.text-3d {
transform: translateZ(20px);
text-shadow: 0 1px 0 #ccc, 0 2px 0 #c9c9c9, 0 3px 0 #bbb, 0 4px 0 #b9b9b9;
}
/* 3D Depth with shadows */
.depth-3d {
transform: translateZ(20px);
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
}
/* 3D Animation */
@keyframes spin-3d {
from {
transform: rotate3d(1, 1, 1, 0deg);
}
to {
transform: rotate3d(1, 1, 1, 360deg);
}
}
.spin-3d {
animation: spin-3d 2s linear infinite;
}
@keyframes float-3d {
0%, 100% {
transform: translate3d(0, 0, 0);
}
50% {
transform: translate3d(0, -20px, 20px);
}
}
.float-3d {
animation: float-3d 3s ease-in-out infinite;
}
/* 3D Parallax effect */
.parallax-container {
perspective: 1px;
height: 100vh;
overflow-x: hidden;
overflow-y: auto;
}
.parallax-layer {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
.parallax-back {
transform: translateZ(-1px) scale(2);
}
.parallax-base {
transform: translateZ(0);
}
.parallax-front {
transform: translateZ(1px) scale(0.5);
}
/* 3D Scene with multiple objects */
.scene-3d {
perspective: 1000px;
transform-style: preserve-3d;
}
.object-3d {
transform-style: preserve-3d;
transition: transform 0.3s ease;
}
.object-1 { transform: translate3d(-100px, 0, 100px) rotateY(45deg); }
.object-2 { transform: translate3d(0, 0, 200px) rotateX(30deg); }
.object-3 { transform: translate3d(100px, 0, 150px) rotateZ(15deg); }
/* 3D Navigation */
.nav-3d {
perspective: 1000px;
}
.nav-item-3d {
transition: transform 0.3s ease;
transform-style: preserve-3d;
}
.nav-item-3d:hover {
transform: translateZ(20px) rotateX(5deg);
}
/* 3D Modal/popup */
.modal-3d {
perspective: 1000px;
}
.modal-content-3d {
transform: rotateX(10deg) translateZ(50px);
transition: transform 0.5s ease;
}
.modal-3d.open .modal-content-3d {
transform: rotateX(0) translateZ(0);
}
/* 3D Image hover effects */
.img-3d {
transition: transform 0.3s ease;
transform-style: preserve-3d;
}
.img-3d:hover {
transform: rotateY(15deg) translateZ(20px);
}
/* 3D Loading spinner */
.spinner-3d {
animation: spin-3d 1s linear infinite;
transform-style: preserve-3d;
}
/* 3D Transform with filters */
.filter-3d {
filter: drop-shadow(0 10px 5px rgba(0, 0, 0, 0.3));
transform: rotateY(15deg) translateZ(20px);
}
/* 3D Transform with blend modes */
.blend-3d {
mix-blend-mode: multiply;
transform: rotateX(5deg) translateZ(10px);
}
/* 3D Transform with clip-path */
.clip-3d {
clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);
transform: rotateY(30deg) translateZ(30px);
}
/* 3D Transform with CSS variables */
:root {
--rotate-x: 45deg;
--rotate-y: 30deg;
--translate-z: 50px;
}
.variable-3d {
transform: rotateX(var(--rotate-x)) rotateY(var(--rotate-y)) translateZ(var(--translate-z));
}
/* 3D Transform performance optimization */
.performance-3d {
transform: translate3d(0, 0, 0);
backface-visibility: hidden;
will-change: transform;
}
/* Reduced motion support for 3D */
@media (prefers-reduced-motion: reduce) {
.motion-3d {
transform: none;
animation: none;
transition: none;
}
}
/* 3D Transform with responsive design */
@media (max-width: 768px) {
.responsive-3d {
perspective: 500px;
transform: scale(0.8) rotateY(10deg);
}
}
/* 3D Transform for dark mode */
@media (prefers-color-scheme: dark) {
.dark-3d {
transform: translateZ(10px);
box-shadow: 0 5px 15px rgba(255, 255, 255, 0.1);
}
}
/* 3D Transform with gradients */
.gradient-3d {
background: linear-gradient(45deg, #3498db, #9b59b6);
transform: rotateX(10deg) rotateY(5deg) translateZ(20px);
}
/* 3D Transform with borders */
.border-3d {
border: 2px solid #3498db;
transform: rotateY(15deg) translateZ(10px);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);
}
/* Nested 3D transforms */
.parent-3d {
transform: rotateY(30deg);
transform-style: preserve-3d;
}
.child-3d {
transform: rotateX(15deg) translateZ(50px);
}
/* 3D Transform with masks */
.mask-3d {
mask: linear-gradient(black, transparent);
transform: rotateY(10deg) translateZ(20px);
}
/* 3D Transform for print */
@media print {
.print-3d {
transform: none !important;
}
}3D Transform Techniques
3D Perspective
Creating depth perception for 3D transformations.
3D Rotation
Rotating elements around X, Y, and Z axes.
3D Translation
Moving elements along the Z-axis for depth effects.
3D Card Flip
Creating interactive 3D card flip animations.
Best Practices for 3D Transforms
Effective Usage
- Use perspective to create depth perception
- Set transform-style: preserve-3d for nested 3D elements
- Use backface-visibility: hidden for card flip effects
- Combine with transitions for smooth 3D animations
- Use will-change for performance optimization
- Test across different browsers and devices
Common Mistakes to Avoid
- Forgetting to set perspective for 3D effects
- Not using transform-style: preserve-3d for nested 3D
- Overusing complex 3D transforms unnecessarily
- Ignoring performance on low-powered devices
- Not testing with reduced motion preferences
- Forgetting browser prefix support for older browsers
Browser Support & Accessibility
- CSS 3D Transforms are supported in all modern browsers
- Use feature queries (@supports) for progressive enhancement
- Consider reduced motion preferences with media queries
- Ensure 3D content remains accessible and usable
- Test with screen readers when content is visually transformed
- Provide fallbacks for older browsers when necessary
Ready to Try It Yourself?
Experiment with CSS 3D Transforms in our interactive editor. See your changes in real-time and build your understanding through practice.