【CSS】770- 多层嵌套的CSS 3D动画技术详解
class='container'>
<div class='frame'>
<div class='door'>div>
div>
</div>
class='container'>
<div class='frame'>
<div class='door door--open'>div>
div>
</div>
.door--open {
transform-origin: 0 0 /*whatever y value you wish*/;
transform: rotateY(-45deg);
}
class='container'>
<div class='frame frame--realistic'>
<div class='door door--open'>div>
div>
</div>
.frame--realistic {
perspective: 20em;
}
.door--ani {
transform-origin: 0 0;
animation: doorani 1.3s ease-in-out infinite alternate;
}
@keyframes doorani {
from { transform: rotateY(-43deg); }
to { transform: rotateY(43deg); }
}
class='container container--realistic'>
<div class='frame frame--ani'>
<div class='door door--ani'>div>
div>
</div>
.container--realistic {
perspective: 20em;
}
.frame--ani {
animation: frameani 2s ease-in-out infinite alternate;
}
@keyframes frameani {
from { transform: rotateY(-30deg); }
to { transform: rotateY(30deg); }
}
class='container container--realistic'>
<div class='cube'>
<div class='face'>div>
<div class='face'>div>
<div class='face'>div>
<div class='face'>div>
div>
</div>
.cube {
position: relative;
width: 5em; height: 5em;
transform-style: preserve-3d;
transform: rotateY(30deg) rotateX(10deg);
}
.face {
position: absolute;
width: 100%; height: 100%;
}
.face:nth-child(1) {
transform: /*rotateY(0deg)*/ translateZ(2.5em /* half the side length, 5em in this case */);
}
.face:nth-child(2) {
transform: rotateY( 90deg) translateZ(2.5em);
}
.face:nth-child(3) {
transform: rotateY(180deg) translateZ(2.5em);
}
.face:nth-child(4) {
transform: rotateY(270deg) translateZ(2.5em);
}
.cube--ie {
perspective: 20em;
transform: none;
}
.face--ie:nth-child(1) {
transform: rotateY(30deg) rotateX(10deg)
translateZ(2.5em);
}
.face--ie:nth-child(2) {
transform: rotateY(30deg) rotateX(10deg)
rotateY( 90deg) translateZ(2.5em);
}
.face--ie:nth-child(3) {
transform: rotateY(30deg) rotateX(10deg)
rotateY(180deg) translateZ(2.5em);
}
.face--ie:nth-child(4) {
transform: rotateY(30deg) rotateX(10deg)
rotateY(270deg) translateZ(2.5em);
}
.cube--ani {
animation: rot 4s linear infinite;
}
@keyframes rot {
to { transform: rotateY(-330deg) rotateX(370deg); }
}
.cube--ie {
animation: none;
}
.cube--ani .face--ie:nth-child(1) {
animation: rot1 4s linear infinite;
}
@keyframes rot1 {
to {
transform: rotateY(-330deg) rotateX(370deg)
translateZ(2.5em);
}
}
.cube--ani .face--ie:nth-child(2) {
animation: rot2 4s linear infinite;
}
@keyframes rot2 {
to {
transform: rotateY(-330deg) rotateX(370deg)
rotateY(90deg) translateZ(2.5em);
}
}
.cube--ani .face--ie:nth-child(3) {
animation: rot3 4s linear infinite;
}
@keyframes rot3 {
to {
transform: rotateY(-330deg) rotateX(370deg)
rotateY(180deg) translateZ(2.5em);
}
}
.cube--ani .face--ie:nth-child(4) {
animation: rot4 4s linear infinite;
}
@keyframes rot4 {
to {
transform: rotateY(-330deg) rotateX(370deg)
rotateY(270deg) translateZ(2.5em);
}
}
回复“加群”与大佬们一起交流学习~
点击“阅读原文”查看 80+ 篇原创文章
评论