Menu

HTML 换行:br 标签、换行符与断行位置

用 <br> 在一段文字中另起一行。了解什么时候该用 <br>、什么时候用段落更好,如何保留文本中的换行符,如何用 <wbr> 让长单词断开,以及如何阻止换行。

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

如何换行

在你想另起一行的位置放上 <br>。它是空元素,所以没有结束标签:

地址正好在每个 <br> 处换行。第二段虽然源代码中有换行符,却仍然显示在一行:HTML 会把换行符、制表符和连续的空格都当作一个空格。这正是 <br> 存在的原因。

<br>、<br/> 和 <br /> 生成的是同一个元素。你的项目用哪种就用哪种(JSX 和 XHTML 要求写斜杠)。

br 与 p:换行不是间距

<br> 在同一个段落内结束一行。新的 <p> 则开始一个新段落,默认外边距会在它的上下留出空间。堆叠 <br> 标签来制造间距虽然可行,但很脆弱,而且表达的意思也不对:

两个盒子看起来差不多,但对屏幕阅读器来说,第一个只是一个段落,而且想调整间距就得修改每个页面。在第二个盒子里,间距只是一行 CSS。

<br> 的合适用途:地址、诗歌和歌词,以及签名中的各行,这些换行本身就属于文本。其他情况请使用段落、列表或标题。

保留文本中的换行符

当文本来自别处(评论框、数据库、脚本)时,它包含的是真正的换行符,而不是 <br> 标签。CSS 的 white-space: pre-line 让浏览器把这些换行符显示为换行:

同一个字符串在灰色盒子里显示为一行,在蓝色盒子里显示为三行。这也比用 innerHTML 往用户文本里拼接 <br> 标签更安全,后者会让用户能够注入 HTML。如果还要保留空格和缩进,请使用 white-space: pre,HTML 空格一页中有详细介绍。

让长单词断开:wbr

没有空格的长单词或 URL 可能会溢出窄盒子。<wbr> 标记一个位置,浏览器在需要时可以在这里断行,不需要时则什么也不做:

第一个路径超出了它的盒子;第二个在 <wbr> 的位置断开。对于你无法控制的文本,CSS 属性 overflow-wrap: anywhere 可以让长单词在任意位置断开。

阻止换行

有时你想要的恰恰相反:让“10 km”或电话号码保持在一起。有两个办法:

&nbsp; 是浏览器不会在此断行的空格,所以“10”和“km”会保持在一起。white-space: nowrap 让整个 span 保持在一行。把 &nbsp; 换成普通空格,或者去掉那个类,在这个宽度下两者都会被拆成两行。

常见错误

  • 在源代码中按回车键,以为会另起一行。 HTML 中的换行符就是空格。请使用 <br>、单独的元素或 white-space: pre-line。
  • 堆叠 <br><br><br> 来制造间距。 请使用段落和 margin。
  • 用 <br> 拼出列表。 请使用带 <li> 的 <ul> 或 <ol>,屏幕阅读器会把它们读作列表。
  • 写成 </br>。 这是无效的。请写 <br>。
  • 用 innerHTML 给用户文本添加 <br>。 请改为设置 textContent,并使用 white-space: pre-line。

常见问题

如何在 HTML 中换行?

在新的一行要开始的位置插入 <br>:Line one<br>Line two。在 HTML 文件中按回车键没有用,因为浏览器会把源代码中的换行符当作普通空格。

应该写 <br>、<br/> 还是 <br />?

三种写法在 HTML 中都有效,生成的是同一个元素。<br> 是纯 HTML 写法;带斜杠的写法是为了兼容 XHTML 和 JSX 而被接受的。单独的 </br> 是无效的,尽管浏览器会把它当作又一个换行。

什么时候应该用 <br> 而不是 <p>?

当换行本身是内容的一部分时,比如地址或诗歌,就用 <br>。不同的段落用单独的 <p> 元素,间距用 CSS 的 margin,而不是堆叠 <br> 标签。

如何在不添加 <br> 标签的情况下保留文本中的换行?

在 CSS 中给元素设置 white-space: pre-line。浏览器就会把文本中的每个换行符显示为换行,同时仍然合并多余的空格。这对用户评论和用 JavaScript 加载的文本非常方便。

如何在 HTML 中禁止换行?

把文本包裹在设置了 white-space: nowrap 的元素中,或者用不换行空格 &nbsp; 连接两个词,让它们始终在同一行。

Coddy 编程语言插图

和 Coddy 一起学编程

开始