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 属性。