<strike> 标签已废弃近二十年,HTML5 完全移除,因其仅具删除线样式而无语义,违背结构与表现分离原则;应按场景选用 <del>(表已删除但具参考价值的内容)或 <s>(表不再准确或不适用的信息),或用 CSS text-decoration: line-through 实现纯视觉效果。

<strike> 标签在现代 HTML 开发中**不能用,也不该用**——它已被废弃近二十年,HTML5 完全移除支持,继续使用会导致语义错误、校验失败,且在严格模式(如 XHTML)下直接报错。
为什么 <strike> 被废弃?
它只有视觉样式(加删除线),没有任何语义含义。浏览器渲染效果和 <s> 或 <del> 一样,但无法表达「为什么删」:是内容被撤回?价格过期?还是编辑过程中的临时标记?
W3C 明确要求区分语义:
-
<del>表示「已删除的、仍具参考价值的内容」,比如修订稿中被撤回的条款 -
<s>表示「不再准确或不适用的内容」,比如过期促销文案「仅剩3小时!」 -
<strike>没有对应语义,纯属样式标签,违背 HTML「结构与表现分离」原则
<del> 和 <s> 怎么选?
关键看上下文是否需要保留可访问性与机器可读性:
立即学习“前端免费学习笔记(深入)”;
- 涉及文档修订、协作编辑、法律/合同类文本 → 用
<del>,它支持datetime和cite属性,例如:<del datetime="2026-04-28T10:30" cite="/changes#v2.1">旧版本描述</del> - 仅表示信息失效(如库存、价格、时效性文案)→ 用
<s>,更轻量,无额外属性需求 - 若只是临时高亮、调试用的划掉效果 → 改用 CSS:
text-decoration: line-through,避免污染语义层
兼容性与实际风险
虽然所有浏览器至今仍能渲染 <strike>(靠向后兼容机制),但问题不在显示,而在工具链:
- HTML 验证器(如 W3C Markup Validation Service)会报 Error: Element strike is obsolete
- 部分 SSR 框架(如 Next.js、Nuxt)在 strict mode 下可能拒绝解析,导致服务端渲染失败
- 屏幕阅读器对
<strike>无特殊处理,而对<del>会朗读「deleted text」,提升无障碍体验 - 代码审查工具(如 axe-core、eslint-plugin-jsx-a11y)默认标记为严重可访问性问题
真正容易被忽略的点:很多人把 <s> 当作 <strike> 的“换皮替代”,却没意识到它语义窄——它不适用于修订场景。一旦混用,在协同文档、审计日志、内容存档时会丢失关键意图信息。



















