JSFiddle - React, Tailwind, and code Playground
by nokey
HTML
<div class="stage three-d">
stage
<div class="three-d-box preserve3d">
3D-Box
<div class="front transition">
Front
<!--每一个变换元素都是基于它父元素的坐标系-->
<div class="child">Child</div>
</div>
<div class="back transition">
Back
</div>
</div>
</div>
<div class="image-wrap">
<img src="http://blog-nokey.qiniudn.com/3d-coor-1.png" alt="3D-Coordinate" />
</div>
CSS
.stage{
margin: 30px auto;
width: 140px;
height: 100px;
background-color: #956129;
}
.transition{
-webkit-transition: all .3s ease-out;
-moz-transition: all .3s ease-out;
-ms-transition: all .3s ease-out;
-o-transition: all .3s ease-out;
transition: all .3s ease-out;
}
.three-d{
color: #fff;
text-align: center;
font-size: 14px;
-webkit-perspective: 200px;
-moz-perspective: 200px;
-ms-perspective: 200px;
perspective: 200px;
}
.preserve3d{
-webkit-transform-style: preserve-3d;
-moz-transform-style: preserve-3d;
-ms-transform-style: preserve-3d;
transform-style: preserve-3d;
}
.three-d-box{
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
line-height: 100px;
text-align: center;
color: #fff;
background-color: rgba(50,50,50,.6);
-webkit-transform: translatez(-50px);
-moz-transform: translatez(-50px);
-ms-transform: translatez(-50px);
-o-transform: translatez(-50px);
transform: translatez(-50px);
}
.front{
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
line-height: 100px;
text-align: center;
color: #fff;
background-color: rgba(50,100,100,.5);
-webkit-transform: rotatex(0deg) translatez(50px);
-moz-transform: rotatex(0deg) translatez(50px);
-ms-transform: rotatex(0deg) translatez(50px);
-o-transform: rotatex(0deg) translatez(50px);
transform: rotatex(0deg) translatez(50px);
/* perspective和preserve-3d都可以触发子元素child的3d表现,但是两者同时作用的时候又会有区别,我猜测:preserve-3d带有一个默认的perspective值 */
/* perspective: 200px; */
/* transform-style: preserve-3d; */
}
.child{
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
line-height: 2;
text-align: right;
background-color: rgba(255,255,255,.5);
-webkit-transform: rotatex(60deg);
-moz-transform: rotatex(60deg);
-ms-transform: rotatex(60deg);
-o-transform:...
JavaScript
var stage = document.querySelector('.stage'),
front = document.querySelector('.front'),
back = document.querySelector('.back');
stage.addEventListener('mouseenter', function(e){
console.log('Mouse Enter');
var e = e || window.event;
front.style.transform = 'rotatex(90deg) translatez(50px)';
back.style.transform = 'rotatex(0deg) translatez(50px)';
});
stage.addEventListener('mouseleave', function(e){
console.log('Mouse Leave');
var e = e || window.event;
front.style.transform = 'rotatex(0deg) translatez(50px)';
back.style.transform = 'rotatex(-90deg) translatez(50px)';
});