移动端适配方案

224 阅读2分钟

Rem 方案

通过页面根元素html中的font-size的大小来集体设置1rem的值,个人理解页面上所有元素全部按照比例排列好,所有元素按照rem调整,进而达到适配目的

在工程化项目中,需要引入postcss-pxtorem外部依赖,通过设置postcss.config.js ,可以将项目中px自动转化为rem单位,需要注意vant UI库,vant是基于375写的,需要进行特殊配置

module.exports = { 
    "plugins": { 
        "postcss-pxtorem": { 
            rootValue({ file }) { 
                return file.indexOf('vant') !== -1 ? 37.5 : 75; 
            }, 
            propList: ['*'] // 需要被转换的属性 
         } 
    } 
}

vw、vh(viewport) 方案

viewport方案即是使用vw/vh作为样式单位。vw、vh将viewport分成了一百等份,1vw等于视口1%的宽度,1vh等于视口1%的高度。 按照设计稿宽度计算1px 等于 多少vw,进而计算出所有组件的vw值,设置所有组件的长宽(单位为vw),从而达到适配目的

100 / 设计稿宽度 = vw / 设计稿组件宽度

在工程化项目中,需要引入postcss-px-to-viewport,通过设置postcss.config.js ,可以将项目中px自动转化为viewport单位,同时需要兼容vant UI组件库

module.exports = ({ file }) => { 
const vwUnit = file && file.indexOf('vant') !== -1 ? 375 : 750; 
    return { 
        plugins: { 
            'postcss-px-to-viewport': { 
                viewportWidth: vwUnit, // 设计稿的宽度 
                unitPrecision: 5, // 转换后的位数,即小数点位数 
                viewportUnit: 'vw', // 转换成的视窗单位 
                propList: ['*'], // 要进行转换的属性,如果某个属性不进行转换,只需在其前加个“!”即可 
                selectorBlackList: [], // 不进行转换的选择器 
                minPixelValue: 1, // 小于或等于1px则不进行转换 
                mediaQuery: true, // 是否在媒体查询的css代码中也进行转换,默认false 
             }, 
         }, 
     }; 
 };

大屏适配方案

除以上两种方案外,还可以使用scale属性进行适配

主要思想,按照实际长宽像素对比设计稿的长宽像素点,选最小值进行scale属性设置,进行整体屏幕缩放适配,需要注意的是,实际长宽比如果不是设计稿的长宽比,需要对大屏背景进行优化