复刻elementUI的步骤条Steps

摘要:UI小姐姐设计了步骤条,跟饿了么样式差距比较大,不想一层层改样式决定复刻一个steps步骤条组件。

最终展示如图:

在这里插入图片描述

实现布局

简单的布局不再赘述,主要考虑到步骤数量sList是可变的,每个步骤之间要一个虚线连接起来,调整页面大小的时候虚线也要动态伸缩。

1、首先简单的使用ul>li flex实现静态页面

  <ul class="outer-box flex">
    <li class="flex" :class="{ active: activeIdx >= index }" v-for="(item, index) in sList" :key="index">
      <div v-if="activeIdx <= index" class="serialNum flex">{{ index + 1 }}</div>
      <i v-else class="el-icon-success"></i>
      <div class="info">{{ item}}</div>
    </li>
  </ul>
 
 // style
 .flex {
  display: flex;
  align-items: center;
  justify-content: center;
}
.outer-box {
  height: 88px;
  background: #f0f6ff;
  padding: 0px 100px;
  margin: 0 auto;
  margin-bottom: 30px;

  .el-icon-success {
    font-size: 28px;
    color: #165dff;
    margin-right: 12px;
  }
 }

2、然后通过伪元素 ::after 实现步骤之间的虚线

  li {
    &::after {
      content: '';
      display: block;
      width: 200px;  // 当前虚线的宽度是固定的

      height: 0px;
      border: 1px dashed #848cac;
      margin: 0 40px;
    }
    &:last-child {
      &::after {
        content: '';
        display: block;
        flex: none;
        border: 0;
        width: 0;
        margin: 0;
      }
    }

3、通过.active 样式将已完成的步骤改变样式

  .active {
    .serialNum {
     // ...
    }
    .desc {
      // ...
    }
  }

4、应用 flex属性flex-basis、flex-shrink、flex-grow实现动态布局

  • flex-basis 分配多余空间之前,项目占据的主轴空间,浏览器根据这个属性,计算主轴是否有多余空间

默认值是auto ➡ 即项目本来大小
它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间

  • flex-grow 定义项目的放大比例,默认为0 ,即如果剩余空间,也不放大

如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。

  • flex-shrink 属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小

如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者0不缩小。

li {
    flex-basis: 50%;

    &::after {
      content: '';
      display: block;
      //width: 200px;
       flex: 1;        // 步骤之间的虚线宽度可伸缩

      height: 0px;
      border: 1px dashed #848cac;
      margin: 0 40px;
    }
    &:last-child { 
       flex-shrink: 0;
       flex-grow: 0;
       flex-basis: auto !important; // 最后一个步骤不伸缩,宽度为固定的自身的宽度
      &::after {
        content: '';
        display: block;
        flex: none;
        border: 0;
        width: 0;
        margin: 0;
      }
    }
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值