效果演示
这段代码通过HTML和CSS创建了一个带有动画效果的小球在条状物上移动的场景,小球和条状物都有各自的动画,通过CSS动画和伪元素实现了较为生动的效果。
HTML
<div class="bar">
<div class="ball"></div>
</div>
- bar:外层容器,代表一个条状物,可能是某种轨道或背景元素。
- ball:小球元素,放置在条状物内部。
CSS
.ball {
position: relative;
bottom: 50px;
left: calc(100% - 20px);
width: 50px;
height: 50px;
background: #fff;
border-radius: 50%;
animation: ball-move8234 3s ease-in-out 1s infinite alternate;
}
.ball::after {
position: absolute;
content: '';
top: 25px;
right: 5px;
width: 5px;
height: 5px;
background: #000;
border-radius: 50%;
}
.bar {
width: 200px;
height: 12.5px;
background: #FFDAAF;
border-radius: 30px;
transform: rotate(-15deg);
animation: up-down6123 3s ease-in-out 1s infinite alternate;
}
@keyframes up-down6123 {
from {
transform: rotate(-15deg);
}
to {
transform: rotate(15deg);
}
}
@keyframes ball-move8234 {
from {
left: calc(100% - 40px);
transform: rotate(360deg);
}
to {
left: calc(0% - 20px);
transform: rotate(0deg);
}
}
- .ball类:position: relative;设置小球相对定位,以便进行进一步的位置调整。bottom: 50px;将小球从其正常位置向下移动 50 像素。left: calc(100% - 20px);将小球放置在距离父容器右侧边缘 20 像素的位置。width: 50px; height: 50px;设置小球的大小为 50 像素宽和高。background: #fff;设置小球的背景颜色为白色。border-radius: 50%;使小球成为圆形。animation: ball-move8234 3s ease-in-out 1s infinite alternate;为小球应用名为ball-move8234的动画,动画持续时间为 3 秒,具有缓入缓出效果,延迟 1 秒开始,无限循环且交替播放不同方向。
- .ball::after伪元素:在小球上创建一个黑色的小圆点,用于装饰或模拟某种特征。position: absolute;绝对定位在小球内部。content: ‘’;用于创建伪元素,不包含实际内容。top: 25px; right: 5px;设置伪元素在小球内部的位置。width: 5px; height: 5px;设置伪元素的大小为 5 像素宽和高。background: #000;设置伪元素的背景颜色为黑色。border-radius: 50%;使伪元素成为圆形。
- .bar类:width: 200px; height: 12.5px;设置条状物的宽度为 200 像素,高度为 12.5 像素。background: #FFDAAF;设置条状物的背景颜色为浅橙色。border-radius: 30px;使条状物的两端具有一定的圆角。transform: rotate(-15deg);将条状物逆时针旋转 15 度。animation: up-down6123 3s ease-in-out 1s infinite alternate;为条状物应用名为up-down6123的动画,动画持续时间为 3 秒,具有缓入缓出效果,延迟 1 秒开始,无限循环且交替播放不同方向。
- @keyframes up-down6123:定义条状物的动画,从初始状态(逆时针旋转 15 度)到最终状态(顺时针旋转 15 度)进行过渡。
- @keyframes ball-move8234:定义小球的动画,从初始位置(距离父容器右侧边缘 40 像素且旋转 360 度)到最终位置(距离父容器左侧边缘 20 像素且不旋转)进行过渡。