news 2026/4/16 12:03:56

时间线 (步骤条)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
时间线 (步骤条)

效果如图

<!DOCTYPEhtml><html><head><meta charset="utf-8"><title></title><style>*{margin:0;padding:0;}body{width:100vw;height:100vh;overflow:hidden;display:flex;align-items:center;justify-content:center;gap:50px;}.time-box{width:300px;}.time{position:relative;box-sizing:border-box;padding:0010px 20px;}.time:before{position:absolute;left:0;top:5px;content:'';display:block;background-color:red;width:10px;height:10px;border-radius:10px;z-index:2;}.time.active:before{background:skyblue;}.time:not(:last-child)::after{position:absolute;left:5px;top:5px;content:'';display:block;background-color:#000;width:1px;height:100%;}.time.active:after{background:skyblue;}.time-box2{display:flex;width:500px;}.time2{position:relative;padding:20px 20px00px;}.time2:before{position:absolute;left:0;top:0;content:'';display:block;background-color:red;width:10px;height:10px;border-radius:10px;z-index:2;}.time2:not(:last-child)::after{position:absolute;left:0;top:5px;content:'';display:block;background-color:#000;width:100%;height:1px;}</style></head><body><divclass="time-box"><divclass="time active"><divclass="text">竖向 时间线</div></div><divclass="time"><divclass="text">时间线2</div><divclass="text">时间线2</div><divclass="text">时间线2</div><divclass="text">时间线2</div></div><divclass="time"><divclass="text">时间线3</div><divclass="text">时间线3</div><divclass="text">时间线3</div><divclass="text">时间线3</div></div><divclass="time"><divclass="text">时间线4</div><divclass="text">时间线4</div><divclass="text">时间线4</div><divclass="text">时间线4</div></div></div><divclass="time-box2"><divclass="time2"><divclass="text">横向 时间线</div></div><divclass="time2"><divclass="text">时间线2</div><divclass="text">时间线2</div><divclass="text">时间线2</div><divclass="text">时间线2</div></div><divclass="time2"><divclass="text">时间线3</div><divclass="text">时间线3</div><divclass="text">时间线3</div><divclass="text">时间线3</div></div><divclass="time2"><divclass="text">时间线4</div><divclass="text">时间线4</div><divclass="text">时间线4</div><divclass="text">时间线4</div></div></div></body></html>

你的这个时间线 Demo 非常适合用于教学博客!它通过纯 CSS 实现了竖向横向两种时间线布局,并巧妙地利用:before::after伪元素绘制连接线与节点,同时通过.active类实现了“激活状态”的视觉反馈——这正是步骤条(Step Progress)组件的核心思想。

下面我为你整理一份结构清晰、适合写进博客的教学解释文案,你可以直接使用或稍作修改:


🕒 纯 CSS 实现竖向 & 横向时间线(可拓展为步骤条)

在前端开发中,时间线(Timeline)步骤条(Step Progress)是常见的 UI 组件,常用于展示流程、历史事件或操作引导。今天,我们就用纯 HTML + CSS来实现一个简洁、可复用的时间线组件,并支持“激活项”高亮,轻松拓展为交互式步骤条!

🧱 核心思路

  • 利用伪元素::before绘制圆形节点(时间点)
  • 利用伪元素::after绘制连接线(时间轴)
  • 通过.active类控制当前步骤的样式(如颜色变化)
  • 分别实现竖向排列横向排列两种布局

🔽 竖向时间线实现

HTML 结构

<divclass="time-box"><divclass="time active">...</div><divclass="time">...</div><!-- 更多步骤 --></div>

关键 CSS 技巧

.time{position:relative;padding:20px 0 10px 20px;/* 左侧留出空间给时间轴 */}/* 圆形节点 */.time::before{content:'';position:absolute;left:0;top:5px;width:10px;height:10px;border-radius:50%;background-color:red;z-index:2;}/* 垂直线(时间轴) */.time::after{content:'';position:absolute;left:5px;top:5px;width:1px;height:100%;background-color:#000;}

💡注意.time::afterheight: 100%会延伸到每个.time元素的底部,从而形成连续的竖线。

激活状态(.active)

.time.active::before{background:skyblue;}.time.active::after{background:skyblue;}

这样,当前步骤的节点连接线都会高亮,视觉上更突出!


➡️ 横向时间线实现

HTML 结构

<divclass="time-box2"><!-- 使用 flex 横向排列 --><divclass="time2">...</div><divclass="time2">...</div></div>

关键差异

  • 容器.time-box2使用display: flex实现横向布局
  • 连接线从垂直变为水平
.time2::before{/* 节点位置:左上角 */left:5px;top:0;}.time2::after{/* 水平线:从节点向右延伸 */left:5px;top:5px;width:100%;/* 横向拉满 */height:1px;/* 变成细线 */background-color:#000;}

⚠️ 注意:横向时间线的连接线是每个.time2自己画的“右边部分”,所以最后一个元素的线可能会超出容器。实际项目中可通过:not(:last-child)::after优化。


🚀 拓展为交互式步骤条

你只需:

  1. 用 JavaScript 动态切换.active类(例如点击下一步)
  2. 添加过渡动画(如transition: background 0.3s
  3. 配合内容区域切换,即可实现完整的分步引导流程

示例逻辑(伪代码):

steps.forEach((step,index)=>{step.addEventListener('click',()=>{steps.forEach(s=>s.classList.remove('active'));step.classList.add('active');showContent(index);});});

✅ 总结

特性实现方式
时间节点::before+border-radius: 50%
时间轴线::after+ 宽/高控制方向
激活高亮.active类覆盖颜色
布局切换父容器用flex控制子项排列方向
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 12:00:19

[ros2-jazzy] sensor_msgs::Image 应用范例

以下是一个完整的ROS2 Jazzy C应用案例&#xff0c;包含图像发布节点和订阅节点&#xff1a; 1. 发布节点 (image_publisher.cpp) #include <rclcpp/rclcpp.hpp> #include <sensor_msgs/msg/image.hpp> #include <cv_bridge/cv_bridge.h> #include <ope…

作者头像 李华
网站建设 2026/4/14 7:14:32

谈谈你对反射的理解

谈谈你对反射的理解 章节目录 文章目录谈谈你对反射的理解1. 什么是反射&#xff1f;2. 反射的主要用途是什么&#xff1f;3. 反射的优缺点是什么&#xff1f;4. 如何使用反射获取类的信息&#xff1f;5. 如何使用反射创建对象&#xff1f;6. 如何使用反射调用方法&#xff1f…

作者头像 李华
网站建设 2026/4/12 16:52:55

python实现罗斯勒吸引子(Rössler Attractor)

罗斯勒吸引子(Rssler Attractor)1. 理论基础与数学模型1.1 罗斯勒系统简介罗斯勒吸引子是德国科学家奥托罗斯勒(Otto Rssler)于1976年提出的一种混沌系统&#xff0c;是继洛伦兹吸引子之后第二个被发现的混沌吸引子。相比洛伦兹吸引子的双涡卷结构&#xff0c;罗斯勒吸引子具有…

作者头像 李华
网站建设 2026/4/12 11:15:27

测试语音助手可访问性:交互设计的核心挑战与系统性解决方案

——面向软件测试工程师的深度指南 一、语音交互可访问性测试的行业意义 随着全球数字无障碍立法加速&#xff08;如欧盟EAA法案、美国Section 508&#xff09;&#xff0c;语音助手可访问性已成为合规刚需。测试从业者需超越基础功能验证&#xff0c;深入交互设计层&#xff…

作者头像 李华
网站建设 2026/4/11 22:45:31

2026 年 PHP 8.4 依然重要:跳到 8.5 之前你该掌握的特性

2026 年 PHP 8.4 依然重要&#xff1a;跳到 8.5 之前你该掌握的特性 为什么 PHP 8.4 在 2026 年仍然相关 如果你的团队计划"今年上 PHP 8.5"&#xff0c;很可能会先聊到 PHP 8.4——不管你愿不愿意。 无聊但重要的原因是&#xff1a;支持窗口。 根据官方 PHP 支持…

作者头像 李华
网站建设 2026/4/1 16:25:52

GLM-4.6V-Flash-WEB部署教程:NVIDIA驱动配置指南

GLM-4.6V-Flash-WEB部署教程&#xff1a;NVIDIA驱动配置指南 智谱最新开源&#xff0c;视觉大模型。 1. 引言 1.1 学习目标 本文旨在为开发者提供一份从零开始部署 GLM-4.6V-Flash-WEB 视觉大模型的完整实践指南。通过本教程&#xff0c;您将掌握&#xff1a; 如何正确配置 …

作者头像 李华