效果:
纯css
实现进度条,这里用到的核心属性为box-show
,box-show
可以控制元素的阴影,通过控制元素阴影的移动位置来实现进度条效果。
.box{ box-show : 0px 0px 0px 0px #ccc; }
box-show
有5
个参数
- 第一个参数: 控制元素阴影的左右位置
- 第二个参数: 控制元素阴影的上下位置
- 第三个参数: 控制元素阴影的模糊程度
- 第四个参数: 控制元素阴影的大小(放大&缩小)
- 第五个参数: 设置元素阴影的颜色
前四个参数部分可以省略,例如,box-show: 0px 0px 2px #ccc
,这一句就是设置2px
的模糊阴影,颜色为#ccc
。
下面是代码部分:
<div class="container"> <div class="shadow">Hover Me</div> </div>
/* 使用 scss */ $color: #e91e63; .container{ position: relative; overflow: hidden; width: 124px; height: 124px; margin: 0 auto; border-radius: 50%; } .shadow{ position: absolute; top: 50%; left: 50%; transform: translate(-50% , -50%); width: 120px; height: 120px; line-height: 120px; border-radius: 50%; color: #fff; font-size: 20px; cursor: pointer; box-shadow: 60px -60px 0 2px $color,-60px -60px 0 2px $color,-60px 60px 0 2px $color,60px 60px 0 2px $color; text-align: center; /* &表示嵌套的上一级对象 这里就指的是shadow border 动画名称 0.5s 持续时间 ease 慢速开始,然后加快,慢速结束 forwards 元素保留最后关键帧设置的样式 */ &:hover { animation: border 0.5s ease forwards; } } @keyframes border{ // 先hover隐藏(透明)右上方的线 0% { box-shadow: 60px -60px 0 2px $color, -60px -60px 0 2px $color, -60px 60px 0 2px $color, 60px 60px 0 2px $color, 0 0 0 2px transparent; } // 右上方的线变成白色 25% { box-shadow: 0 -125px 0 2px $color, -60px -60px 0 2px $color, -60px 60px 0 2px $color, 60px 60px 0 2px $color, 0 0 0 2px #fff; } // 左上方的线变成白色 50% { box-shadow: 0 -125px 0 2px $color, -125px 0px 0 2px $color, -60px 60px 0 2px $color, 60px 60px 0 2px $color, 0 0 0 2px #fff; } // 左下方的线变成白色 75% { box-shadow: 0 -125px 0 2px $color, -125px 0px 0 2px $color, 0px 125px 0 2px $color, 60px 60px 0 2px $color, 0 0 0 2px #fff; } // 右下方的线变成白色 100% { box-shadow: 0 -125px 0 2px $color, -125px 0px 0 2px $color, 0px 125px 0 2px $color, 120px 40px 0 2px $color, 0 0 0 2px #fff; } }
步骤解释:
这个动画实际上是用了两个box
,外层的box
比内层的box
大4px
,左右折算下来分别为左右2px
,所以可以看到有一条红色的边线
,这个边线其实就是内层box的阴影
,超出的部分被外层box
的overflow: hidden
隐藏了。
box-shadow: 60px -60px 0 2px $color,-60px -60px 0 2px $color,-60px 60px 0 2px $color,60px 60px 0 2px $color;
这里的box-show
用了4个阴影,每个阴影所在的位置分别是右上、左上、左下、右下
,各占一半,加起来就是一个圆形,然后在动画的每25%
移动对应阴影的位置,并且在当前阴影上加第5个阴影
,位置和模糊度都为0
,放大2px
,颜色为白色
,所以可以看到白色的线在移动,其实就是移动了盖住的阴影
,没有盖住
的地方以白色的阴影(线)展示
。
animation属性解释:
animation: border 0.5s ease forwards;
- border : 动画的名字
- 0.5s : 动画持续时间
- ease :指定从慢速开始,然后加快,然后缓慢结束的动画(默认)
- forwards :元素将保留由最后一个关键帧设置的样式值
关于动画的字段信息,请看w3school上关于动画的字段解释。