是内联元素,允许嵌套内联内容(如、、、等),禁止嵌套块级元素(如、、),因此文字合法安全,浏览器正常解析;而...会被自动修正为...,破坏dom结构。

直接写 <p><u>文字</u></p> 就行,这是合法且安全的嵌套方式
为什么 <u></u> 能放进 <p></p> 里
<u></u> 是内联元素,<p></p> 允许包含内联内容(文本、<strong></strong>、<em></em>、<a></a>、<u></u> 等),但不能放块级元素(如 <div>、<code><h2></h2>、另一个 <p></p>)
浏览器解析时不会报错,也不会自动拆段落 —— 这和 <p></p>
<p>xxx</p>
-
<p><u>重点内容</u>其余文字</p>✅ 正常渲染为一行带下划线的段落 -
<p></p> <div>xxx</div>❌ 浏览器会“修复”成<p></p> <div>xxx</div> <p></p>,导致意外 DOM 结构
<u></u> 在现代 HTML 中是否推荐使用
<u></u> 自 HTML5 起已不再是“纯装饰性标签”,而是有语义含义:表示非文本性标注(如拼写错误、专有名词、翻译注释等),不是用来替代 CSS text-decoration: underline
如果你只是想加下划线样式,更推荐用 <span></span> + CSS:
<p><span style="text-decoration: underline;">强调文字</span>正常文字</p>
这样语义更干净,也方便后续统一控制样式
- 用
<u></u>:适合标记“需要视觉区分但又不属于强调或链接”的内容(比如校对稿里的待审词) - 用
style="text-decoration: underline"或 class:适合纯表现需求,不影响语义 - 避免用
<u></u>包含链接(<a></a>),否则下划线会叠加,可读性差
容易被忽略的兼容性细节
<u></u> 在所有现代浏览器中都支持,但默认样式在不同系统略有差异:
- Chrome / Edge:单线、贴近文字基线
- Safari:稍细、略偏下
- 部分旧 Android WebView:可能渲染为虚线下划线
如果要求严格一致,必须显式重置:
u { text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 2px; }
注意:text-decoration-thickness 和 text-underline-offset 在 IE 中不支持,如需兼容 IE,只能回退到 border-bottom 模拟
真正麻烦的从来不是怎么写,而是写完才发现 <p></p> 里塞了个 <div> 或漏写了 <code> —— 浏览器自动修复后,DOM 结构和你写的完全不是一回事











