参考antd steps实现一个步骤条

在一个旧项目中写一个步骤条功能,类似于antd。
其实我觉得步骤条最难处理的地方在于中间的横线,由于内容的长度不稳定性,所以要动态实现。

html

1679022955052.jpg

实现后的效果图

image.png

css

说一下重点吧
1,横线是用伪类after实现的,因为是展示在右侧,所以定位用的是left: 100%
2,li需要设置flex宽度flex:1(懂的应该知道是为了保持宽度一致),li:last-child为了右对齐,要设置flex:none;横线和原型图标之间的距离,就靠li的paddingleft值 和 overflow-x:hidden来限制了,还有span的paddingright值
3,步骤条一般分为3个状态,已实现,当前,未实现;li默认的样式可以使用已实现的状态,当前的可以使用active等标记;未实现的可以使用波浪(~)选择器;
4,我发现antd步骤条横线的宽度可以理解为无限宽,然后后一个横线会覆盖上一个,直到最后一个,要使用透明色覆盖;

// 步骤条(使用less设置了一些变量,自行修改)
.steps {
    display: flex;
    .max-width(100%);
    padding: 0 15px;
    margin: 0 auto;
    overflow-x: hidden;
    li {
        flex: 1;
        position: relative;
        z-index: 1;
        overflow-x: hidden;
        label {
            display: inline-block;
            .border-style;
            border-color: @colorTheme;
            width: 30px;
            height: 30px;
            text-align: center;
            line-height: 30px;
            .border-radius(50%);
            color: @colorTheme;
            margin-right: 10px;
        }
        span {
            display: inline-block;
            font-size: @sizeSecondTitle;
            padding: 0 15px 0 0;
            line-height: 24px;
            position: relative;
            &::before {
                top: 13px;
                content: '';
                width: 9999px;
                height: 1px;
                position: absolute;
                left: 100%;
                background-color: @colorTheme;
            }
        }
        &.active {
            label {
                background-color: @colorTheme;
                color: #fff;
            }
            span {
                font-weight: bold;
                color: #000;
                &::before {
                    background-color: @fontColorDisable;
                }
            }
            ~ li {
                label {
                    border-color: @fontColorDisable;
                    color: @fontColorDisable;
                }
                span {
                    color: @fontColorDisable;
                    &::before {
                        background-color: @fontColorDisable;
                    }
                }
            }
        }
        + li {
            padding-left: 15px;
        }
        &:last-child {
            flex: none;
            span {
                padding-right: 0;
                &::before {
                    background-color: transparent !important;
                }
            }
        }
    }
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • css相关 1. 万能居中 1.margin: 0 auto;水平 2.text-align: center;水平...
    chaocc阅读 4,617评论 0 2
  • 1. 万能居中 1.margin: 0 auto;水平2.text-align: center;水平3.行高,垂直...
    年轻人多学点阅读 2,817评论 0 1
  • https://www.jianshu.com/p/769266edbd38 前言 经过艰苦卓绝的面试历程,终于拿...
    Clover园阅读 1,547评论 0 0
  • 自我介绍 首先简单自我介绍一下,我在社区的 id 一般是 paranoidjk,我曾经参与过的一些项目有:移动端开...
    自画象阅读 8,677评论 0 2
  • 常用 注意区分大小写 带空格的字体记得加引号 使用背景图的时候最好指定背景色,这样至少能保证背景图加载出现问题时文...
    涛涛抄书阅读 3,184评论 0 0