应使用语义化标签组合:用<time>标中断日期,用带aria-label的<section>区分连续段与重启段,避免div+class;CSS用小字号灰度轻提示,禁用红色图标;JS需归一化日期、防XSS;服务端须返回streak_id标识连续段。

HTML里怎么用语义化标签表示“打卡中断”
不能靠纯视觉样式暗示断连,得让屏幕阅读器、爬虫和后续维护者一眼看懂这是“非连续段”。<time> 和 <section> 是最稳妥的组合,别用 <div> 堆 class。
-
<time datetime="2024-03-15">3月15日</time>标出中断当天,比写“第7天→中断”更可靠 - 把中断前后的打卡块分别包进
<section aria-label="连续打卡:第1–6天">和<section aria-label="重新开始:第1天">,避免靠 CSS 类名猜逻辑 - 别在
<span class="break">断连</span>这种写法——它对辅助技术完全不可读,也不利于后续加统计脚本
CSS怎么让“重新开始”提示不干扰正常阅读流
视觉上要轻,但语义上不能弱。重点不是“怎么高亮”,而是“怎么不抢焦点、不破坏阅读顺序”。
- 用
font-size: 0.85em+color: #666控制字号和灰度,别用红色感叹号图标——那会误导向错误状态 - 中断提示放在连续块末尾的
<footer>里,而不是插在两个<time>之间,否则键盘 Tab 顺序会跳乱 - 如果支持暗色模式,
color必须用color-scheme: light dark配合prefers-color-scheme媒体查询,否则灰字在深背景上直接看不见
JavaScript检测并标记“断连”时最容易错的三件事
前端算日期差很容易掉坑——不是逻辑错,是边界值和时区没对齐。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
- 别用
new Date().getDate() - prevDate.getDate()算间隔天数,跨月就崩;改用Math.floor((curr.getTime() - prev.getTime()) / (1000 * 60 * 60 * 24)) - 用户本地时区可能让
2024-03-15解析成 UTC 时间,导致凌晨打卡被误判为“前一天”,统一用date.toISOString().slice(0,10)归一化 - DOM 插入提示节点时,别直接
innerHTML = "<small>断连</small>",XSS 风险小但存在;用document.createElement("small")+textContent更安全
服务端返回数据结构怎么配合前端做断连判断
前端自己算容易翻车,最好由后端明确标出连续段。关键不是字段多,而是字段含义无歧义。
立即学习“前端免费学习笔记(深入)”;
- 要求 API 返回每个打卡记录带
"streak_id": "2024-Q1-3"这类稳定标识,而不是只给"is_continuous": true——后者无法回溯哪段断了 - 中断当天的数据仍要返回,且
"streak_id"为空或为新值(比如从"2024-Q1-3"切到"2024-Q1-4"),否则前端没法知道“断在哪一天” - 别让前端靠
"created_at"字符串自己 parse——格式不统一(2024/03/15vs15-03-2024)会导致批量失效
真正麻烦的不是“怎么显示断连”,而是日期归一化、服务端标识一致性、以及中断点是否可逆查——这三个地方漏一个,后面所有样式和交互都白搭。


















