时间轴必须用而非或,因其语义明确表示有序事件流,确保SEO抓取、读屏器按序播报、键盘导航准确,且纯文本环境仍保留序号;语义无序,易致时间逻辑失效。

是唯一能同时扛住 SEO、读屏器、打印、缩放和老浏览器的结构选择,别用 时间轴本质是「有先后顺序的事件流」, 很多人写 给 根本原因是水平方向内容过宽。典型诱因有:给容器设了 冒充。
为什么必须用
而不是 或 的语义就是 ordered list,浏览器和读屏器会按序号播报、跳转、导航。换成 更危险:它表示“无序”,一旦数据顺序错乱或 JS 渲染出 bug,用户根本意识不到时间线已经崩了。
可直接倒序展示“最近 5 条”,不用 JS 排序或后端改 SQL 仍保留数字序号,,别嵌套多层
的 datetime 属性怎么填才不翻车,看着没问题,但机器根本没法解析。搜索引擎、日历插件、甚至某些浏览器的“添加到日历”功能都会失效。
datetime="2023-05-12"(年-月-日),datetime="2023-05"(年-月)也合法datetime="2023/05/12" 或 datetime="2023年5月" 是无效值datetime="2023-05-12T14:30:00",不能写 "14:30" 或 "2:30 PM"
datetime="2023-05-12T14:30:00+08:00";"GMT+8" 不是标准写法,部分解析器会忽略"2023/05/12"?前端得先 new Date("2023/05/12").toISOString().split('T')[0] 转一下再塞进 datetime
CSS 画竖线和圆点,为什么不能用
border-left
加 border-left: 2px solid #ccc 看似省事,但实际会引发定位抖动、缩放错位、打印偏移三大问题。因为 border 是盒模型一部分,会影响所有子元素的布局计算。
::before 伪元素画在 上:position: absolute; top: 0; left: 50%; transform: translateX(-50%); height: 100%; width: 2px;
::after,position: absolute 定位在中线上,不占空间也不扰流li:nth-child(odd) 和 li:nth-child(even) 控制 text-align 和 padding-left/padding-right,别用 JS 判断奇偶zoom: 1 触发 hasLayout,否则伪元素在 zoom=125% 时可能消失移动端怎么避免时间轴挤成一团或强制水平滚动
min-width 或固定 width;display: flex 没加 flex-wrap: wrap;时间点和标题并排显示却没做堆叠。
真正难的不是画出那条线,而是每个节点的位置、尺寸、加载时机都得抠到像素和毫秒。尤其当你要支持 IE11、适配深色模式、又得让读屏器准确播报时,@media (max-width: 768px) { .timeline-item { flex-direction: column; } }
占位IntersectionObserver 监听进入视口,按需加载并替换占位符——比监听 scroll 更轻量 + + 伪元素这三样,一个都不能少。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











