美文网首页
移动端屏幕适配方案

移动端屏幕适配方案

作者: zhongjh | 来源:发表于2025-09-02 15:59 被阅读0次

根据移动端配置,先安装

安装

// npm
npm install postcss-pxtorem --save-dev

// yarn
yarn add postcss-pxtorem --save-dev

配置postcss.config.js

在项目根目录创建文件postcss.config.js ;
按需输入以下内容:

module.exports = {
  plugins: {
    'postcss-pxtorem': {
      rootValue: 75,
      propList: ['*'], // Convert all properties
      unitPrecision: 6, // Decimal places for rem values
      selectorBlackList: ['.van'], // Exclude .van-* classes
      replace: true,
      mediaQuery: false, // Don't convert media queries
      minPixelValue: 2 // Minimum pixel value to convert
    }
  }
}

新建文件 utils/platform.js

const navigator = window.navigator
export default {
  isIphone() {
    const userAgent = navigator.userAgent.toLowerCase()
    return /\(i[^;]+;( U;)? CPU.+Mac OS X/gi.test(userAgent)
  },
  isIphoneXLater() {
    return this.isIphone() && window.screen.height >= 812
  },
  isAndroid() {
    const userAgent = navigator.userAgent.toLowerCase()
    return /android|adr/gi.test(userAgent)
  },
  isApp() {
    const userAgent = navigator.userAgent.toLowerCase()
    return userAgent.includes('@xxxxx')
  },
  // 模拟器平台
  isSimulatorApp() {
    const platform = navigator.platform.toLowerCase()
    return !((this.isIphone() && platform.includes('iphone')) || (this.isAndroid() && platform.includes('linux')) || this.isHarmonyOs())
  },
  // 微信平台
  isWechat() {
    const userAgent = navigator.userAgent.toLowerCase()
    return userAgent.includes('micromessenger') && !userAgent.includes('wxwork')
  },
  isHarmonyOs: function() {
    var tmp = navigator.userAgent.toLowerCase();
    var harmonyos = tmp.indexOf('dcfundharmonyos') > -1;
    return !!harmonyos;
  },
  isHideHeaderWebview() {
    const userAgent = navigator.userAgent.toLowerCase()
    return userAgent.includes('@hideheader')
  }
}

新建文件 utils/rem.js


import platform from '@/utils/platform'
  ; (function () {
    // 动态设置根元素字体大小
    function setRemUnit() {
      // 屏幕宽度(设备独立像素)
      const deviceWidth = document.documentElement.clientWidth || window.innerWidth;
      // 限制最大宽度(避免在平板等大屏设备上过大)
      const maxWidth = 750;
      const scale = deviceWidth > maxWidth ? maxWidth / deviceWidth : 1;
      // 根元素字体大小 = 屏幕宽度 * scale / 10(与 rootValue 对应)
      document.documentElement.style.fontSize = (deviceWidth * scale) / 10 + 'px';
    }

    // 初始化
    setRemUnit();
    // 监听窗口大小变化(横竖屏切换、窗口缩放)
    window.addEventListener('resize', setRemUnit);
    window.addEventListener('orientationchange', setRemUnit);
    platform.isIphone() && document.body.addEventListener("focusout", function () {
      setTimeout(function () {
        document.body.scrollIntoView()
      }, 0)
    })
    window.addEventListener('touchend', function (e) {
      var tag = document.activeElement.tagName || "";
      if ((tag !== 'INPUT' && tag !== 'TEXTAREA') || (e && e.target && e.target.tagName !== 'INPUT' && e.target.tagName !== 'TEXTAREA')) {
        document.activeElement.blur()
      }
    })
  })();

然后在main.js引入即可

import './utils/rem.js'

相关文章

  • vue3.0 高仿饿了么项目(项目初始化)

    对于移动端适配的理解 常用rem作为适配方案 对于flex的理解 样式当前有效 项目初始化 移动端屏幕禁止缩放 ...

  • 移动端适配

    移动端适配 dpr、DPI、PPI 视口 移动端适配的方案 微信小程序适配方案 微信小程序开发

  • 移动端适配方案

    理由:由于现代移动端的设备比较复杂繁多,需要在不同屏幕下能够有很好的显示,需要屏幕适配。 1.屏幕适配方案由以下几...

  • 微信小游戏屏幕适配

    作者: 何永峰;标签: 屏幕适配 屏幕适配 适配都是老生常谈,移动端要根据手机屏幕适配,PC端也有时候根据不同的...

  • LayaAir屏幕适配

    LayaAir屏幕适配 官方教程链接:LayaAir实战开发11-屏幕适配 屏幕适配 随着移动端设备(手机、平板、...

  • 移动端开发(Html+Css)

    placeholder自定义 移动端适配CSS方案 移动端适配方案一 font-size可能需要额外的媒介查询,并...

  • 移动H5页面开发多屏适配 - viewport和像素篇

    最近刚刚接触移动端的页面开发,遇到的第一个问题就是搞清楚多屏适配的方案。要知道多屏适配的原理就要知道移动端各种屏幕...

  • 移动H5页面开发多屏适配 - viewport和像素篇

    最近刚刚接触移动端的页面开发,遇到的第一个问题就是搞清楚多屏适配的方案。要知道多屏适配的原理就要知道移动端各种屏幕...

  • 移动端屏幕适配

    首先了解一下rem是什么?它的全称是 font size of the root element (根元素的字体大...

  • 移动端屏幕适配

网友评论

      本文标题:移动端屏幕适配方案

      本文链接:https://www.haomeiwen.com/subject/elrvajtx.html