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

前端 - 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() 来处理

 类似资料:
  • 使用 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单位基础介绍 如果看完上面几篇文章,我们开始进

  • 菜名和价格可以左右对齐,但是这中间的虚线或者点应该怎么做,放在他们中间,我没什么好的思路 我目前想的是设一个基准,比如说一百个‘·’,然后菜名多一个字就减去几个点,价格多一位就减去几个点,这个思路,但是又感觉不一定对得齐

  • 该应用程序在模拟器中运行良好,但在手机上安装后,每次启动时都会崩溃,logcat没有显示错误。 发生这样的事我该怎么办?

  • 根据需求,小程序使用的自定义的tabbar,然后position是fixed,但是使用评论功能的时候,会打开手机键盘,此时自定义的tabbar就被手机键盘顶起了,评论框本来也是底部弹出,被顶起的tabbar遮挡了