微信小程序: WXSS 样式(隔离与覆盖), px转rpx, 安全区适配

442 阅读2分钟

WXSS 样式

WXSS 样式

【小程序】wxss与rpx单位以及全局样式和局部样式-腾讯云开发者社区-腾讯云 (tencent.com)

全局样式

定义在 app.wxss 中的样式为全局样式,作用于每一个页面。

局部样式

页面.wxss 文件中定义的样式为局部样式,只作用于当前页面。 注意: 当局部样式和全局样式冲突时,根据就近原则,局部样式会覆盖全局样式 当局部样式的权重大于或等于全局样式的权重时,才会覆盖全局的样式

样式隔离与覆盖

探究微信小程序的样式隔离 - 掘金 (juejin.cn)

样式覆盖 - Vant Weapp (youzan.github.io)

rpx单位

小程序框架 / 视图层 / WXSS (qq.com)

px转rpx

微信小程序——获取到px转化为rpx(根据设备宽高动态设置元素宽高)_wx.getsysteminfo rpx-CSDN博客

scss中写一个处理px转化rpx的函数_pxtorpx函数-CSDN博客

原生小程序npm组件px转rpx - 掘金 (juejin.cn)

微信小程序Vant组件px转rpx - 掘金 (juejin.cn)

在微信小程序里使用rpx,被坑了😕 | 不同设备表现不同 - 掘金 (juejin.cn)

将vant所有组件的px转为rpx

npm i gulp gulp-postcss postcss-px2units -D

根目录创建gulpfile.js文件

var gulp = require('gulp');
var postcss = require('gulp-postcss');
var pxtounits =  require('postcss-px2units');

gulp.task('css', function () {
  // 这里的路径都是从项目根目录开始
  return gulp.src(['miniprogram/miniprogram_npm/@vant/weapp/**/*.wxss'])
    .pipe(postcss([pxtounits({
      // multiple 是配置1px对应多少rpx, 这里表示 1px 对应 2rpx
      multiple: 2,
      targetUnits: 'rpx'
    })]))
    .pipe(gulp.dest('miniprogram/miniprogram_npm/@vant/weapp/'));
});

使用scss函数将px转rpx

/**
1px对应多少rpx

当前值表示: 1px对应2rpx
典型手机的px与rpx对应关系: https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxss.html#%E5%B0%BA%E5%AF%B8%E5%8D%95%E4%BD%8D
**/
$multiple: 2rpx;

/*
转换函数 (15) ==> 30rpx (15,30) ==> 30rpx 60rpx
转换函数 params 可传参数 无上限

使用
.title {
    width: cover(375); // width:750rpx;
    height: cover(10); // height:20rpx;
    padding:cover(10,20,30,40); // padding:20rpx 40rpx 60rpx 80rpx;
    box-shadow: cover(0,1,16) rgba(56, 56, 71, 0.2); // box-shadow: 0 2rpx 16rpx rgba(56, 56, 71, 0.2);
}
*/
@function cover($t...) {
    $i: 1;
    $result: 0;

    @while $i <=length($t) {
        @if($i ==1) {
            $result: (
                nth($t, $i) * $multiple
            );
    }

    @else {
        $result: append($result, (nth($t, $i) * $multiple))
    }

    $i: $i + 1;
}

@return $result;
}

安全区适配

微信小程序中安全区域计算和适配 | 微信开放社区 (qq.com)