如果你用 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。