del标签用于语义标记已删除内容,非视觉隐藏;需包裹完整语义单元,配合ins使用并规范设置datetime属性,样式与交互需谨慎处理以保障可访问性。

del 标签不是视觉删除,而是语义标记
<del></del> 的核心作用是传达「这段内容曾存在但已被移除或失效」的语义,不是为了隐藏或清空文本。浏览器默认用删除线(strikethrough)渲染,但这只是辅助视觉提示;屏幕阅读器会读出「已删除」,搜索引擎也会据此降低该内容的权重。如果只想要视觉隐藏,display: none 或 visibility: hidden 更合适——但那会丢失语义和可访问性。
del 标签必须包裹完整语义单元
不能只删半个词或随意截断 HTML 结构。常见错误包括:
- 在
<del></del>内部嵌套未闭合的标签,比如<del><strong>促销价</strong></del>(破坏 DOM 树) - 跨行块级元素中滥用,例如把整个
<div> 包进 <code><del></del>却忽略其内部交互逻辑(按钮仍可点击,表单仍可提交) - 与
<ins></ins>搭配时遗漏cite或datetime属性,导致修订依据缺失 - 用
text-decoration-line: line-through替代旧式text-decoration,避免意外继承underline - 删除线颜色建议与文本色一致,否则对比度过高干扰阅读:
text-decoration-color: currentColor - 若内容仍需交互(如点击跳转),必须显式设置
pointer-events: auto,因为某些 CSS 重置会误禁用 - 禁用时(如过期优惠不可用),应配合
aria-disabled="true"和tabindex="-1",而非仅靠视觉样式 - PHP 中用
date('c')而非date('Y-m-d H:i:s')(后者缺 T/Z,不合法) - JavaScript 动态插入时,
new Date().toISOString()安全,但new Date().toString()不安全 - 数据库字段为 Unix timestamp 时,务必转换后再输出,不要直接拼接
正确做法是:删除范围对齐业务含义。比如价格变动,应包裹完整价格片段:<del datetime="2024-03-01">¥199</del> <ins datetime="2024-04-01">¥149</ins>
样式覆盖需谨慎处理删除线与交互状态
默认删除线颜色、粗细、位置不可控,且 hover/focus 状态下若不重置,可能造成误操作。关键注意点:
服务端生成 del 标签时要校验 datetime 格式
datetime 属性值必须符合 ISO 8601 格式(YYYY-MM-DD 或 YYYY-MM-DDTHH:MM:SSZ),否则会被浏览器忽略。后端模板或 CMS 输出时容易出错:
没写 datetime 不报错,但会失去机器可读的时效依据——这点在内容审计或合规场景里常被忽略。











