如何换行
在你想另起一行的位置放上 <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”或电话号码保持在一起。有两个办法:
是浏览器不会在此断行的空格,所以“10”和“km”会保持在一起。white-space: nowrap 让整个 span 保持在一行。把 换成普通空格,或者去掉那个类,在这个宽度下两者都会被拆成两行。
常见错误
- 在源代码中按回车键,以为会另起一行。 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 的元素中,或者用不换行空格 连接两个词,让它们始终在同一行。