应优先用 标记已失效但未被替换的内容(如过期价格),用 配合 记录明确删除行为并支持 datetime/cite 审计;二者语义不同、不可混用,且 不支持时间属性。

什么时候该用 <s></s> 而不是 <del></del>
<s></s> 的核心用途是标记「曾经准确、现已失效」的内容,比如过期价格、停用功能名、废止条款;它不表示“被编辑者删掉”,也不承诺有替代内容。<del></del> 是明确记录「删除行为」的语义标签,必须搭配 <ins></ins> 才能完整表达“删了什么、替换成什么”,且支持 datetime 和 cite 属性做审计追踪。
常见误判点:
- 用户评论里写“这个参数不对”,不能套
<s></s>——主观质疑不是语义失效 - 后台接口返回字段废弃了,但文档没说明原因,此时用
<s></s>比<del></del>更合适(因缺乏删除依据) - 法律条文修订稿中,必须用
<del></del>+<ins></ins>,否则无法满足存证要求
<s></s> 为什么不能加 datetime 或 cite 属性
HTML5 明确规定 <s></s> 不支持 datetime 和 cite。如果强行加上去,W3C 校验器会报错,部分静态站点生成器(如 Hugo、Jekyll 的严格模式)会拒绝构建。
替代方案:
- 在
<s></s>后紧跟<time datetime="2026-03-21">(已下架)</time> - 用
data-expired="2026-03-21"自定义属性辅助 JS 处理,但别指望屏幕阅读器识别 - 若需精确时间+原因,直接换用
<del datetime="2026-03-21" cite="/docs/dep-notice.html">(2026年4月24日)</del>
<del></del> 的 datetime 值怎么写才有效
浏览器不会校验 datetime 是否合法,但辅助技术(如读屏器)和搜索引擎会依赖它解析时间语义。错写成 2024/03/15 或 15-03-2024 会导致语义丢失,甚至被忽略。
✅ 正确写法:
-
datetime="2024-03-15T14:30:00Z"(UTC 时间优先) -
datetime="2024-03-15"(仅日期也可接受)
❌ 错误写法:
datetime="2024.03.15"datetime="Mar 15, 2024"
服务端渲染时若动态生成 <del></del>,注意后端时间时区与前端显示是否一致,否则 datetime 可能误导。
无障碍和 SEO 下,<s></s> 和 <del></del> 的实际表现差异
主流读屏软件(NVDA、VoiceOver)默认会把 <del></del> 读作“已删除:xxx”,把 <s></s> 读作“已废弃:xxx”或直接跳过修饰词——用户第一反应是“这内容还存在吗?还能点吗?”。而纯 CSS 的 text-decoration: line-through 则完全静默,什么也不说。
SEO 方面,搜索引擎会把 <del></del> 当作内容变更信号,可能影响快照版本判断;<s></s> 的影响相对较小。但二者都比 CSS 删除线更易被机器理解。
嵌套使用时,<del></del> 不能包 <s></s>,反之也不推荐。HTML 规范没禁止,但语义冲突。比如 <del><s>已停用</s></del> 逻辑混乱:既说“已被删除”,又说“仅是不推荐”,机器无法判断主次。
真实场景中,二选一即可。要表达“某段文字被删,且其中某词还额外过时”,应拆成两层结构:<p><del>旧方案:<code><s>XML 配置</s>
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











