长方形虚线边框的转动效果
很多时候,我们需要实现虚线边框转动显示的效果,如果是圆形的边框就很好办了,我们可以直接用 transform 的 rotate 属性对元素进行旋转就可以了,例如下面这个
边框元素所对应的样式是这样
css代码:
div.border { width: 120px; height: 120px; box-sizing: border-box; background: none; border: 1px dashed #fff; animation: circle 80s linear infinite; border-radius: 50%; } @keyframes circle { 0% { transform: rotate(0) } 100% { transform: rotate(360deg) } }
这个实现起来也很简单,但如果遇到不是圆形的div呢? rotate 属性就无法实现了,例如,这里有个圆角的长方形边框也需要实现同样的效果,使用 rotate 属性后的效果是这样的
跟我们预想中的效果差别很大,直接把整个 div 进行旋转了,其实我们只需要边框进行滚动,类似于这种运输带的效果:
因为css无法控制虚线的间隔和位移,如果要实现这样非圆形的边框滚动效果,我们只能用svg图形来实现了
首先我吗需要通过svg定义一个带圆角的长方形
svg代码:
<svg class="svg-rect" width="488" height="68" fill="none" xmlns=" <rect x="1" y="1" width="486" height="66" rx="34" stroke="#fff"/> </svg>
这里需要一个长方形,所以就用到了 rect 元素,同时两边也需要圆角的效果,rx设置为34的圆角半径。具体的宽高,圆角可以根据实际情况进行调整。
css代码:
svg.svg-rect { stroke-dasharray: 2,2; stroke-dashoffset: 1; }
这时候我们就可以得到跟虚线边框一样效果的svg图形了,我们只需要通过css对这个svg添加动画效果就可以了
css代码:
svg.svg-rect { stroke-dasharray: 2,2; stroke-dashoffset: 1; animation: svg-circle 80s linear infinite; } @keyframes svg-circle { 0% { stroke-dashoffset: 100%; } 100% { stroke-dashoffset: 0%; } }
最终得到的效果是这样的
用户登录
还没有账号?
立即注册