移动端适配方案,看一遍就懂

954 阅读3分钟

我们直接来正题吧:

方案一:(rem+vw)

现代浏览器支持设备屏幕宽度为100vw,也就是把设备宽度分成了10份,每一份为10vw,而对于常见的移动度设备宽度。一般为375(750)。我们可以得到这样一个关系:

100vw=375(750)px.我们以具体的750为例。

100vw被划分为750px,那1px=100/750=0.133333vw,那100px=13.3333vw,而我们知道:1rem等于html根元素设定的font-size的px值,那此时如果我们把html的根字体大小设置成13.333vw,那就意味着1rem=13.333vw,也就是1rem=13.333vw=100px,那我们就建立了rem和px之间的关系。1rem=100px,这样我们在面对设计稿进行黄色的时候就可以直接通过写rem来解决问题了。比如设计稿:给我们的样式如下 .wrap{ width:320px;height:180}, 那根据换算规则。我们可以直接写成.wrap{width:3.2rem,1.8rem}

这个解决方案核心还是利用了rem来实现。只是巧妙的利用了vw进行了一次中间转化

方案二:纯vw解决方案

我们知道浏览器支持设备屏幕宽度为100vw,也就是把设备宽度分成了10份,每一份为10vw,而对于常见的移动度设备宽度。一般为375(750),也就是说

对于750的设计稿: 1px=100/750=0.133333333vw;

对于375的设计稿 : 1px=100/375=0.266666666vw

那如果我们把所有的px能全部转化为vw不就解决问题了。比如

比如设计稿(375为例):

.wrap{ width:310px;height:180px}。那我们直接换算成vw单位就是

width:310*0.26666~=82.667vw

height:180*0.266666=47.99999vw ~=48vw

唯一的缺陷就是每次都要手动计算。非常繁琐,幸好社区有一个插件帮我们解决了这个问题,那就是postcss-px-to-vw.我们只需要安装以后做基本配置,然后项目中继续对着设计稿写px,运行以后它会自动转化为vw单位。

step1: 安装 npm i postcss-px-to-viewport -S

step2 : 根目录新建一个postcss.config.js,做如下配置:

    plugins: {
        "postcss-px-to-viewport": {
            unitToConvert: "px", // 默认值`px`,需要转换的单位

            viewportWidth: 375, //视窗的宽度,对应的是我们设计稿的宽度 375                        unitPrecision: 3, //指定`px`转换为视窗单位值的小数位数,默认是5(很多时候无法整除)

            viewportUnit: 'vw', //指定需要转换成的视窗单位,建议使用vw

            fontViewportUnit: 'vw', //指定字体需要转换成的视窗单位,默认vw;

            minPixelValue: 1, // 小于或等于`1px`不转换为视窗单位

            mediaQuery: false, // 允许在媒体查询中转换`px`,默认false

            exclude: [/node_modules/], //如果是regexp, 忽略全部匹配文件;如果是数组array, 忽略指定文件

        }

    }

}

20210918150517329.png 运行后 转化

2.png 这里特别注意:

3.png