# WXSS
WXSS(WeiXin Style Sheets)是一套样式语言,用于描述 WXML 的组件样式。
为了适应广大的前端开发者,WXSS 具有 CSS 大部分特性。以下是一些常见的 WXSS 语法。
# 样式规则定义
与 CSS 一致,可以通过选择器指定节点的样式。
/* page.wxss */
/* 指定 class 含有 important-text 的节点的样式 */
.important-text {
font-size: 1.2em;
color: red;
}
上面的样式规则可以被应用到对应的 WXML 中。
<!-- page.wxml -->
<view class="important-text"> 重要信息 </view>
# 合理使用选择器
WXSS 支持绝大多数 CSS 选择器,但有个别例外:属性名选择器 [...] 不会生效;不支持带参数的伪类和伪元素选择器。
从最佳实践上看,在编写样式表时只推荐使用 class 选择器,因为这样往往可以让代码更加清晰。下面是一个简单的例子:
.hint {
padding: 5px;
}
.important-text {
font-size: 1.2em;
color: red;
}
.minor-text {
font-size: 0.8em;
color: #666;
}
<!-- page.wxml -->
<view class="hint important-text"> 重要信息 </view>
<view class="hint"> 信息 </view>
<view class="hint minor-text"> 附注 </view>
# 内联样式
样式规则内容也可以直接写在 WXML 内的节点 style 中,例如:
<!-- 可以将样式写在 style="..." 中,不过实践中要慎用 -->
<view style="font-size: 1.2em; color: red;"> 重要信息 </view>
从最佳实践上看,style 中不应放置很长的样式规则,否则会大大降低代码的可读性。通常,只有要用到数据绑定时,才使用这种写法,例如:
<!-- page.wxml -->
<view style="color: {{color}};"> {{colorName}} </view>
// page.js
Page({
data: {
color: 'yellow',
colorName: '黄色',
},
})
# 样式导入
类似于 CSS,可以使用 @import 导入其他 WXSS 文件。这是一种简单的跨页面样式代码共享的方式。
/** common.wxss **/
.hint {
padding: 5px;
}
/** page-a.wxss **/
@import "common.wxss"; /* 相当于将 common.wxss 的内容插在这里 */
.minor-text {
font-size: 0.8em;
color: #666;
}
/** page-b.wxss **/
@import "common.wxss"; /* 相当于将 common.wxss 的内容插在这里 */
.important-text {
font-size: 1.2em;
color: red;
}
# 全局样式
app.wxss 文件中的样式为全局样式,一般情况下会作用于所有页面(页面也可以通过配置禁止 app.wxss 对它生效)。
从最佳实践上看,app.wxss 只适合放入绝大多数页面都必须要用到的样式。改用 @import 样式导入的方式往往更为灵活。
# 基于屏幕宽度比例的长度单位
在实践中,有些页面内容的尺寸需要根据屏幕尺寸来确定。
在这种情况下,可以使用 CSS 标准的 vw 长度单位。1vw 等于页面总宽度的百分之一。例如,页面宽度为 375px 时,1vw 就相当于 3.75px。
由于历史原因,WXSS 也支持一个类似的长度单位 rpx,用于表达页面总宽度的 1 / 750。例如,页面宽度为 375px 时,1rpx 就相当于 0.5px。不过,rpx 的计算规则有时会对转换后的数值进行取整,从而带来一些精度问题;想避免这样的问题,可以考虑开启 convertRpxToVw 选项。此外,由于现在 CSS 标准的 vw 单位已经得到广泛支持,所以还是优先推荐使用 vw。
注意:考虑到对手机、PC 等大屏幕设备的支持, 不建议滥用 vw rpx 等基于屏幕宽度比例的单位 ;如果不可避免,请联合使用 Media Query 等响应式布局方式,详情参考 响应显示区域变化 。
# 渲染引擎对 WXSS 的影响
请注意,渲染引擎会对 WXSS 语法有额外的限制:
- 如果在使用默认的 WebView 渲染引擎,由于不同操作系统自带的 WebView 引擎也不尽相同,请注意样式表兼容性也会受到不同版本操作系统的影响;
- 如果在使用 Skyline 渲染引擎,请额外参考它的 相关说明 。