CSS100Day(18)-3D实现弹性元素
592 字
3 分钟
CSS100Day(18)-3D实现弹性元素
设计简介
实现一个弹性元素,必须要3D效果的正反面效果
-
知识点1:实现正反面效果
backface-visibility: hidden;必须元素有X轴旋转角度
rotateX: 0deg,这里父元素动画里面有rotateX;没有
transform-style: preserve-3d;则元素会被压缩为平面,可能会很木楞; -
知识点2:该效果实现原理是容器中间有个面板,3D进行rotateX翻转,正面为灰色(rotateX 0deg),背面为绿色(rotateX 180deg)
效果展示
实现代码和步骤
HTML部分
HTML部分如下,其中ellipse是中间承载正反面元素的容器,.grey和.green是球形
<div class="frame"> <div class="top"></div> <div class="bottom"></div> <div class="ellipse"> <div class="grey"></div> <div class="green"></div> </div></div>CSS部分
:root { --green: #37d493; --grey: #444; --speed: 5s; --e-width: 420px; --e-w-offset: -10px; --e-height: 400px;}
.frame { width: 400px; height: 400px; box-shadow: 1px 2px 10px 0 rgba(0, 0, 0, 0.3); border-radius: 2px; overflow: hidden; position: relative;}
.top,.bottom { position: absolute; width: 100%; height: 200px; top: 0; left: 0; background-color: var(--grey);}
.bottom { top: 50%; background-color: var(--green);}
.ellipse { position: absolute; z-index: 2; width: var(--e-width); height: var(--e-height); top: 0; left: var(--e-w-offset); transform-style: preserve-3d; animation: elastic var(--speed) ease-in-out infinite;
.grey, .green { position: absolute; width: var(--e-width); height: var(--e-height); backface-visibility: hidden; border-radius: 50%; }
.grey { background: var(--grey); transform: rotateX(0deg); }
.green { background: var(--green); transform: rotateX(180deg); }}
@keyframes elastic { 0% { transform: rotateX(90deg); } 15% { transform: rotateX(150deg); } 20% { transform: rotateX(50deg); } 25% { transform: rotateX(120deg); } 30% { transform: rotateX(70deg); } 35% { transform: rotateX(100deg); } 40% { transform: rotateX(83deg); } 45% { transform: rotateX(93deg); } 50% { transform: rotateX(90deg); }
65% { transform: rotateX(30deg); } 70% { transform: rotateX(130deg); } 75% { transform: rotateX(60deg); } 80% { transform: rotateX(110deg); } 85% { transform: rotateX(80deg); } 90% { transform: rotateX(97deg); } 95% { transform: rotateX(87deg); } 100% { transform: rotateX(90deg); }}分享给其他人
如果该文章对您有帮助,欢迎分享给其他人阅读!
复制链接
相关文章
推荐筛选
1
CSS100Day(14)-3D卡片翻转
设计灵感 一个3D卡片翻转原理理解
2
CSS100Day(17)-svg实现彭罗斯三角
设计灵感 三个svg实现彭罗斯三角
3
CSS100Day(21)-利用svg线段实现吃小球动画
设计灵感 利用svg线段实现吃小球动画
4
CSS100Day(19)-纯css实现滑动radio轮播图
设计灵感 纯css使用translateX实现轮播图
5
CSS100Day(9)-纯元素制作雨滴下到地面
设计灵感 利用animation的scaleX、scaleY制作雨滴下落到地面散开效果
随机文章
随机推荐