自定义vant ui steps组件效果实现
记录个问题,当作笔记吧:因为vue项目的移动端vant ui 的step组件跟ui设计图有差别,研究了半天还是没法使用step组件,只能手动设置一个
先上效果图和代码:

(1)HTML部分
<div class="rxlc-step">
<div class="rxlc-content">
<div class="content-list" v-for="(item, index) in rxlc_content" :key="index">
<div class="content-list-lt">
<div class="list-icon-title">
<div class="lt-icon">
<div class="lt-icon-box"></div>
</div>
<div class="lt-text">{{item.title}}</div>
</div>
<div class="white-line"></div>
</div>
<div class="content-list-rt">
<div class="list-rt-content">{{item.text}}</div>
<div class="cat-line"></div>
</div>
</div>
</div>
</div>
(2)CSS部分
.rxlc-step {
width: 100%;
padding: 16px 18px 20px 17px;
box-sizing: border-box;
.rxlc-content {
width: 100%;
box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.15);
border-radius: 10px;
position: relative;
.content-list {
width: 100%;
display: table;
.content-list-lt {
display: table-cell;
background: #3db8ba;
padding-left: 10px;
position: relative;
color: #ffffff;
font-family: Noto Sans S Chinese Medium;
font-size: 16px;
.list-icon-title {
display: table;
.lt-icon {
display: table-cell;
.lt-icon-box {
width: 5px;
height: 5px;
border-radius: 3px;
background: #ffffff;
margin-right: 7px;
z-index:;
}
}
.lt-text {
display: table-cell;
padding-right: 10px;
font-weight:;
font-size: 16px;
line-height: 18px;
}
}
.white-line {
width: 1px;
height: 100%;
position: absolute;
top: 34px;
left: 12px;
background: #ffffff;
opacity: 0.2;
z-index:;
}
}
.content-list-rt {
width: 70%;
display: table-cell;
.list-rt-content {
padding: 22px 14px 0px 14px;
color: #333333;
font-size: 14.5px;
line-height: 18px;
}
.cat-line {
margin-left: 24px;
margin-top: 20px;
border-bottom: 1px solid #efefef;
}
}
&:first-child {
.content-list-lt {
border-radius: 10px 0 0 0;
}
}
&:last-child {
.content-list-lt {
border-radius: 0 0 0 10px;
.white-line {
width: 0px;
}
}
.content-list-rt {
.cat-line {
margin-left: 10px;
margin-top: 20px;
border-bottom: none;
}
}
}
}
}
}
(3)JS部分
rxlc_content: [
{
title: '注册',
text: '家长手机号注册账号'
},
{
title: '新生信息采集',
text: '报名信息采集,包括新生基础信息、监护人信息和个人相关图片资料上传;提交资料进入审核阶段'
},
{
title: '网上审核',
text: '网上报名资料提交至区教育局或下属单位进行审核确认'
},
{
title: '现场审核',
text: '网上报名资料审核通过,根据现场审核要求携带资料到指定地点审核确认'
},
{
title: '录取',
text: '新生现场审核通过,报读 学校发布录取通知。'
}
]
说一下原理吧,其实我刚开始的时候想的是先给每一行的div(类名content-list)设置用display:table布局,先将标题和内容放在两个display:table-cell的子div(类名content-list-lt和content-list-rt)中,然后用绝对定位将白线定位到白色圆形的中心位置,后面发现白线位置好控制,但是会出现一个问题,就是因为每一行的高度是由内容的长度撑开的,白线的总长度就很难控制了,没办法,只能请教鹏哥了,他叫我参照下vant 的steps的样式,打开F12查看了下,发现了些好玩的东西,如下:


通过上面的两张图可以看到,vant的steps组件的线条也是利用绝对定位来实现的,只是它的定位是相对于每个类名为vant-step的div(每一行内容所在的div),且它的高度为每一行内容的高度,即height:100%设置,这样各行的白色线条就连成一条竖直的线,那么步骤条的长度问题也得到解决。
需要注意的是我们最后一行的内容的白色线条是不需要展示出来的,因为实际我们要的线条段数为内容行数减1,所以最后一个div的线条的高度必须隐藏掉,所以给最后一个div的线条设置了width:0,其实设置height:0也是可以的。
这样我们将之前的代码改动一下,把白色线条放在每一行的div(类名content-list)下的左边子div(即类名content-list-lt)中,让线条相对这个类名为content-list-lt的div进行绝对定位,就能实现steps组件效果了
自定义vant ui steps组件效果实现的更多相关文章
- React Native实战系列教程之自定义原生UI组件和VideoView视频播放器开发
React Native实战系列教程之自定义原生UI组件和VideoView视频播放器开发 2016/09/23 | React Native技术文章 | Sky丶清| 4 条评论 | 1 ...
- vue 专题 vue2.0各大前端移动端ui框架组件展示
Vue 专题 一个数据驱动的组件,为现代化的 Web 界面而生.具有可扩展的数据绑定机制,原生对象即模型,简洁明了的 API 组件化 UI 构建 多个轻量库搭配使用 请访问链接: https://ww ...
- 自定义view实现水波纹效果
水波纹效果: 1.标准正余弦水波纹: 2.非标准圆形液柱水波纹: 虽说都是水波纹,但两者在实现上差异是比较大的,一个通过正余弦函数模拟水波纹效果,另外一个会运用到图像的混合模式(PorterDuffX ...
- iOS 端的 UI 聊天组件ChatKit及代码实现
ChatKit 是一个免费且开源的 UI 聊天组件,自带云服务器,自带推送,支持消息漫游,消息永久存储.底层聊天服务基于LeanCloud(原名 AVOS ) 的 IM 实时通信服务「LeanMess ...
- Combo( 自定义下拉框) 组件
本节课重点了解 EasyUI 中 Combo(自定义下拉框)组件的使用方法,这个组件依赖于ValidateBox(验证框)组件 一. 加载方式自定义下拉框不能通过标签的方式进行创建.<input ...
- 第17讲- UI常用组件之ImageView图片浏览
第17讲 UI常用组件之ImageView图片浏览 二.图片浏览ImageView ImageView就是一个用来显示图片的视图: ImageView常见属性 常见属性 对应方法 说明 android ...
- VSTO之旅系列(三):自定义Excel UI
原文:VSTO之旅系列(三):自定义Excel UI 本专题概要 引言 自定义任务窗体(Task Pane) 自定义选项卡,即Ribbon 自定义上下文菜单 小结 引言 在上一个专题中为大家介绍如何创 ...
- Vue.use自定义自己的全局组件
通常我们在vue里面使用别人开发的组件,第一步就是install,第二步在main.js里面引入,第三步Vue.use这个组件.今天我简单的也来use一个自己的组件. 这里我用的webpack-sim ...
- [转]vue Element UI走马灯组件重写
https://blog.csdn.net/u013750989/article/details/82885482 1.element ui走马灯组件 -- carousel分析一波源代码:carou ...
随机推荐
- [心得]編寫Linux kernel modules時惱人的Makefile
在一台機器上寫好這樣的Makefile用以編譯modules obj-m:=hello.o CURRENT_PATH:=$(shell pwd) VERSION_NUM:=$(shell uname ...
- 阿里云 消息队列mq
使用阿里云消息队列 控制台地址:http://ons.console.aliyun.com/#/home/topic Demo: 支付消息mq工厂类: public class DfacePayCon ...
- 点击td对同行的其他td进行操作
假设有这样的一段tr: <tr> <td><input type="checkbox" name="item" class=&qu ...
- java 多线程 线程安全及非线程安全的集合对象
一.概念: 线程安全:就是当多线程访问时,采用了加锁的机制:即当一个线程访问该类的某个数据时,会对这个数据进行保护,其他线程不能对其访问,直到该线程读取完之后,其他线程才可以使用.防止出现数据不一致或 ...
- OpenCV/Python/dlib眨眼检测
今天我们来使用面部标志和OpenCV 检测和计算视频流中的眨眼次数. 为了构建我们的眨眼检测器,我们将计算一个称为眼睛纵横比(EAR)的指标,由Soukupová和Čech在其2016年的论文&quo ...
- RxJava总结(原)
1.RxJava的作用 RxJava is a Java VM implementation of Reactive Extensions: a library for composing async ...
- 使用nano编辑器进行查找和替换
笔者自己常用的是vim.这里nano的使用场景就是刚安装好Ubuntu系统,想要替换更新源,这时候还没装上vim.所以,学一下如何用nano查找和替换,可以解决这个小问题. 首先sudo nano / ...
- 记一次pycharm和vscode因网络问题插件下载失败的问题
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connec ...
- 【Flutter学习】页面跳转之路由及导航
一,概述 移动应用通常通过成为‘屏幕’或者‘页面’的全屏元素显示其内容,在Flutter中,这些元素统称为路由,它们由导航器Navigator组件管理.导航器管理一组路由Route对象,并提供了管理堆 ...
- 【2019 Multi-University Training Contest 1】
01:https://www.cnblogs.com/myx12345/p/11543105.html 02:https://www.cnblogs.com/myx12345/p/11439320.h ...