最稳定方案是设置App.vue中.uni-app容器背景色,因其跨平台覆盖整个视口;页面级需用min-height:100vh+背景色,scroll-view需显式设height,custom导航栏下须手动处理全屏撑满。

uni-app 页面级背景色设置不生效的常见原因
直接在 pages.json 里给页面配置 "backgroundTextStyle" 或写 CSS 的 body 样式,通常不起作用——因为 uni-app 的页面容器实际是嵌套在自定义 WebView 容器里的,原生层默认背景为白色,且页面根元素(<page> 或 <view>)默认不撑满全屏。
pages.json 中设置 navigationStyle: custom 后必须手动处理背景
一旦启用自定义导航栏,页面内容区域会从状态栏下方开始渲染,但此时 <page> 元素仍不会自动占满整个可滚动区域。关键点在于:uni-app 生成的页面 DOM 结构中,最外层容器类名通常是 uni-page-body,而它默认高度由内容撑开,不是 100vh。
- 在页面根
<view>上加style="min-height: 100vh; background-color: #f0f9ff;" - 若使用
<scroll-view>,需额外设style="height: 100vh;",否则内部background-color只作用于内容高度范围 - 避免仅依赖
page { background: ... },H5 端可能部分生效,但小程序端完全无效
全局统一背景色推荐方案:修改 App.vue 的 .uni-app 样式
这是最稳定、跨平台兼容的方式。uni-app 在所有页面外层包裹了一个 class 为 uni-app 的容器,它始终覆盖整个视口。
<style>
.uni-app {
background-color: #f8f9fa;
}
</style>
注意:.uni-app 是框架注入的顶层容器,不是开发者写的标签;该样式对 App、H5、微信小程序等全部平台生效,且无需每个页面重复设置。
条件性设置背景色(如夜间模式)时别忘了重置 scroll-view 高度
动态切换背景色时,如果页面用了 <scroll-view>,它的 height 值不会随 vh 变化自动更新,容易导致底部留白或截断。
- 用
:style="{ height: windowHeight + 'px' }"绑定动态高度(通过uni.getSystemInfoSync().windowHeight获取) - 监听
resize事件(H5)或onWindowResize(App)来更新高度 - 小程序端无法监听窗口大小变化,所以更推荐用
min-height: 100vh+ 固定背景色方案,避开动态计算
真正要命的不是“怎么设”,而是“设在哪一层”——.uni-app 容器才是唯一能稳稳托住所有页面的底座,其他任何局部样式都可能被平台渲染机制绕过。


















