是html中唯一真正换行的标签,纯行为无语义;其他如、换行源于块级特性;多会被合并;white-spacecss属性才控制文本内换行。

HTML 里 <br> 是唯一真正“换行”的标签
它不产生语义,不带样式,就是纯粹告诉浏览器“这里断一行”。别的标签比如 <p></p>、<div> 看起来像换行,其实是块级元素自带的上下外边距和独占一行行为,不是“换行”本身。
<p>常见错误:在段落中间硬塞 <code><div> 或 <code><p></p> 来换行,结果多出多余间距、破坏语义、响应式时更难控制。
-
<br>必须写成自闭合形式:<br>或<br>(XHTML 风格),不能写<br> - 连续多个
<br>会被浏览器合并成一个视觉换行(除非 CSS 重置了white-space) - 在
<pre class="brush:php;toolbar:false;"></code> 里,回车符本身就能换行,<code><br></code> 反而多余</li> </ul> <H3>CSS 的 <code>white-space</code> 才管“文字内换行”</H3> <p>想让一段文字里按你写的换行符(比如敲回车)来显示?或者让长单词自动折行?靠的是 CSS,不是 HTML 标签。</p> <p>典型场景:用户提交的评论含手动换行,后端存了 <code>\n</code>,前端要原样渲染。</p><div class="aritcle_card flexRow"> <div class="artcardd flexRow"> <a class="aritcle_card_img" href="/ai/2508" title="Genspark"><img src="https://img.php.cn/upload/ai_manual/001/246/273/176907409614645.png" alt="Genspark" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a href="/ai/2508" title="Genspark">Genspark</a> <p>Genspark 是一款创新的 AI 搜索引擎,致力于提供比传统搜索引擎更高效、准确和无偏见的信息获取方式。</p> </div> <a href="/ai/2508" title="Genspark" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div><p><span>立即学习</span>“<a href="https://pan.quark.cn/s/cb6835dc7db1" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">前端免费学习笔记(深入)</a>”;</p> <ul> <li>用 <code>white-space: pre-line</code>:保留换行符和空格,但合并多余空白,自动折行 —— 最常用</li> <li>用 <code>white-space: pre-wrap</code>:保留所有空白和换行,也允许折行 —— 适合代码片段或日志</li> <li>别用 <code>white-space: pre</code>:保留一切但不折行,超长文本会撑破容器</li> <li>默认 <code>normal</code> 会忽略换行符,把所有空白当空格处理</li> </ul> <H3>JS 动态插入换行要小心 <code>\n</code> 和 <code><br></code> 混用</H3> <p>用 JS 拼接字符串往 DOM 里塞内容时,<code>\n</code> 在 <code>textContent</code> 里无效,在 <code>innerHTML</code> 里也只当空格,除非配合 <code>white-space</code>。</p> <p>常见错误现象:<code>element.textContent = "第一行\n第二行"</code> → 页面不换行;<code>element.innerHTML = "第一行\n第二行"</code> → 还是不换行(因为没设 CSS)。</p> <ul> <li>想用 <code>\n</code> + CSS:设 <code>white-space: pre-line</code>,然后用 <code>textContent</code> 或 <code>innerHTML</code> 都行</li> <li>想用 <code><br></code>:必须用 <code>innerHTML</code>,且确保字符串里是字面量 <code><br></code>,不是转义后的 <code><br></code></li> <li>React/Vue 等框架里,直接写 <pre class="brush:php;toolbar:false;">{"第一行"}<br />{"第二行"}</pre> 更安全,避免 XSS 和转义陷阱
表格单元格、按钮里换行要用 <wbr></code 或 CSS</H3>
<p><code><br>
在 <td> 或 <code><button></button> 里能用,但语义不清;纯文字折行又容易断在奇怪位置(比如英文单词中间)。
这时候 <wbr></wbr>(word break opportunity)更合适:它不强制换行,只告诉浏览器“这里可以断”,由排版引擎决定是否真断。
-
<wbr></wbr>是 HTML5 正式标签,现代浏览器全支持 - 比
<span style="display:block"></span>轻量,不破坏行内流 - 配合
word-break: break-word或overflow-wrap: break-word控制长单词 - 注意:不要在中文里滥用
<wbr></wbr>,中文本来就可任意断行,加了反而可能多出空格
<br>、\n、CSS 和框架语法时,最容易漏掉的是上下文——同一段文字,在 innerHTML 里要 <br>,在 textContent 里就得靠 white-space,忘了切就白调了。









