垂直步骤条应使用语义化 ol 包裹含 a 标签的 li,通过 ::before/::after 生成连接线与状态标记,点击时用事件委托更新 class 并 scrollIntoView 平滑滚动。

垂直步骤条的HTML结构怎么写才支持点击跳转
垂直步骤条本质是带状态的导航列表,必须用语义化结构保证可访问性和点击区域连续性。别用一堆 div 堆砌,直接用 ol 或 ul 包裹 li,每个 li 里放 a 标签——这是点击生效的前提。
- 每个步骤项必须是独立可聚焦的
a或button,不能只靠div onclick -
ol更合适:步骤有明确顺序,浏览器和屏幕阅读器能识别序号 -
a的href设为#step-1这类锚点,方便原生滚动定位 - 避免把整个
li设为点击目标,否则焦点框不清晰、移动端易误触
CSS怎么实现垂直排列+连接线+状态标记
连接线不是用图片或伪元素硬画,而是利用 ::before 和 ::after 配合定位生成,这样状态切换时只需改类名,不用操作 DOM。
- 给
ol设position: relative,作为连接线的定位上下文 - 每个
li设position: relative,用::before画圆点(状态图标),::after画竖线(除最后一项) - 连接线高度靠
height: 100%+top: 1.5em控制,避免被上一项覆盖 - 当前激活项用
.active类控制圆点颜色和文字加粗,已完成项用.done区分样式
JavaScript点击后如何同步更新状态和滚动定位
点击不是单纯加 class,要处理三件事:清除旧状态、设置新状态、滚动到对应区域。别漏掉 preventDefault(),否则页面跳转会打断体验。
- 监听
ol的事件委托,用e.target.matches('a')判断是否点中链接 - 用
document.querySelector(e.target.hash)找到目标锚点元素,再调scrollIntoView({ behavior: 'smooth' }) - 状态更新只操作 class:先移除所有
.active和.done,再给已点击项加.active,给它之前所有项加.done - 注意:如果目标锚点不存在,
scrollIntoView会静默失败,建议加if (targetEl)判断
移动端点击区域太小怎么办
默认 a 标签在手机上点击反馈弱,且容易点空。必须扩大可点击范围,但不能破坏布局流。
立即学习“前端免费学习笔记(深入)”;
- 给
a设display: block+padding: 1rem 0.75rem,让整行可点 - 圆点用
transform: translateX(-50%)居左对齐,避免用margin-left导致点击区偏移 - 连接线用
left: 0.75rem定位,与文字左侧对齐,保持视觉连贯 - 禁用
user-select: none在a上,否则长按会触发复制菜单干扰操作



















