由于项目里需要手写步骤条 且实现指定状态边框虚线流动效果,故使用css去绘制步骤条连接箭头和绘制边框流动效果
效果:
1.绘制步骤条连接箭头
html
<ul class="process-list">
<div v-for="(process, index) in processes" :key="index" class="flex items-center item-box">
<li :class="active==process.id?'active':''">
<span class="process-name">{{ process.name }}</span>
</li>
<div class="arrow"></div>
</div>
</ul>
css
// 绘制连接线
.arrow {
display:inline-block;
height:2px;
width:80px;
background-color:#909399;
position:relative;
margin-left: 10px;
margin-right: 20px;
}
// 绘制箭头
.arrow:before {
position:absolute;
content:"";
width:0;
height:0;
border:6px solid transparent;
border-left:6px solid #909399;
left:100%;
top:50%;
transform: translateY(-50%);
}
2.绘制流动虚线边框
css
.process-item.active {
color: #000;
background-color: rgba(144, 147, 153, 0.2);
position: relative;
z-index: 2;
background: linear-gradient(90deg, #2671e2 50%, transparent 0) repeat-x,
linear-gradient(90deg, #2671e2 50%, transparent 0) repeat-x,
linear-gradient(0deg, #2671e2 50%, transparent 0) repeat-y,
linear-gradient(0deg, #2671e2 50%, transparent 0) repeat-y;
background-color: rgba(144, 147, 153, 0.2);
background-size: 8px 2px, 8px 2px, 2px 8px, 2px 8px;
background-position: 0 0, 0 100%, 0 0, 100% 0;
animation: linearGradientMove 0.3s infinite linear;
}
// 虚线动画
@keyframes linearGradientMove {
100% {
background-position: 8px 0, -8px 100%, 0 -8px, 100% 8px;
}
}