应优先用 而非 表达可审计的删除行为,因 支持 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"></del>
纯视觉删除线请绕开 <s></s>
待办事项打钩后加删除线、UI 上临时灰显+划掉、设计稿标注“此模块暂不实现”——这些都不该用 <s></s>。它们没有语义变化,只是样式反馈。
正确做法是 CSS:
-
text-decoration: line-through配合opacity: 0.6控制视觉层级 - 避免对
<button></button>或<a></a>套<s></s>:语义冲突(“已失效的可点击元素?”),部分浏览器会禁用焦点或跳过无障碍树 - 若需响应式删除线(比如小屏隐藏文字、大屏划掉),用 class 切换更可控
屏幕阅读器对 <s></s> 的处理很弱
NVDA、VoiceOver 等主流读屏软件默认不播报 <s></s> 的语义,多数只读出文字本身,顶多加个“已废弃”前缀,且不保证一致。这意味着靠 <s></s> 传递关键时效信息(如“优惠已结束”)存在盲区。
稳妥做法:
- 在
<s></s>内部或紧邻位置补充明文说明,例如:<s>¥199</s>(活动已于2026年3月21日截止) - 对重要过期信息,额外包裹
<span aria-live="polite"></span>触发动态播报 - 别依赖
<s></s>做合规提示(如 GDPR 数据过期),这类场景必须用显式文案+时间戳
真正容易被忽略的是:语义标签不是“加了就完事”,而是要和上下文、辅助技术、业务逻辑对齐。一个 <s></s> 标错位置,可能让审核人员漏看变更,也可能让视障用户错过关键时效。



















