Menu

HTML 下划线与删除线:u、ins、s 和 del 标签

在 HTML 中用 <u> 或 CSS text-decoration 给文字加下划线,用 <s> 或 <del> 加删除线。了解每个标签的含义、<ins> 和 <del> 如何标记修改,以及为什么给非链接文字加下划线会让读者困惑。

本页包含可运行的编辑器。编辑、运行,立即查看输出。

HTML 中如何给文字加下划线

有两种方法:<u> 标签,或者 CSS 属性 text-decoration: underline。两者画出的线是一样的:

任何下划线的问题都在第三行:读者以为带下划线的文字是链接,会去点击它。只有在理由明确时才给普通文字加下划线。

u 标签的含义

<u> 不是通用的“下划线”按钮。在当前的 HTML 中,它表示带有未明确说明的标注的文字:一个表示“这里有特别之处”却不说明是什么的标记。常见的实际用途有:

  • 标出拼写错误(就像文字处理软件那样,常用红色波浪线),
  • 标出中文里的专有名词,这是中文排版中的一种惯例(专名号)。

要强调就用 <em> 或 <strong>(见粗体),书名用 <cite>。如果只是想要这种外观,就用 CSS。

删除线:s 和 del

HTML 有两个给文字画删除线的标签,它们的含义不同:

标签含义典型用途
<s>不再准确或相关,为上下文而保留旧价格、已售罄的票种
<del>已从文档中删除编辑记录、更新日志、待办清单中已完成的事项

用 ins 和 del 标记修改

<ins> 是 <del> 的搭档:它标记新增的文字。浏览器默认给它加下划线。两者都接受 datetime(修改发生的时间)和 cite(说明修改的 URL):

这种红绿配色就是大家熟悉的 diff 外观。给 ins 加上 text-decoration: none 可以去掉默认的下划线,免得它看起来像链接。

用 CSS 实现下划线和删除线

text-decoration 能给任何元素加上视觉效果:它可以设置颜色和样式,text-decoration-thickness 则设置线的粗细。对于纯装饰性的线条,这才是合适的工具:

去掉链接的下划线、下划线偏移以及 text-decoration 的其他细节,见 CSS 下划线页面。

无障碍

屏幕阅读器对 <s>、<del> 和 <ins> 的支持并不一致:有些会读出“已删除”或“已插入”,很多则当作普通文字朗读,所以听众可能听到“价格 49 美元 29 美元”,却不知道哪个才是当前价格。当这种区别很重要时,也要用文字说明,比如加一段视觉上隐藏但会被朗读的文字,或者干脆写“原价 49 美元,现价 29 美元”。

常见错误

  • 给不是链接的文字加下划线。 读者会试着去点击。要突出显示,改用粗体、颜色或背景。
  • 用 <u> 表示强调。 应该用 <em> 或 <strong>。
  • 使用 <strike>。 它已经废弃。改用 <s>、<del> 或 text-decoration: line-through。
  • 在文档修订历史中用 <s> 表示删除的内容。 那应该用 <del>,它还能记录删除发生的时间。
  • 只靠这条线来传达含义。 很多屏幕阅读器不会读出它。

常见问题

HTML 中如何给文字加下划线?

用 <u> 包裹文字,或者在 CSS 中使用 text-decoration: underline。只在符合 <u> 特定含义时使用它(例如标出拼错的单词);如果只是想要视觉上的下划线,就在 <span> 或元素本身上用 CSS。

HTML 中如何给文字加删除线?

对不再准确的文字(比如旧价格)用 <s>,对编辑中删除的文字用 <del>。两者都会在文字中间画一条线。在 CSS 中,text-decoration: line-through 能实现同样的视觉效果。

<u> 标签被弃用了吗?

没有。<u> 在 HTML 4 中被弃用,但在 HTML5 中以新的含义回归:带有非文本标注的文字,例如拼写错误或中文里的专有名词。它是有效的,只是很少是正确的选择。

<strike> 标签怎么了?

<strike> 已经废弃。浏览器仍会给它画删除线,但它不是有效的 HTML。根据含义改用 <s> 或 <del>,或者使用 text-decoration: line-through。

<s> 和 <del> 有什么区别?

<s> 标记不再相关或不再正确、但为了上下文而保留的文字,比如被划掉的价格。<del> 标记从文档中删除的文字,常常与显示替换内容的 <ins> 并排出现,还可以带 datetime 和 cite 属性。

Coddy 编程语言插图

和 Coddy 一起学编程

开始