前言
不出意外,这次又是一个和彩色相关的效果。这次实现的是一个彩色Loading
,十分简单,话不多说,我们直接进入实现环节。
效果预览
效果预览如下。
CSS 部分
CSS
相关代码如下。
body {
margin: 0;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
background-color: black;
overflow: hidden;
}
.loader {
width: 10em;
height: 10em;
font-size: 30px;
box-sizing: border-box;
border-top: 0.3em solid hotpink;
border-radius: 50%;
position: relative;
animation: rotating 2s linear infinite;
}
body
margin: 0;
:清除了页面的默认外边距。height: 100vh;
:使得 body 的高度占据整个视口高度,确保整个加载动画在屏幕中垂直居中。display: flex;
:将 body 设置为一个 Flex 容器,这样可以使用弹性布局。align-items: center;
:在 Flex 容器中,使其子项在交叉轴(垂直方向)上居中对齐。justify-content: center;
:在 Flex 容器中,使其子项在主轴(水平方向)上居中对齐。background-color: black;
:设置页面的背景颜色为黑色。overflow: hidden;
:隐藏任何溢出的内容,确保不会出现滚动条。
.loader
width: 10em; height: 10em;
:定义了加载动画的宽度和高度。font-size: 30px;
:设置了加载动画内部文本的字体大小。box-sizing: border-box;
:设置盒模型为边框盒模型,确保边框的大小不会改变盒子的尺寸。border-top: 0.3em solid hotpink;
:定义了加载动画的顶部边框样式,创建了加载动画的旋转边框样式。border-radius: 50%;
:将加载动画的边框半径设置为50%,使其呈现为圆形。position: relative;
:将加载动画设置为相对定位,以便后代元素进行绝对定位。animation: rotating 2s linear infinite;
:定义了名为rotating
的动画,以线性模式,在2秒内无限循环旋转加载动画。
.loader::before,
.loader::after {
content: "";
position: absolute;
width: inherit;
height: inherit;
border-radius: 50%;
box-sizing: border-box;
top: -0.2em;
}
.loader::before {
border-top: 0.3em solid dodgerblue;
transform: rotate(120deg);
}
.loader::after {
border-top: 0.3em solid gold;
transform: rotate(240deg);
}
.loader::before 和 .loader::after
content: "";
:使伪元素内容为空,这样它们不会在文档流中占据空间,但是它们的样式影响布局构建。position: absolute;
:将伪元素设置为绝对定位,这样它们可以相对于.loader
进行定位。width: inherit; height: inherit;
:设置伪元素的宽度和高度与.loader
元素相同,保证大小一致。border-radius: 50%;
:将伪元素的边框半径设置为50%,使其呈现为圆形。box-sizing: border-box;
:设置盒模型为边框盒模型,确保边框的大小不会改变伪元素的尺寸。top: -0.2em;
:将伪元素向上移动一点,以使它们与.loader
元素的顶部对齐。
.loader::before
border-top: 0.3em solid dodgerblue;
:创建一个顶部边框,颜色为深蓝色,这是第一个旋转的边框。transform: rotate(120deg);
:对该伪元素应用rotate
转换,使其沿Z轴顺时针旋转120度。
.loader::after
border-top: 0.3em solid gold;
:创建另一个顶部边框,颜色为金黄色,这是第二个旋转的边框。transform: rotate(240deg);
:对该伪元素应用rotate
转换,使其沿Z轴顺时针旋转240度。
这些样式的组合产生了适合加载动画的两个旋转边框,从而形成了整个加载动画的视觉效果。
这段CSS代码定义了.loader
加载动画中使用的span
元素的样式以及旋转动画rotating
。
.loader span {
position: absolute;
color: white;
width: inherit;
height: inherit;
text-align: center;
line-height: 10em;
font-family: sans-serif;
animation: rotating 2s ease-in-out infinite reverse;
}
@keyframes rotating {
33% {
transform: rotate(0.33turn);
}
66% {
transform: rotate(0.66turn);
}
100% {
transform: rotate(1turn);
}
}
.loader span
position: absolute;
:将span
元素设置为绝对定位,以便相对于其最近的非静态父元素进行定位。color: white;
:设置文本颜色为白色。width: inherit; height: inherit;
:设置span
元素的宽度和高度等于.loader
元素,保证大小一致。text-align: center;
:使文本内容居中对齐。line-height: 10em;
:设置行高为10em,确保文本垂直居中。font-family: sans-serif;
:应用了无衬线字体。animation: rotating 2s ease-in-out infinite reverse;
:定义了名为rotating
的动画,该动画将在2秒内以"ease-in-out"的方式无限循环,并且在每次迭代中,动画方向相反。
@keyframes rotating
这部分定义了用于旋转动画的关键帧。
33%
:对应于旋转的1/3圈。66%
:对应于旋转的2/3圈。100%
:对应于完整的旋转1圈。
这样使得加载动画中的文本内容相对于其容器进行旋转动画,旋转角度分别为1/3、2/3和1圈。整个关键帧动画以ease-in-out的时间函数以及反向方向无限循环。
总结
以上就是整个效果的实现过程了,纯 CSS
实现,代码简单易懂。另外,感兴趣的小伙伴们还可以在现有基础上发散思维,比如增加点其他效果,或者更改颜色等等。关于该效果如果大家有更好的想法欢迎在评论区分享,互相学习。最后,完整代码在码上掘金里可以查看,如果有什么问题大家在评论区里讨论~