移动端适配方案 vw

vw与px对应关系,100vw为视窗宽度,@vw即为@px对应占多宽
        @px                                     @vw
---------------------- === ----------------------
  design-width                         100vw

移动端页面设计稿宽度:design-width

单位px转化为vw

Sass

$design-width: 750px;
@function px2vw($px) {
  @return round($px / $design-width) * 100vw;
}
width: px2vw(500);

Less

@design-width: 750;
.px2vw(@name, @px) {
  @{name}: round(@px / @design-width, 2) * 100vw;
}
.px2vw(width, 500);

缺点:

  • 扩展性低,不易维护
  • 函数需写到公用Scss/Less文件中,每个模块需导入公用的Scss/Less文件;
  • 代码量增加;
  • 不能转换内联样式;


推荐使用 postcss-px-to-viewport

将px单位转换为视口单位的 (vw, vh, vmin, vmax) 的 PostCSS 插件.

$ npm install postcss-px-to-viewport --save-dev

已vue-cli为例,在vue.config.js文件中添加

module.exports = {
    ...
    css: {
        loaderOptions: {
            postcss: {
                plugins: [
                    require("postcss-px-to-viewport")({
                        unitToConvert: 'px',
                        viewportWidth: 414, // 设计稿宽度
                        unitPrecision: 3, // 转换后的精度
                        propList: ['*'],
                        viewportUnit: 'vw',
                        fontViewportUnit: 'vw',
                        selectorBlackList: [], // 需要忽略的css选择器
                        minPixelValue: 1, // 转换最小数值
                        mediaQuery: false,
                        replace: true,
                        exclude: /(\/|\\)(node_modules)(\/|\\)/,
                        landscape: true,
                        landscapeWidth: 736,
                    })
                ],
            }
        },
     },
    ...
}

配置说明

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容