一、前言:WXSS 是什么?
在微信小程序中,WXSS(WeiXin Style Sheets) 是用于描述页面样式的语言,语法与 CSS 高度相似,但针对小程序运行环境做了优化和扩展。
📌 核心定位 :
WXSS = 小程序的"CSS" + 响应式单位 + 作用域隔离
它让你能轻松实现跨设备适配 、组件化样式管理 和高性能渲染。
本文将带你:
✅ 理解 WXSS 与 CSS 的异同
✅ 掌握 rpx 响应式单位的使用
✅ 学会全局样式与局部样式的组织方式
✅ 避开常见样式坑点,写出高效 UI
二、WXSS vs CSS:关键差异
| 特性 | CSS | WXSS |
|---|---|---|
| 单位 | px, em, rem, % | rpx(核心新增), px, % |
| 选择器 | 支持全部(包括后代、伪类等) | 仅支持部分(见下文) |
| 作用域 | 全局污染(需 BEM/模块化) | 天然局部作用域(页面/组件内有效) |
| 引入方式 | <link> / @import |
仅支持 @import |
| 布局模型 | Flex / Grid / Float | 强烈推荐 Flex(兼容性好) |
💡 记住 :WXSS 是 CSS 的子集 + 扩展,不是完全兼容!
三、核心特性 1:rpx ------ 响应式布局的秘密武器
什么是 rpx?
- rpx(responsive pixel) 是微信小程序的自适应单位
- 规定:屏幕宽度 = 750rpx
- 无论设备分辨率如何,750rpx 始终等于屏幕宽度
换算关系(以 iPhone6 为例):
- 屏幕宽度:375px
- 则:1rpx = 0.5px ,1px = 2rpx
使用示例:
css
/* index.wxss */
.container {
width: 750rpx; /* 满屏 */
padding: 20rpx;
}
.title {
font-size: 32rpx; /* 在 iPhone6 上 ≈ 16px */
margin-bottom: 30rpx;
}
.button {
width: 200rpx;
height: 80rpx;
}
✅ 优势:
- 一套设计稿(750px 宽)直接按比例转 rpx
- 自动适配 iPhone、安卓、平板等不同屏幕
📏 设计师给你的 750px 稿?直接除以 2 得到 rpx 值!
四、核心特性 2:样式作用域与组织方式
1. 页面样式(局部作用域)
pages/home/home.wxss中的样式仅作用于 home 页面- 不会影响其他页面或组件
2. 全局样式(app.wxss)
- 定义在
app.wxss中的样式对所有页面生效 - 适合定义:
- 全局字体、颜色变量
- 通用按钮、卡片样式
- Reset 样式(如
view { box-sizing: border-box; })
css
/* app.wxss */
page {
background-color: #f5f5f5;
font-family: -apple-system, sans-serif;
}
.primary-btn {
background-color: #07c160;
color: white;
border-radius: 8rpx;
}
3. 引入公共样式:@import
可将通用样式抽离为独立文件:
css
/* styles/common.wxss */
.text-center {
text-align: center;
}
.mt20 {
margin-top: 20rpx;
}
css
/* pages/home/home.wxss */
@import "../../styles/common.wxss";
.home-title {
font-weight: bold;
}
✅ 建议:建立
styles/目录管理公共样式
五、WXSS 支持的选择器(重要!)
WXSS 不支持所有 CSS 选择器,仅支持以下类型:
| 选择器 | 示例 | 是否支持 |
|---|---|---|
| 类选择器 | .btn |
✅ |
| ID 选择器 | #header |
✅(但不推荐) |
| 元素选择器 | view, text |
✅ |
| 后代选择器 | .container view |
✅ |
| 伪类 | :active |
✅(仅部分) |
| 相邻兄弟 | view + text |
❌ |
| 通用兄弟 | view ~ text |
❌ |
| 属性选择器 | [type="button"] |
❌ |
| 伪元素 | ::before, ::after |
❌ |
⚠️ 特别注意:
- 不支持
*通配符- 不支持
:hover(移动端无 hover 状态)- 不支持 CSS 动画关键帧中的复杂选择器
六、布局实战:Flex 是首选
由于 WXSS 对传统布局(float、position)支持有限,Flexbox 是小程序布局的黄金标准。
示例:水平居中 + 两端对齐
XML
<!-- wxml -->
<view class="flex-container">
<view class="left">左</view>
<view class="right">右</view>
</view>
css
/* wxss */
.flex-container {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20rpx;
}
常用 Flex 属性:
display: flexflex-direction: row/columnjustify-content: 主轴对齐align-items: 交叉轴对齐flex: 1:剩余空间填充
💡 提示:小程序模拟器可实时预览 Flex 效果
七、常见误区与最佳实践
❌ 误区 1:"可以用 px 写死尺寸"
后果 :在大屏手机上元素过小,小屏手机上溢出
正确做法 :优先使用 rpx,仅在边框(1px)等场景用 px
❌ 误区 2:"全局样式会覆盖组件样式"
事实 :组件样式具有更高优先级(类似 Shadow DOM)
- 组件内部样式 > 页面样式 > 全局样式
✅ 最佳实践:
- 设计稿按 750px 宽制作,数值 ÷2 = rpx
- 公共样式抽离到
@import文件 - 布局优先用 Flex,避免 absolute 定位
- 不要依赖不支持的选择器(提前查文档)
八、调试技巧:如何快速定位样式问题?
-
开发者工具 → Elements 面板
- 可查看元素盒模型、应用的样式
- 支持实时修改 WXSS(仅模拟器)
-
真机调试
- 打开【vConsole】查看布局异常
- 注意 iOS 与 Android 渲染差异(如字体)
-
使用 class 而非内联 style
XML<!-- ❌ 不推荐 --> <view style="color: red; font-size: 32rpx;">文本</view> <!-- ✅ 推荐 --> <view class="error-text">文本</view>
九、结语
感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!