实现了一个加载器的动画效果,其中包括一个旋转的圆圈和一个渐变的背景色。旋转的圆圈使用了CSS的
animation
属性和@keyframes
规则来实现,而渐变的背景色则使用了CSS的background
属性和渐变色来实现。整个加载器的外观看起来像一个旋转的圆圈,旋转的速度和方向都比较平滑。
<section class="loader">
<div class="slider" style="--i:0">
</div>
<div class="slider" style="--i:1">
</div>
<div class="slider" style="--i:2">
</div>
<div class="slider" style="--i:3">
</div>
<div class="slider" style="--i:4">
</div>
</section>
body {
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
background-color: #e8e8e8;
}
.loader {
display: flex;
align-items: center;
justify-content: center;
flex-direction: row;
}
.slider {
overflow: hidden;
background-color: white;
margin: 0 15px;
height: 80px;
width: 20px;
border-radius: 30px;
box-shadow: 15px 15px 20px rgba(0, 0, 0, 0.1), -15px -15px 30px #fff,
inset -5px -5px 10px rgba(0, 0, 255, 0.1),
inset 5px 5px 10px rgba(0, 0, 0, 0.1);
position: relative;
}
.slider::before {
content: "";
position: absolute;
top: 0;
left: 0;
height: 20px;
width: 20px;
border-radius: 100%;
box-shadow: inset 0px 0px 0px rgba(0, 0, 0, 0.3), 0px 420px 0 400px #2697f3,
inset 0px 0px 0px rgba(0, 0, 0, 0.1);
animation: animate_2 2.5s ease-in-out infinite;
animation-delay: calc(-0.5s * var(--i));
}
@keyframes animate_2 {
0% {
transform: translateY(250px);
filter: hue-rotate(0deg);
}
50% {
transform: translateY(0);
}
100% {
transform: translateY(250px);
filter: hue-rotate(180deg);
}
}
body {
height: 100vh; /* 设置body高度为视口高度 */
display: flex; /* 设置body元素为flex布局 */
justify-content: center; /* 设置flex容器中内容的水平居中对齐 */
align-items: center; /* 设置flex容器中内容的垂直居中对齐 */
background-color: #e8e8e8; /* 设置背景颜色为灰色 */
}
这段代码设置了整个页面的样式,包括高度、居中对齐方式、背景颜色等。
.loader {
display: flex; /* 设置loader元素为flex布局 */
align-items: center; /* 设置flex容器中内容的垂直居中对齐 */
justify-content: center; /* 设置flex容器中内容的水平居中对齐 */
flex-direction: row; /* 设置flex容器的主轴方向为row */
}
这段代码设置了loader元素的样式,包括居中对齐方式、主轴方向等。
.slider {
overflow: hidden; /* 设置slider元素的溢出部分隐藏 */
background-color: white; /* 设置slider元素的背景颜色为白色 */
margin: 0 15px; /* 设置slider元素的左右外边距为15px */
height: 80px; /* 设置slider元素的高度为80px */
width: 20px; /* 设置slider元素的宽度为20px */
border-radius: 30px; /* 设置slider元素的圆角半径为30px */
box-shadow: 15px 15px 20px rgba(0, 0, 0, 0.1), -15px -15px 30px #fff, /* 设置slider元素的阴影效果 */
inset -5px -5px 10px rgba(0, 0, 255, 0.1), /* 设置slider元素内部阴影效果 */
inset 5px 5px 10px rgba(0, 0, 0, 0.1);
position: relative; /* 设置slider元素的定位方式为相对定位 */
}
这段代码设置了slider元素的样式,包括溢出部分隐藏、背景颜色、外边距、高度、宽度、圆角半径、阴影效果、内部阴影效果等。
.slider::before {
content: ""; /* 设置伪元素的内容为空 */
position: absolute; /* 设置伪元素的定位方式为绝对定位 */
top: 0; /* 设置伪元素的顶部边距为0 */
left: 0; /* 设置伪元素的左侧边距为0 */
height: 20px; /* 设置伪元素的高度为20px */
width: 20px; /* 设置伪元素的宽度为20px */
border-radius: 100%; /* 设置伪元素的圆角半径为100% */
box-shadow: inset 0px 0px 0px rgba(0, 0, 0, 0.3), /* 设置伪元素的阴影效果 */
0px 420px 0 400px #2697f3, /* 设置伪元素的第二层阴影效果 */
inset 0px 0px 0px rgba(0, 0, 0, 0.1);
animation: animate_2 2.5s ease-in-out infinite; /* 设置伪元素的动画效果 */
animation-delay: calc(-0.5s * var(--i)); /* 设置伪元素的动画延迟时间 */
}
这段代码设置了伪元素的样式,包括内容、定位方式、位置、高度、宽度、圆角半径、阴影效果、动画效果、动画延迟时间等。
@keyframes animate_2 {
0% {
transform: translateY(250px); /* 在动画开始时,将伪元素向下移动250px */
filter: hue-rotate(0deg); /* 在动画开始时,将伪元素的色相旋转设置为0度 */
}
50% {
transform: translateY(0); /* 在动画进行时,将伪元素移动回原位 */
}
100% {
transform: translateY(250px); /* 在动画结束时,将伪元素向下移动250px */
filter: hue-rotate(180deg); /* 在动画结束时,将伪元素的色相旋转设置为180度 */
}
}
这段代码定义了一个名为animate_2
的动画效果,使用了CSS的@keyframes
规则。在这个动画中,伪元素会从上方移动到下方,并在移动过程中逐渐变暗。具体来说,0%
表示动画的开始,50%
表示动画的进行,100%
表示动画的结束。在0%
时,伪元素会向下移动250px,并将色相旋转设置为0度;在50%
时,伪元素会回到原位;在100%
时,伪元素会向下移动250px,并将色相旋转设置为180度。这个动画效果会一直循环下去,直到被停止或者页面被卸载。