移动端用px转vw适配,如何限制最大宽度

1,626 阅读2分钟

好死不死开会的时候我竟然提出逆天的建议,在平板页面限制移动端最大宽度,但是最后想来移动端使用视口单位vw做适配的,无论如何我也不可能改变视口也就是屏幕显示器的宽度,我给自己挖了大坑了!

多方搜索后我看到了这个帖子 下面有位大佬写了一个插件postcss-mobile-forever,我点到github上看了下,抱着试一试的心态,竟然还不错,代码届有这样的大佬真是我们的福气啊!

1、下载方法用github上的,帖子里的是很老的用法!

npm install --save-dev postcss postcss-mobile-forever

如果已经下了px转vw的插件(postcss-px-to-viewport-update)可以不用下postcss。

2、下好了就在postcss.config.js里配置; 因为页面设计稿是414px宽度,所以做了文件适配区分;我们的需求是最大宽度430px,设置最大宽度就可以,但是要关闭各种媒体查询,因为我们只是移动端的效果。

image.png

3、这一步其实页面还是没有变化,原因是我们需要在app.vue里加一个css,在index.html里加插件不能找到。为的是让插件能找到根元素,将其下面的css全部计算了。

image.png

image.png

4、以上大部分的元素都能在宽度大于430px的时候,宽度只到430px,但是个别组件,比如用display:fixed和position:absoluted下面宽度有问题。比如下面这种例子:

image.png

解决办法: 在这个属性里加入元素class名称,将会将width做计算,样式就不乱了

image.png

5、上一步还有不能彻底解决问题,像弹出层,比如这样:

解决办法: 像vant里的popup,我这里是从右侧滑出的,就不设置宽度,设置内容宽度; view-ui plus的drawer也不加宽度,用css设置宽度,插件会自动计算的。

.funnel_drawer .ivu-drawer {
  width:320px !important;
}

以上就是我使用插件的心得!这位大佬写的插件很实用,多给他点星星鼓励吧!

ps后续:因为项目是yarn worksapce项目,有父项目,子项目,移动端是子项目,外层装包后vant等ui插件在父项目node_modules里,导致postcss-loader没有处理外层,只处理了子项目的css样式,所以vant的适配失效了,如下图。

image.png

解决方法就是子项目里配置postcss-loader的路径,这样引用的所有css都会走适配了 postcss-loader的issues

image.png