当前位置:首页 > VUE

vue移动端实现适配

2026-02-25 02:14:30VUE

Vue 移动端适配方案

视口配置

public/index.html 中添加 meta 标签,设置视口宽度等于设备宽度,并禁止缩放:

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">

使用 REM 适配

安装 postcss-pxtorem 插件:

npm install postcss-pxtorem --save-dev

配置 postcss.config.js

module.exports = {
  plugins: {
    'postcss-pxtorem': {
      rootValue: 37.5, // 设计稿宽度/10
      propList: ['*'],
      selectorBlackList: ['.norem']
    }
  }
}

在入口文件添加动态计算根字体大小:

function setRem() {
  const docEl = document.documentElement
  const width = docEl.clientWidth
  docEl.style.fontSize = width / 10 + 'px'
}
window.addEventListener('resize', setRem)
setRem()

使用 VW 适配

安装 postcss-px-to-viewport 插件:

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

配置 postcss.config.js

module.exports = {
  plugins: {
    'postcss-px-to-viewport': {
      viewportWidth: 375, // 设计稿宽度
      unitPrecision: 5,
      viewportUnit: 'vw',
      selectorBlackList: ['.ignore'],
      minPixelValue: 1,
      mediaQuery: false
    }
  }
}

响应式布局

使用 CSS 媒体查询实现不同屏幕尺寸适配:

@media screen and (max-width: 768px) {
  .container {
    width: 100%;
  }
}
@media screen and (min-width: 769px) {
  .container {
    width: 750px;
  }
}

组件库适配

对于 Vant 等移动端组件库,需要在项目中配置按需加载和适配:

// babel.config.js
module.exports = {
  plugins: [
    ['import', {
      libraryName: 'vant',
      libraryDirectory: 'es',
      style: name => `${name}/style/less`
    }, 'vant']
  ]
}

1px 边框问题

使用伪元素和 transform 解决高清屏下 1px 边框变粗问题:

.border-1px {
  position: relative;
}
.border-1px::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: 0;
  width: 100%;
  height: 1px;
  background: #ddd;
  transform: scaleY(0.5);
  transform-origin: 0 0;
}

图片适配

使用 srcset 属性提供不同分辨率图片:

<img src="image@1x.jpg" srcset="image@1x.jpg 1x, image@2x.jpg 2x" alt="">

横竖屏检测

监听 orientationchange 事件处理横竖屏变化:

vue移动端实现适配

window.addEventListener('orientationchange', function() {
  if (window.orientation === 90 || window.orientation === -90) {
    console.log('横屏')
  } else {
    console.log('竖屏')
  }
})

标签: vue
分享给朋友:

相关文章

vue实现aop切面

vue实现aop切面

Vue 实现 AOP 切面编程的方法 在 Vue 中实现 AOP(面向切面编程)可以通过多种方式,以下是几种常见的实现方法: 使用 Vue 混入(Mixins) Vue 的混入机制可以用于实现横切关…

vue表格重置怎么实现

vue表格重置怎么实现

重置表格数据的方法 在Vue中重置表格数据通常需要操作绑定的数据源,以下是几种常见实现方式: 直接重置数据源 // 假设表格绑定的是tableData this.tableData = [...t…

vue实现微博发布动态

vue实现微博发布动态

使用Vue实现微博发布动态功能 创建Vue组件结构 新建一个WeiboPost.vue组件,包含文本框、图片上传和发布按钮: <template> <div class="we…

vue实现加减

vue实现加减

Vue 实现加减功能 在 Vue 中实现加减功能可以通过数据绑定和事件监听来完成。以下是一个简单的实现方法: 模板部分 <template> <div> <…

vue 实现vshow

vue 实现vshow

Vue 实现 v-show 在 Vue 中,v-show 是一个常用的指令,用于根据条件控制元素的显示或隐藏。与 v-if 不同,v-show 不会移除 DOM 元素,而是通过 CSS 的 displ…

vue逻辑实现怎么实现

vue逻辑实现怎么实现

Vue 逻辑实现方法 Vue 的逻辑实现主要通过组件化、响应式数据、计算属性、方法、生命周期钩子等方式完成。以下是一些核心实现方法: 数据驱动与响应式 在 Vue 中,通过 data 选项定义响应式…