CSS100Day(18)-3D实现弹性元素

592 字
3 分钟
CSS100Day(18)-3D实现弹性元素

设计简介#

实现一个弹性元素,必须要3D效果的正反面效果

  1. 知识点1:实现正反面效果 backface-visibility: hidden ;

    必须元素有X轴旋转角度 rotateX: 0deg,这里父元素动画里面有 rotateX;

    没有 transform-style: preserve-3d; 则元素会被压缩为平面,可能会很木楞;

  2. 知识点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);
}
}
分享给其他人
如果该文章对您有帮助,欢迎分享给其他人阅读!
复制链接

评论区

图片
犟哟
Hello, I'm Juyial.
公告
欢迎来到我的博客,在这里可以一起进步,一起学习!2026年起航!
分类
站点统计
文章
19
分类
1
标签
3
总字数
35,134
运行时长
0
最后活动
0 天前

目录