当前位置: 首页 > 知识库问答 >
问题:

前端 - Taro vue微信小程序,使用px作为单位更换机型后没有自适应该怎么办呢?

葛炯
2023-05-08

Taro官方文档中,推荐使用px作为尺寸单位,在我的项目中,使用px作为单位后,更换机型尺寸没有进行自适应,也就是说一个元素的高度设为297px,在所有机型中都是297px,即594rpx,这样的结果就是我以设计稿的iphone 6机型进行开发后,更换机型页面就会乱掉,以下是效果和 index.js 文件中的配置
7466bd6f3a28a5cfcd04a109e155c36.png
68cf07d85583e14e714e6700c4d7f99.png

const path = require("path");
const fs = require('fs')
const port = process.env.port || process.env.npm_config_port || 80 // 端口

const config = {
  projectName: 'jjtc-applet',
  date: '2021-9-11',
  designWidth: 375,
  deviceRatio: {
    640: 2.34 / 2,
    750: 1,
    828: 1.81 / 2,
    375: 2 / 1
  },
  sourceRoot: 'src',
  outputRoot: 'dist/' + process.env.TARO_ENV,
  plugins: ['@tarojs/plugin-html'],
  defineConstants: {
  },
  alias: {
    // '@': path.resolve(__dirname, '..', 'src/')
    '@/api': path.resolve(__dirname, '..', 'src/api'),
    '@/components': path.resolve(__dirname, '..', 'src/components'),
    '@/utils': path.resolve(__dirname, '..', 'src/utils'),
  },
  copy: {
    options: {
    },
    patterns: [
      { from: 'src/img/', to: 'dist/'+process.env.TARO_ENV+'/img/', ignore: ['*.js'] }, // 指定需要 copy 的目录
    ]
  },
  framework: 'vue3',
  mini: {
    postcss: {
      pxtransform: {
        enable: true,
        config: {
          onePxTransform: true,
          unitPrecision: 5,
          propList: ['*'],
          selectorBlackList: [],
          replace: true,
          mediaQuery: false,
          minPixelValue: 0
        }
      },
      url: {
        enable: true,
        config: {
          limit: 1024 // 设定转换尺寸上限
        }
      },
      cssModules: {
        enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true
        config: {
          namingPattern: 'module', // 转换模式,取值为 global/module
          generateScopedName: '[name]__[local]___[hash:base64:5]'
        }
      }
    }
  },
  h5: {
    publicPath: './',
    staticDirectory: 'static',
    devServer: {
      host: '0.0.0.0',
      port: port,
      open: true,
      proxy: {
        // detail: https://cli.vuejs.org/config/#devserver-proxy
        [process.env.VUE_APP_BASE_API]: {
          target: process.env.VUE_APP_SERVER_URL,
          changeOrigin: true,
          pathRewrite: {
            ['^' + process.env.VUE_APP_BASE_API]: ''
          }
        }
        // "/dev-api": {
        //   target: 'http://192.168.1.66:8080/',
        //   changeOrigin: true,
        //   pathRewrite: {
        //     '^/dev-api': ''
        //   }
        // }
      },
      disableHostCheck: true
    },
    postcss: {
      autoprefixer: {
        enable: true,
        config: {
          onePxTransform: true,
          unitPrecision: 5,
          propList: ['*'],
          selectorBlackList: [],
          replace: true,
          mediaQuery: false,
          minPixelValue: 0,
          baseFontSize: 20,
          maxRootSize: 40,
          minRootSize: 20
        }
      },
      cssModules: {
        enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true
        config: {
          namingPattern: 'module', // 转换模式,取值为 global/module
          generateScopedName: '[name]__[local]___[hash:base64:5]'
        }
      }
    }
  }
}

module.exports = function (merge) {
  if (process.env.NODE_ENV === 'development') {
    return merge({}, config, require('./dev'))
  }
  if (process.env.NODE_ENV === 'production') {
    return merge({}, config, require('./prod'))
  }
  switch (process.env.NODE_ENV) {
    case 'development':
      return merge({}, config, require('./dev'));
    case 'production':
      return merge({}, config, require('./prod'));
    default:{
      console.log(path.resolve(__dirname, process.env.NODE_ENV + '.js'))
      if(fs.existsSync(path.resolve(__dirname, process.env.NODE_ENV + '.js'))) {
        return merge({}, config, require('./' + process.env.NODE_ENV))
      }
      console.error("配置环境变量NODE_ENV错误,使用development配置代替")
      return merge({}, config, require('./dev'));
    }
  }
}

共有2个答案

夏侯昊明
2023-05-08

高度是固定的,不会转化成自适应的形式。

葛雪松
2023-05-08

因为 iPhone X 的屏幕宽度也是 375px 呀…… 只是说屏幕高度会高一些。

如果你是想要铺满屏幕的可以考虑使用 vh 或者 calc() 来处理

 类似资料:
  • 目前使用 markdown 编辑的文章通过 next.js 在构建时进行了预渲染,生成了 html 文件,如果要让小程序也能读取文章,只能先获取 markdown 内容,然后转化为 wxml,但是小程序不支持动态添加 wxml,这个应该怎么渲染?

  • 使用 openDocument 的方式打开的话需要新开页面打开 pdf,使用 web-view 的方式也是类似新开页面。微信小程序能否在当前页面以内嵌的方式预览 pdf?

  • 求帮忙, 需求是vue项目里的某个页面, 只需要这一个, 能自适应大小(自动根据1920设计图计算PX改成rem) 在做的管理系统中, 首页是个大屏, 需要把大屏写在管理系统首页里, 同时也要是个大屏。 所以就需要px-to-rem这种插件。 以前直接写大屏都是用的:@njleonzhang/postcss-px-to-rem 或者postcss-pxtorem。 但是都没用, 会影响整个项目的U

  • 本文向大家介绍微信小程序中单位rpx和rem的使用,包括了微信小程序中单位rpx和rem的使用的使用技巧和注意事项,需要的朋友参考一下 前言 这篇文章主要给大家讲解了rpx和rem应用于微信小程序,如果你还没有入门,建议先从下面看起      微信小程序官方文档      >web app变革之rem      >rpx单位官方文档      >rpx单位基础介绍 如果看完上面几篇文章,我们开始进

  • 写微信小程序用vant tab标签栏发现圈起来的会占剩下的所有高度我去custom-class="benchTab"调高度没有啥用,,下面的标签栏都被挤没有了 没有

  • qiankun 微前端 子应用不支持vite怎么办?