对postcss-pxtorem的理解

插入一个题外bug

问题一:在vite + vue3 + postcss-pxtorem + vant 中,在本地运行时样式正常,提交代码到测试分支之后,样式错乱,vant组件的字体都大了一倍。

查阅了vant的官方文档,在浏览器自适应中看到vant推荐使用 postcss-px-to-viewport 进行转换。 vant的作者设计稿是按照375来的,我们公司的设计稿尺寸一般都是750,所以需要做一个配置

正题

当前移动端比较流行的适配方式有:
1、postcss-pxtorem + amfe-flexible

postcss-pxtorem用于将px转rem,amfe-flexible用来动态设置HTML的字体大小,去适配不同大小的屏幕。

第一步: 先安装postcss-pxtorem,然后在根目录建立一个文件名为postcss.config.js的文件,加入以下配置, rootVlue可以随意设置

搭配amfe-flexible插件来使用的话,rootValue是值就是设计稿的尺寸除以10,我们公司设设计稿一般是750,所以这里设置75

第二步:配置好之后上面的文件,在main.ts文件引入amfe-flexible这个插件就可以啦
第三步: 开始在less文件中编写样式

css 复制代码
@bg: black;
.text1{
    font-size: 36px;
    color:@bg
}

运行之后:

css 复制代码
@bg: black;
.text1{
    font-size: 0.48rem;
    color:@bg
}

这里展示一下amfe-flexible的源码,他是以10作为基数来计算

当设计稿为750的时候,把设计稿分成10份,那么根html的节点1rem = 75px, 这里html根字体大小不管怎么改变,都是初始值75的倍数

核心代码就是这段

假如设备窗口是393px,amfe-flexible的源码是 393/10 = 39.3,也可以这么计算, (393/750)* 75 = 39.3(不管怎么改变,都是初始值75的倍数)

举例 n = 16,设置rootValue 为16

假设n = 16

如果n设置为16,不是一个倍数关系,那么就不能使用amfe-flexible来动态改变html根节点的大小。

在postcss.fonfig.js中把rootValue设置为16

新建一个flexible.js文件,在main.ts中引入,这个文件的作用和amfe-flexible的作用想通,用来动态设置html字体大小。 其实核心原理就是比例相同,通过动态设置html的字体大小去达到自适应的效果

也可以这样写 更容易理解一些(就是去更改16倍数,不管html根字体大小怎么变,都是16的倍数):

按照750的设计稿尺寸,代码正常编写px,编译运行之后会自动转为rem

css 复制代码
@bg: black;
.text1{
    font-size: 36px;
    color:@bg
}

运行之后:

css 复制代码
@bg: black;
.text1{
    font-size: 2.25rem;
    color:@bg
}

不管视口宽度怎么变化,在运行之后,px转rem的数值都是一样的,变量是根html font-size的大小。

初始值设置的16,即1rem = 16px, 1rem = a px,随着视口的放大,缩小,a一定是16的倍数。

下面两个图展示了,视口宽度为375和750时,fong-size大小始终都是2.25rem

2、vw方案 postcss-px2vp
js 复制代码
npm i -D postcss-px2vp类似

根目录创建postcss.config.js 文件:

js 复制代码
module.exports = {
    plugins: {
        'postcss-px2vp': {
            viewportWidth(rule) { // 1. 如果设计稿宽度是750px + 使用Vant
                const file = rule.source?.input.file
                return file?.includes('vant') ? 375 : 750;
            },
            // viewportWidth: 750, // 2.如果设计稿宽度是 750px + 不适用Vant
            // viewportWidth: 375, // 3.如果设计稿宽度是 375px + 无论是否使用Vant
            propList: ['*','!font*','!line-height','!letter-spacing'],
        },
    },
};

修改postcss.config.js文件,需要重启

3、postcss-px-to-viewport插件,和postcss-px2vp类似

参考资料:

react项目适配postcss-pxtorem插件

了解postcss-pvtorem

移动端适配方案

相关推荐
J***Q29221 分钟前
前端路由,React Router
前端·react.js·前端框架
1***815322 分钟前
前端路由参数传递,React与Vue实现
前端·vue.js·react.js
q***13611 小时前
十七:Spring Boot依赖 (2)-- spring-boot-starter-web 依赖详解
前端·spring boot·后端
xixixi777772 小时前
了解一下Sentry(一个开源的实时错误监控平台)
前端·安全·开源·安全威胁分析·监控·sentry
Keely402852 小时前
学习编写chrome插件:Hello World 扩展
前端·chrome
hhcccchh3 小时前
学习vue第三天 Vue 前端项目结构的说明
前端·vue.js·学习
源力祁老师4 小时前
Odoo 19 制造与会计集成深度解析
前端·javascript·制造
iFlow_AI4 小时前
iFlow CLI Hooks 「从入门到实战」应用指南
开发语言·前端·javascript·人工智能·ai·iflow·iflow cli
漂流瓶jz4 小时前
SourceMap数据生成核心原理:简化字段与Base64VLQ编码
前端·javascript·算法