<p>uni-app自定义导航栏文字溢出隐藏生效的关键是:必须同时设置容器position: absolute + left/right定位、max-width(如calc(100% - 80px))、white-space: nowrap、overflow: hidden、text-overflow: ellipsis,并确保父容器有position: relative。</p>

uni-app自定义导航栏中文字溢出隐藏的通用写法
直接生效的关键是:必须同时控制容器宽度、强制单行、隐藏溢出,且不能依赖 flex: 1 或 width: 100% 这类在自定义导航栏里容易失效的弹性行为。
uni-app 的自定义导航栏(custom 模式)下,标题区域通常用 uni-nav-bar 或手写 view 包裹,但其父容器宽度常受状态栏、左右按钮挤压,导致 white-space: nowrap; overflow: hidden; text-overflow: ellipsis; 失效——根本原因是元素没被赋予明确的“可用最大宽度”。
- 给标题容器加
position: absolute+left/right定位(避开左右按钮占位) - 必须设置
max-width(推荐calc(100% - 80px),预留左右按钮总宽) - 强制单行三件套缺一不可:
white-space: nowrap、overflow: hidden、text-overflow: ellipsis - 确保父容器有
position: relative,否则absolute会相对 viewport 定位
uni-app中使用uni-nav-bar时标题溢出不生效的修复
uni-nav-bar 默认把 title 渲染成 text 节点,内部未设宽度约束,且部分平台(如微信小程序)会忽略 text 上的 text-overflow。最稳方案是禁用默认 title,改用插槽自定义内容。
- 设置
:title="''"清空默认文本 - 在
left和right插槽放按钮,在center插槽放自定义view - 该
view需设class="nav-title"并配以下样式:
.nav-title {
position: absolute;
left: 80px;
right: 80px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
text-align: center;
font-size: 16px;
}不同平台对text-overflow: ellipsis的支持差异
H5 和 App(基于 WebView)基本没问题;微信小程序真机上,text 组件不支持 text-overflow,必须用 view + text 嵌套,且外层 view 才能设溢出样式;支付宝小程序则要求 view 必须有明确 width 或 max-width,仅靠 left/right 不够。
立即学习“前端免费学习笔记(深入)”;
- 跨平台安全写法:外层
view设position: absolute; left: 80px; right: 80px; max-width: calc(100vw - 160px) - 内层
text只负责显示,不设宽、不设溢出 - 避免在
text上直接写text-overflow,它在多数小程序里无效
长标题动态截断的边界情况处理
纯 CSS 的 text-overflow: ellipsis 只能截单行,如果业务需要多行省略(比如副标题),CSS 方案不可靠,需 JS 控制字数或用 uni.getSystemInfo 动态算像素宽度后截断字符串。
- 单行场景下,
font-size和font-family必须固定,否则不同设备字符宽度不一致,省略位置会偏移 - 中英文混排时,英文单词可能整体换行破坏单行约束,加
word-break: keep-all更稳妥 - 超长标题首次渲染时若父容器还未完成布局(如异步获取标题),建议加
$nextTick后再触发重绘
最易被忽略的是:自定义导航栏里所有定位都依赖父容器的 position: relative,而 uni-app 的 page 根节点默认不是 relative,必须手动在页面根 view 上加 style="position: relative;",否则 absolute 标题会飘到页面顶部之外。


















