使用css实现时间线布局(TimeLine)

news2024/11/25 22:56:20

前言

在使用uni-app开发微信小程序过程中,遇到了时间轴布局,由于每项的内容高度不一致,使用uniapp自带的扩展组件uni-steps,样式布局无法对齐竖线,于是自己造轮子,完成特殊的布局。显示效果如下:

 

 

实现

实现这种布局,有两种实现方式,

第一种:使用css伪类实现;

第二种:使用纯css实现。

具体演示代码

第一种方式:使用css伪类实现。效果如图一

1、样式文件

<style scoped lang="scss">
.timeline{
	margin: 64rpx auto 0rpx auto;
	position: relative;
	width: 100%;
	 
	
	&:before{
		background-color: #6DD1C9;
		content: '';
		margin-left: -1rpx;
		position: absolute;
		top: 0rpx;
		left: 14rpx;
		width: 2rpx;
		bottom: -250rpx;
		height: calc(100% - 47rpx);
	}
	
	.timeline-event{
		 position: relative;
	}
	
	.timeline-event-copy {
		padding: 32rpx 24rpx;
		position: relative;
		top: -47rpx;
		left: 42rpx;
		width: 536rpx;
		background-color: #FFFFFF;
		margin-bottom: 20rpx;
		border-radius: 20rpx;
	}
	
	.timeline-event-icon{
		background-color: #ffffff00;
		outline: 0rpx solid #FF0000;
		display: block;
		margin: 0rpx 0rpx 0rpx 0rpx;
		position: absolute;
		top: 0rpx;
		left: 0rpx;
		width: 28rpx;
		height: 28rpx;
	}
	
	.timeline-event-thumbnail{
		color: #38254D;
		font-weight: bold;
		font-size: 30rpx;

		display: inline-flex;
		width: 100%;
		margin-bottom: 0rpx;
		align-items: center;
		justify-content: space-between;
	}
	
	.timeline-event-content{
		display: flex;
		flex-direction: column;
		margin-top: 20rpx;
		margin-bottom: 20rpx;
		
		text{
			font-size: 26rpx;
			color: #574966;
			line-height: 40rpx;
		}
		
		.btn{
			align-self: flex-end;
			font-size: 26rpx;
			color: #F06245;
			line-height: 60rpx;
			text-align: center;
			
			margin-top: -40rpx;
			width: 140rpx;
			height: 60rpx;
			border: 1rpx solid #F06245;
			border-radius: 30rpx;
		}
	}
}
</style>

2、布局文件

<view class="timeline">
	<block v-for="(item,index) in 4" :key="index">
		<view class="timeline-event">
			<image class="timeline-event-icon" src="/static/record/table.png"></image>
			<view class="timeline-event-copy">
				<view class="timeline-event-thumbnail">4月22日(周二) 18:00-19:00</view>
				<view class="timeline-event-content">
					<text>教练:David Beckham</text>
					<text>地点:西沙群岛 · 永兴岛</text>
					<text>教室:A教室</text>
					
					<view v-if="index==0" class="btn">取消请假</view>
				</view>
			</view>
		</view>
	</block>
</view>

第二种方式:使用纯css实现。效果如图二

1、样式文件

<style lang="scss">
.timeline-list{
    margin: 32rpx;
    font-size: 28rpx;
    list-style: none;
}
.timeline-item:last-child .timeline-item_tail {
    display: none;
}
.timeline-item{
    position: relative;
    padding-bottom: 20rpx;
}
.timeline-item_tail{
    position: absolute;
    left: 4rpx;
    height: 100%;
    border-left: 2rpx solid rgba(109, 209, 201, 0.3);
}
 
.timeline-item_node{
    position: absolute;
    background-color: #FFFFFF;
    border-radius: 50%;
    display: flex;
    justify-content: center;
    align-items: center;
    left: -12rpx;
    width: 22rpx;
    height: 22rpx;
    background: #fff;
    border:6rpx solid #6DD1C9;
}
.timeline-item_wrapper{
    position: relative;
	padding: 32rpx 24rpx;
	left: 42rpx;
    top: -32rpx;
	background-color: #ffffff;
	border-radius: 20rpx;
	width: 600rpx;
}
.timeline-item_timestamp{
    color: #38254D;
    font-weight: bold;
    font-size: 30rpx;    
	line-height: 32rpx;
}
.timeline-item_content{
	display: flex;
	flex-direction: column;
	margin-top: 20rpx;
	margin-bottom: 20rpx;
	
	text{
		font-size: 26rpx;
		color: #574966;
		line-height: 40rpx;
	}
	
	.btn{
		align-self: flex-end;
		font-size: 26rpx;
		color: #F06245;
		line-height: 60rpx;
		text-align: center;
		
		margin-top: -40rpx;
		width: 140rpx;
		height: 60rpx;
		border: 1rpx solid #F06245;
		border-radius: 30rpx;
	}
}
</style>

2、布局文件

<view class="timeline-list">
	<block  v-for="(item, index) in 3" :key="index">
		<view class="timeline-item">
			<view class="timeline-item_tail"></view>
			<view class="timeline-item_node"></view>
			<view class="timeline-item_wrapper">
				<view class="timeline-item_timestamp">4月22日(周二) 18:00-19:00</view>
				<view class="timeline-item_content">
					<text>教练:David Beckham</text>
					<text>地点:西沙群岛 · 永兴岛</text>
					<text>教室:A教室</text>
					
					<view v-if="index==0" class="btn">取消请假</view>
				</view>
				
			</view>
		</view>
	</block>
</view>

ps:使用方式1,无法隐藏最后一项的时间线,而第二种方式,可以随时控制每一项的时间线。个人推荐第二种方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/876273.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[保研/考研机试] KY85 二叉树 北京大学复试上机题 C++实现

题目链接&#xff1a; 二叉树https://www.nowcoder.com/share/jump/437195121692000296981 描述 如上所示&#xff0c;由正整数1&#xff0c;2&#xff0c;3……组成了一颗特殊二叉树。我们已知这个二叉树的最后一个结点是n。现在的问题是&#xff0c;结点m所在的子树中一共包…

【LeetCode每日一题】——41.缺失的第一个正数

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 哈希表 二【题目难度】 困难 三【题目编号】 41.缺失的第一个正数 四【题目描述】 给你一个…

新能源电动车充电桩控制主板安全特点

新能源电动车充电桩控制主板安全特点 你是否曾经担心过充电桩的安全问题?充电桩主板又是什么样的呢?今天我们就来聊聊这个话题。 充电桩主板采用双重安全防护系统&#xff0c;包括防水、防护、防尘等&#xff0c;确保充电桩安全、可靠。不仅如此&#xff0c;充电桩主板采用先…

公文与校对:无缝链接的艺术与重要性

在公文写作的世界中&#xff0c;清晰、准确且专业的语言是成功沟通的关键。然而&#xff0c;许多人可能忽视了公文写作过程中一个至关重要的环节——校对。无论是初步的草稿还是最终的成品&#xff0c;校对都是确保公文达到预期目标的重要工具。在这个环节中&#xff0c;爱校对…

每天一道leetcode:剑指 Offer 13. 机器人的运动范围(中等广度优先遍历剪枝)

今日份题目&#xff1a; 地上有一个m行n列的方格&#xff0c;从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0]的格子开始移动&#xff0c;它每次可以向左、右、上、下移动一格&#xff08;不能移动到方格外&#xff09;&#xff0c;也不能进入行坐标和列坐标的数位之…

Android之ADB常用命令

15、查看ipv6 是否使能 sysctl -a | grep ipv6 | grep disable 13、以太网获取Ip、网关、子网掩码、域名等 adb shell 网卡信息&#xff1a;ifconfig eth0 dns1&#xff1a;getprop net.dns1 dns2&#xff1a;getprop net.dns2 12、屏幕分辨率&#xff1a;wm size 11、…

此文详解,数据仓库管理建设的经验

目前由于数据分散在不同的存储环境或数据库中&#xff0c;对于新业务需求的开发需要人工先从不同的数据库中同步、集中、合并等处理&#xff0c;造成资源和人力的浪费。同时&#xff0c;目前的系统架构&#xff0c;无法为未来数据驱动业务创新的理念提供友好的支撑。需要建设新…

600 V单管IGBT,可在电源应用中实现出色效率

基础半导体器件领域的高产能生产专家Nexperia (安世半导体)今日宣布&#xff0c;将凭借600 V器件系列进军绝缘栅双极晶体管(IGBT)市场&#xff0c;而30A NGW30T60M3DF将打响进军市场的第一炮。Nexperia在其庞大的产品组合中增加了IGBT&#xff0c;满足了市场对于高效高压开关器…

android app控制ros机器人五(百度地图)

半吊子改安卓&#xff0c;新增了标签页&#xff0c;此标签页需要显示百度地图 按照官方教程注册信息&#xff0c;得到访问应用AK&#xff0c;步骤也可以参照下面csdn Android地图SDK | 百度地图API SDK 【Android】实现百度地图显示_宾有为的博客-CSDN博客 本人使用的是aar开…

[保研/考研机试] KY96 Fibonacci 上海交通大学复试上机题 C++实现

题目链接&#xff1a; KY96 Fibonacci https://www.nowcoder.com/share/jump/437195121692000803047 描述 The Fibonacci Numbers{0,1,1,2,3,5,8,13,21,34,55...} are defined by the recurrence: F00 F11 FnFn-1Fn-2,n>2 Write a program to calculate the Fibon…

Shein和Temu激烈竞争,卖家又如何突破并脱颖而出?

电商巨头SHEIN执行副主席向投资者发布了一封信函称实现了公司有史以来最高的上半年净利润。特别是持续增长势头巩固了在美国市场上的领先地位。Shein以低廉的价格和丰富的选择这种“按需”商业模式&#xff0c;迅速在美国崭露头角。根据Apptopia的数据&#xff0c;Shein在美国的…

文本挖掘 day5:文本挖掘与贝叶斯网络方法识别化学品安全风险因素

文本挖掘与贝叶斯网络方法识别化学品安全风险因素 1. Introduction现实意义理论意义提出方法&#xff0c;目标 2. 材料与方法2.1 数据集2.2 数据预处理2.3 关键字提取2.3.1 TF-IDF2.3.2 改进的BM25——BM25WBM25BM25W 2.3.3 关键词的产生(相关系数) 2.4 关联规则分析2.5 贝叶斯…

不可忽视的力量:揭示文字校对的重要性

在生活的方方面面&#xff0c;语言一直是我们交流思想、情感、信息的关键工具。文字&#xff0c;作为语言的重要载体&#xff0c;也在日常生活中扮演着至关重要的角色。不论是个人日常的社交媒体更新&#xff0c;还是公司的官方公告&#xff0c;文字都是信息传播的基础。然而&a…

MongoDB常用命令

什么是MongoDB ? MongoDB 是由C语言编写的&#xff0c;是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下&#xff0c;添加更多的节点&#xff0c;可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储为一个…

ansible剧本之role角色模块

role角色 一&#xff1a;Roles 模块1.roles 的目录结构&#xff1a;2.roles 内各目录含义解释3.在一个 playbook 中使用 roles 的步骤&#xff1a;&#xff08;1&#xff09;创建以 roles 命名的目录&#xff08;2&#xff09;创建全局变量目录&#xff08;可选&#xff09;&am…

【Vue教程】第一章 基础语法

Vue是什么&#xff1f; 创建Vue实例 创建一个Vue实例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewpor…

[PyTorch][chapter 49][创建自己的数据集 1]

前言&#xff1a; 后面几章主要利用DataSet 创建自己的数据集&#xff0c;实现建模&#xff0c; 训练&#xff0c;迁移等功能。 目录: pokemon 数据集深度学习工程步骤 一 pokemon 数据集介绍 1.1 pokemon: 数据集地址&#xff1a; 百度网盘路径: https://pan.baidu.com/s/1…

vant金额输入框

1.在components中新建文件夹currency&#xff0c;新建index.js import Currency from ./src/currency.vueCurrency.install function (Vue) {Vue.component(Currency.name, Currency) }export default Currency 2.在currency中新建文件夹src&#xff0c;在src中间currency.v…

Pyinstaller打包exe(包括其他资源数据)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、说明二、打包步骤三、其他 前言 记录&#xff1a;简单记录使用Pyinstaller将py和资源文件打包为exe的过程 一、说明 环境&#xff1a;anconda版本python …