css3动画——立方体盒子
给大家分享一个简单好玩的css3动画案例。一个立方体盒子在页面动起来。
html 其中6个li代表正方体的六个面,并在每一个面上插入一张图片。完成的效果会更好看。
<ul> <li> <img src="./media/2.jpg" alt=""> </li> <li> <img src="./media/4.jpg" alt=""> </li> <li> <img src="./media/6.jpg" alt=""> </li> <li> <img src="./media/11.jpg" alt=""> </li> <li> <img src="./media/12.jpg" alt=""> </li> <li> <img src="./media/13.jpg" alt=""> </li> </ul>
css 设置每个面宽度和高度都一样。
我理解的正方体的原理:先让其六个面用定位叠在一起,子绝父相;前面沿着z轴正方向移动你设置的宽度的一半;后面反过来;左面沿着x轴负方向移动你设置的宽度的一半,沿着y轴旋转90度(正或者负我认为没差别,只要你不在面上写字);右面反过来;上面沿着y轴正方向移动你设置的宽度的一半,沿着x轴旋转90度;下面反过来。
* { margin: 0; padding: 0; } body { /* margin: 50px auto; */ padding: 200px 300px; } ul { position: relative; list-style: none; width: 300px; height: 300px; transform-style: preserve-3d; transform: rotate3d(1,1,0,-45deg); animation: rotate 6s linear infinite alternate; } ul > li { position: absolute; top: 0; left: 0; width: 300px; height: 300px; line-height: 300px; text-align: center; font-size: 40px; font-family: \'华文琥珀\'; } ul li img { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } li:first-child { background-color: skyblue; transform: translateZ(150px); } li:nth-child(2) { background-color: #222222; transform: translateZ(-150px) ; } li:nth-child(3) { background-color: yellow; transform: translateX(-150px) rotateY(90deg); } li:nth-child(4) { background-color: pink; transform: translateX(150px) rotateY(90deg); } li:nth-child(5) { background-color: green; transform: translateY(-150px) rotateX(90deg); } li:nth-child(6) { background-color: blue; transform: translateY(150px) rotateX(-90deg); }
动画规则,写好调用就行
@keyframes rotate { 0% { transform: rotateY(0deg) rotateX(0deg) rotateZ(0deg); } 20% { transform: translate(300px,300px) rotateY(30deg) rotateX(40deg) rotateZ(20deg); } 40% { transform: translate(200px,-150px) rotateY(-60deg) rotateX(-40deg) rotateZ(-20deg); } 60% { transform: translate(500px,200px) rotateY(145deg) rotateX(80deg) rotateZ(10deg); } 80% { transform: translate(-250px,-300px) rotateY(90deg) rotateX(60deg) rotateZ(-20deg); } 100% { transform: rotateY(135deg) rotateX(-45deg) rotateZ(30deg); } }