
HTML 文字下划线怎么留白?用 text-underline-offset 最直接
原生 CSS 就能控制下划线和文字底边的距离,不用伪元素、不用额外标签。关键就是 text-underline-offset,它决定下划线离文字多远。
常见错误是只设 text-decoration: underline,结果下划线紧贴字形底部,尤其在有 descender(如 g、j、p)的字体里,看起来像被“切了一刀”。
-
text-underline-offset接受长度值(2px、0.1em)或关键字(auto),推荐用em单位,随字体缩放 - 注意:它不支持负值(Chrome 125+ 开始支持有限负值,但兼容性差,别依赖)
- 搭配
text-decoration-thickness可微调线粗,但留白核心还是靠 offset
为什么 border-bottom 不是好替代?
很多人用 border-bottom 模拟下划线,想手动控制位置,但会出问题:
- 行高变化时,
border-bottom相对位置不稳定,尤其在多行文本或响应式排版中容易错位 - 无法自动适配字体的
baseline和descender区域,遇到font-feature-settings: "ss01"或变体字体时更难对齐 - 继承性和层叠行为比原生
text-decoration复杂,比如line-height: 1.5下,border 会卡在行框底部,不是文字基线
兼容性要盯住 Safari 和旧 Chrome
text-underline-offset 在 Safari 15.4+、Firefox 70+、Chrome 95+ 支持良好,但老版本 Safari(≤15.3)完全不识别,会退回到紧贴文字的默认下划线。
立即学习“前端免费学习笔记(深入)”;
- 如果必须兼容 Safari 15.3 及更早,得加降级:
text-decoration: underline;<br>text-underline-offset: 0.15em;<br>@supports not (text-underline-offset: 0.1em) {<br> text-decoration: none;<br> background-image: linear-gradient(to bottom, currentColor 0%, currentColor 1px, transparent 1px);<br> background-position: bottom 0.15em;<br> background-repeat: repeat-x;<br> background-size: 100% 1px;<br>} - 别用
text-underline-offset: auto做兜底——它在不同浏览器里计算逻辑不一致,Safari 和 Firefox 的“自动留白”量差异明显
字体本身会影响下划线视觉留白
同一段 CSS,在不同字体下,下划线“看起来”的留白可能完全不同。这是因为字体自身的 underlinePosition 和 underlineThickness 字体度量值会被浏览器读取并参与计算。
- 比如
Inter字体默认下划线偏高,而IBM Plex Sans更低;光靠text-underline-offset调整,很难跨字体统一视觉效果 - 真要精细控制,得结合
@font-face的font-underline-offset(目前仅 Firefox 支持,且需字体文件提供对应元数据) - 日常开发建议:定死主力字体后,用 DevTools 的 Layout 面板拖动
text-underline-offset实时预览,比凭空估算靠谱
text-underline-offset,换了个 Google Fonts 链接,下划线又贴上去了。










