uni-app 小程序开发:`page {}` 里的 `page` 到底是什么?

2 阅读2分钟

如果你用 uni-app 开发微信小程序,可能会在页面的 <style> 里看到这种写法:

page {
  background: #000;
}

你会猜想:page 是不是 Vue 的语法?其实不是。这里的 page 是 微信原生小程序(wxss)里的特殊选择器,在 uni-app 的 mp-weixin 编译目标中同样会生效。

1. page 的含义:页面根容器

在微信原生小程序里,page {} 用来匹配当前页面最外层的根容器(可以理解为“整页的容器”)。

所以写:

page {
  background: #000000;
}

通常就表示:把当前页面整块区域的背景色设置为黑色,避免页面外层出现默认白底、透明导致的“露底”等问题。

2. uni-app 里什么时候常用它?

在 uni-app 的页面组件里,你可能会这样使用:

<template>
  <view class="test-container">
    <!-- 页面内容 -->
  </view>
</template>
<style>
page {
  background: #000000;
}
</style>
<style scoped>
/* 只作用于组件内部 class / 元素的样式 */
.test-container {
  height: 100vh;
}
</style>

经验上,page {} 适合做这些事:

  • 页面级背景色(最常见)
  • 页面级高度/最小高度(配合布局容错)
  • 需要影响“整屏”的基础样式

3. page vs .xxx:影响范围不同

  • page { ... }:作用范围是页面根容器(整页级别)
  • .xxx { ... }:作用范围是某个具体元素/组件内部元素(通常需要你给对应元素设置 class

因此如果你的目标是“整个页面底色”,优先用 page {};如果只是某个模块要上色,用 class 更合适。

4. 注意 scoped:不要指望它对 page 生效

uni-app 里如果你把规则写进了:

page { background: #000; }

大概率不会按你直觉生效,因为 scoped 会引入选择器作用域的标记机制,导致 page 这个特殊全局选择器可能匹配不到微信小程序侧的根容器。

建议做法是:

  • 页面级效果用 不带 scoped 的 <style>
  • 模块级效果用 带 scoped 的 <style scoped>

5. 适用范围:它主要面向 mp-weixin

page {} 这种语法属于微信小程序体系的选择器概念。在 uni-app 的不同端(H5、App 等)上,效果可能不同甚至无效。

因此写法通常是:当你确认当前目标是 mp-weixin(微信小程序)时,page {} 才是最可靠的整页级方案。

小结

在 uni-app 的微信小程序开发中,page {} 里的 page 不是 Vue 关键字,而是 微信小程序的页面根容器选择器。它用来控制“当前页面整体”的样式(例如整页背景色),比起只改某个 class,更贴近你想要的“整屏效果”。

如果你愿意,把你遇到的具体“样式没生效/露底”的场景贴一下(例如背景色、滚动区域、tabbar 场景),我可以帮你判断应该用 page 还是应该改容器结构与 class。