3D CSS Efekty pro Emoji
Flip karty, rotující kostky, perspective tilt, karusely a další pokročilé 3D transformace
🎯 Úvod do 3D CSS transformací
CSS 3D transformace umožňují vytvářet poutavé vizuální efekty přímo v prohlížeči bez potřeby JavaScriptu nebo externích knihoven. Klíčové vlastnosti jsou:
perspective- definuje vzdálenost pozorovatele od 3D prostorutransform-style: preserve-3d- zachovává 3D prostor pro potomkytransform: rotateX/Y/Z(), translateZ()- 3D transformacebackface-visibility- viditelnost zadní strany prvku
3D transformace jsou GPU akcelerované, takže jsou velmi výkonné. Vyhněte se ale příliš mnoha prvkům s preserve-3d současně.
🔄 1. Flip Card (Otočná karta)
Klasický efekt otáčející karty s obsahem na přední i zadní straně. Skvělý pro profilové karty, produkty nebo interaktivní kvízy.
<div class="flip-card">
<div class="flip-card-inner">
<div class="flip-card-front">🎭</div>
<div class="flip-card-back">🎪</div>
</div>
</div>
.flip-card {
width: 150px;
height: 150px;
perspective: 1000px;
cursor: pointer;
}
.flip-card-inner {
position: relative;
width: 100%;
height: 100%;
transition: transform 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
transform-style: preserve-3d;
}
.flip-card:hover .flip-card-inner {
transform: rotateY(180deg);
}
.flip-card-front,
.flip-card-back {
position: absolute;
width: 100%;
height: 100%;
backface-visibility: hidden;
border-radius: 16px;
display: flex;
align-items: center;
justify-content: center;
font-size: 4rem;
box-shadow: 0 10px 30px rgba(0,0,0,0.2);
}
.flip-card-front {
background: linear-gradient(135deg, #FFD700, #FF9500);
}
.flip-card-back {
background: linear-gradient(135deg, #10B981, #06B6D4);
transform: rotateY(180deg);
}
🎲 2. 3D Kostka
Plně rotující 3D kostka s emoji na každé stěně. Automaticky se otáčí, při hoveru se zastaví.
<div class="cube-container">
<div class="cube">
<div class="cube-face cube-face-front">🎯</div>
<div class="cube-face cube-face-back">⭐</div>
<div class="cube-face cube-face-right">🚀</div>
<div class="cube-face cube-face-left">💎</div>
<div class="cube-face cube-face-top">🔥</div>
<div class="cube-face cube-face-bottom">💜</div>
</div>
</div>
.cube-container {
width: 120px;
height: 120px;
perspective: 600px;
}
.cube {
width: 100%;
height: 100%;
position: relative;
transform-style: preserve-3d;
animation: rotateCube 8s infinite linear;
}
.cube-face {
position: absolute;
width: 120px;
height: 120px;
display: flex;
align-items: center;
justify-content: center;
font-size: 3rem;
border: 2px solid rgba(255,255,255,0.3);
border-radius: 12px;
}
.cube-face-front { transform: rotateY(0deg) translateZ(60px); }
.cube-face-back { transform: rotateY(180deg) translateZ(60px); }
.cube-face-right { transform: rotateY(90deg) translateZ(60px); }
.cube-face-left { transform: rotateY(-90deg) translateZ(60px); }
.cube-face-top { transform: rotateX(90deg) translateZ(60px); }
.cube-face-bottom { transform: rotateX(-90deg) translateZ(60px); }
@keyframes rotateCube {
from { transform: rotateX(0deg) rotateY(0deg); }
to { transform: rotateX(360deg) rotateY(360deg); }
}
.cube-container:hover .cube {
animation-play-state: paused;
}
📐 3. Perspective Tilt
Interaktivní efekt naklánění podle pozice myši. Emoji se "vznáší" nad kartou díky translateZ.
Efekt vyžaduje JavaScript pro sledování myši
<div class="tilt-card" id="tiltCard">
<span class="emoji">🎨</span>
</div>
<style>
.tilt-card {
width: 180px;
height: 180px;
background: linear-gradient(135deg, #667eea, #764ba2);
border-radius: 20px;
display: flex;
align-items: center;
justify-content: center;
font-size: 5rem;
transition: transform 0.1s ease-out;
transform-style: preserve-3d;
cursor: pointer;
box-shadow: 0 20px 40px rgba(102, 126, 234, 0.4);
}
.tilt-card .emoji {
transform: translateZ(30px);
transition: transform 0.3s ease;
filter: drop-shadow(0 10px 20px rgba(0,0,0,0.3));
}
.tilt-card:hover .emoji {
transform: translateZ(50px) scale(1.1);
}
</style>
const card = document.getElementById('tiltCard');
card.addEventListener('mousemove', (e) => {
const rect = card.getBoundingClientRect();
const x = e.clientX - rect.left;
const y = e.clientY - rect.top;
const centerX = rect.width / 2;
const centerY = rect.height / 2;
const rotateX = (y - centerY) / 10;
const rotateY = (centerX - x) / 10;
card.style.transform = `
perspective(1000px)
rotateX(${rotateX}deg)
rotateY(${rotateY}deg)
`;
});
card.addEventListener('mouseleave', () => {
card.style.transform = 'perspective(1000px) rotateX(0) rotateY(0)';
});
💥 4. 3D Pop-out
Emoji "vyskakuje" z obrazovky směrem k uživateli při hoveru.
.pop-out-container {
perspective: 800px;
}
.pop-out {
font-size: 5rem;
display: inline-block;
transition: transform 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
cursor: pointer;
}
.pop-out:hover {
transform: translateZ(100px) scale(1.3);
filter: drop-shadow(0 30px 50px rgba(0,0,0,0.4));
}
🎠 5. 3D Karusel
Rotující 3D karusel s osmi emoji. Automaticky se otáčí, při hoveru se zastaví.
.carousel-container {
width: 300px;
height: 200px;
perspective: 1000px;
position: relative;
}
.carousel {
width: 100%;
height: 100%;
position: relative;
transform-style: preserve-3d;
animation: rotateCarousel 12s infinite linear;
}
.carousel-item {
position: absolute;
width: 80px;
height: 80px;
left: 50%;
top: 50%;
margin: -40px 0 0 -40px;
background: rgba(255,255,255,0.1);
border: 1px solid rgba(255,255,255,0.2);
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
font-size: 2.5rem;
backdrop-filter: blur(5px);
}
/* Pozice jednotlivých položek v kruhu */
.carousel-item:nth-child(1) { transform: rotateY(0deg) translateZ(150px); }
.carousel-item:nth-child(2) { transform: rotateY(45deg) translateZ(150px); }
.carousel-item:nth-child(3) { transform: rotateY(90deg) translateZ(150px); }
.carousel-item:nth-child(4) { transform: rotateY(135deg) translateZ(150px); }
.carousel-item:nth-child(5) { transform: rotateY(180deg) translateZ(150px); }
.carousel-item:nth-child(6) { transform: rotateY(225deg) translateZ(150px); }
.carousel-item:nth-child(7) { transform: rotateY(270deg) translateZ(150px); }
.carousel-item:nth-child(8) { transform: rotateY(315deg) translateZ(150px); }
@keyframes rotateCarousel {
from { transform: rotateY(0deg); }
to { transform: rotateY(360deg); }
}
.carousel-container:hover .carousel {
animation-play-state: paused;
}
📊 6. 3D Extrusion (Hloubkový efekt)
Vytvoření iluze hloubky pomocí vrstev. Emoji vypadá jako vytlačené do prostoru.
.extrusion {
position: relative;
font-size: 5rem;
transform-style: preserve-3d;
transform: rotateX(20deg) rotateY(-20deg);
cursor: pointer;
transition: transform 0.5s ease;
}
.extrusion:hover {
transform: rotateX(0deg) rotateY(0deg);
}
.extrusion-layer {
position: absolute;
top: 0;
left: 0;
}
/* 10 vrstev s postupným ztmavením */
.extrusion .layer-1 { transform: translateZ(0px); }
.extrusion .layer-2 { transform: translateZ(-2px); filter: brightness(0.95); }
.extrusion .layer-3 { transform: translateZ(-4px); filter: brightness(0.9); }
.extrusion .layer-4 { transform: translateZ(-6px); filter: brightness(0.85); }
.extrusion .layer-5 { transform: translateZ(-8px); filter: brightness(0.8); }
.extrusion .layer-6 { transform: translateZ(-10px); filter: brightness(0.75); }
.extrusion .layer-7 { transform: translateZ(-12px); filter: brightness(0.7); }
.extrusion .layer-8 { transform: translateZ(-14px); filter: brightness(0.65); }
.extrusion .layer-9 { transform: translateZ(-16px); filter: brightness(0.6); }
.extrusion .layer-10 { transform: translateZ(-18px); filter: brightness(0.55); }
🏔️ 7. Parallax Layers
Vrstvy emoji pohybující se různou rychlostí vytvářejí iluzi hloubky.
.parallax-scene {
width: 300px;
height: 200px;
position: relative;
perspective: 600px;
overflow: hidden;
border-radius: 20px;
background: linear-gradient(135deg, #1a1a2e, #16213e);
}
.parallax-layer {
position: absolute;
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
transition: transform 0.1s ease-out;
}
.parallax-layer-1 { z-index: 1; font-size: 6rem; }
.parallax-layer-2 { z-index: 2; font-size: 3rem; }
.parallax-layer-3 { z-index: 3; font-size: 1.5rem; }
const scene = document.getElementById('parallaxScene');
const layers = scene.querySelectorAll('.parallax-layer');
scene.addEventListener('mousemove', (e) => {
const rect = scene.getBoundingClientRect();
const x = (e.clientX - rect.left - rect.width / 2) / 10;
const y = (e.clientY - rect.top - rect.height / 2) / 10;
layers.forEach((layer, index) => {
const depth = (index + 1) * 0.3;
layer.style.transform = `
translateX(${x * depth}px)
translateY(${y * depth}px)
`;
});
});
scene.addEventListener('mouseleave', () => {
layers.forEach(layer => {
layer.style.transform = 'translateX(0) translateY(0)';
});
});
🎈 8. 3D Float
Emoji se vznáší v prostoru s komplexní 3D animací.
.float-3d {
font-size: 5rem;
display: inline-block;
animation: float3dComplex 4s ease-in-out infinite;
filter: drop-shadow(0 20px 30px rgba(0,0,0,0.3));
}
@keyframes float3dComplex {
0%, 100% {
transform: translateY(0) rotateX(0deg) rotateY(0deg) rotateZ(0deg);
}
25% {
transform: translateY(-20px) rotateX(10deg) rotateY(10deg) rotateZ(5deg);
}
50% {
transform: translateY(-10px) rotateX(-5deg) rotateY(-10deg) rotateZ(-5deg);
}
75% {
transform: translateY(-25px) rotateX(5deg) rotateY(5deg) rotateZ(3deg);
}
}
🚪 9. 3D Door Reveal
Dveře se otevírají a odhalují skryté emoji za nimi.
.door-container {
perspective: 1000px;
width: 150px;
height: 150px;
}
.door {
width: 100%;
height: 100%;
position: relative;
transform-style: preserve-3d;
}
.door-front {
position: absolute;
width: 100%;
height: 100%;
background: linear-gradient(135deg, #FF6B6B, #FF8E53);
border-radius: 20px;
display: flex;
align-items: center;
justify-content: center;
font-size: 4rem;
backface-visibility: hidden;
transform-origin: left center;
transition: transform 0.6s ease;
cursor: pointer;
box-shadow: 0 10px 30px rgba(255, 107, 107, 0.4);
}
.door-back {
position: absolute;
width: 100%;
height: 100%;
background: linear-gradient(135deg, #10B981, #34D399);
border-radius: 20px;
display: flex;
align-items: center;
justify-content: center;
font-size: 4rem;
box-shadow: 0 10px 30px rgba(16, 185, 129, 0.4);
}
.door-container:hover .door-front {
transform: rotateY(-120deg);
}
📚 10. 3D Stack
Vrstvená hromádka emoji karet s perspektivním pohledem.
.stack-container {
perspective: 800px;
height: 200px;
display: flex;
align-items: center;
justify-content: center;
}
.stack {
position: relative;
transform-style: preserve-3d;
transform: rotateX(60deg) rotateZ(-30deg);
transition: transform 0.5s ease;
}
.stack:hover {
transform: rotateX(40deg) rotateZ(-20deg);
}
.stack-item {
position: absolute;
width: 80px;
height: 80px;
border-radius: 10px;
display: flex;
align-items: center;
justify-content: center;
font-size: 2.5rem;
box-shadow: 0 5px 15px rgba(0,0,0,0.2);
transition: transform 0.3s ease;
}
.stack-item:nth-child(1) { transform: translateZ(0px); background: #FFD700; }
.stack-item:nth-child(2) { transform: translateZ(20px); background: #FF9500; }
.stack-item:nth-child(3) { transform: translateZ(40px); background: #FF6B6B; }
.stack-item:nth-child(4) { transform: translateZ(60px); background: #A855F7; }
.stack-item:nth-child(5) { transform: translateZ(80px); background: #3B82F6; }
/* Rozložení při hoveru */
.stack:hover .stack-item:nth-child(1) { transform: translateZ(0px) translateX(-20px); }
.stack:hover .stack-item:nth-child(2) { transform: translateZ(30px) translateX(-10px); }
.stack:hover .stack-item:nth-child(3) { transform: translateZ(60px); }
.stack:hover .stack-item:nth-child(4) { transform: translateZ(90px) translateX(10px); }
.stack:hover .stack-item:nth-child(5) { transform: translateZ(120px) translateX(20px); }
📖 11. 3D Kniha
Realistická 3D kniha s obálkou, hřbetem a stránkami.
.book {
position: relative;
width: 120px;
height: 160px;
transform-style: preserve-3d;
transform: rotateY(-20deg);
transition: transform 0.5s ease;
cursor: pointer;
}
.book:hover {
transform: rotateY(-40deg);
}
.book-cover {
position: absolute;
width: 100%;
height: 100%;
background: linear-gradient(135deg, #8B5CF6, #6366F1);
border-radius: 0 10px 10px 0;
display: flex;
align-items: center;
justify-content: center;
font-size: 3rem;
transform-origin: left center;
transform: translateZ(15px);
box-shadow: 5px 5px 20px rgba(0,0,0,0.3);
}
.book-spine {
position: absolute;
width: 30px;
height: 100%;
background: linear-gradient(135deg, #7C3AED, #5B21B6);
transform: rotateY(-90deg) translateZ(0px) translateX(-15px);
}
.book-pages {
position: absolute;
width: 100%;
height: 96%;
top: 2%;
background: linear-gradient(90deg, #f5f5f5, #fff, #f5f5f5);
transform: translateZ(-1px);
border-radius: 0 2px 2px 0;
}
🌐 12. 3D Sphere
Emoji na kulové ploše s realistickým stínováním.
.sphere {
width: 150px;
height: 150px;
border-radius: 50%;
background: radial-gradient(
circle at 30% 30%,
#FFD700,
#FF9500 50%,
#CC7000 100%
);
display: flex;
align-items: center;
justify-content: center;
font-size: 4rem;
box-shadow:
inset -20px -20px 40px rgba(0,0,0,0.3),
inset 20px 20px 40px rgba(255,255,255,0.2),
0 20px 40px rgba(0,0,0,0.3);
animation: rotateSphere 6s ease-in-out infinite;
}
@keyframes rotateSphere {
0%, 100% { transform: rotateY(0deg) rotateX(0deg); }
50% { transform: rotateY(180deg) rotateX(10deg); }
}