Vue移动端适配实战:我用rem搞定各种奇葩屏幕!

大家好,我是小杨,一个和移动端适配斗智斗勇6年的前端er。今天要和大家分享的是我在Vue项目中最常用的移动端适配方案------rem布局。

记得刚入行时,我被各种尺寸的手机屏幕折磨得够呛:明明在iPhone上好好的页面,到小米手机上就乱成一锅粥。后来掌握了rem这个神器,终于可以优雅地解决各种屏幕适配问题。下面就把我的实战经验分享给大家!


一、为什么要用rem?

先说说我踩过的坑:

  • 用px布局:在不同尺寸屏幕上要么太大要么太小
  • 用百分比布局:计算复杂,维护困难
  • 用vw/vh:兼容性要求高,老项目不敢用

rem的优势 :

✅ 根字体大小可控

✅ 适配各种屏幕尺寸

✅ 计算简单,维护方便


二、手把手配置rem适配

1. 安装必备工具

bash 复制代码
npm install postcss-pxtorem amfe-flexible -D

2. 配置flexible.js(动态设置根字体大小)

在main.js中引入:

javascript 复制代码
import 'amfe-flexible'

3. 配置postcss-pxtorem(自动转换px为rem)

在项目根目录创建postcss.config.js:

javascript 复制代码
module.exports = {
  plugins: {
    'postcss-pxtorem': {
      rootValue: 37.5, // 设计稿宽度/10(比如375设计稿就是37.5)
      propList: ['*'],
      selectorBlackList: ['.norem'] // 过滤掉.norem开头的class
    }
  }
}

4. 设计稿使用技巧

假设设计稿是375px:

  • 直接量取设计稿尺寸(如100px)
  • 代码中直接写100px,会自动转换为rem
  • 不需要自己计算!

三、我的实战代码示例

vue 复制代码
<template>
  <div class="container">
    <!-- 直接使用设计稿尺寸 -->
    <div class="box" style="width: 100px; height: 50px;"></div>
    
    <!-- 不想转换的样式加no-rem -->
    <div class="norem-fixed-size">固定尺寸元素</div>
  </div>
</template>

<style scoped>
/* 正常写px,会自动转换 */
.box {
  margin: 10px; /* 会自动转为rem */
  background: #f00;
}

/* 不想被转换的样式 */
.norem-fixed-size {
  width: 1px; /* 不会转换 */
}
</style>

四、常见问题解决方案

Q1:边框1px问题怎么解决?

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

Q2:iPad等大屏设备怎么适配?

在flexible.js基础上增加最大宽度限制:

javascript

javascript 复制代码
// 在main.js中
document.documentElement.style.fontSize = 
  Math.min(75, document.documentElement.clientWidth / 10) + 'px'

Q3:字体不想用rem怎么办?

css 复制代码
/* 用@media媒体查询控制字体大小 */
.title {
  font-size: 16px;
}
@media screen and (min-width: 768px) {
  .title {
    font-size: 18px;
  }
}

五、其他适配方案对比

方案 优点 缺点 适用场景
rem 兼容性好,计算简单 需要配置工具 大部分移动端项目
vw/vh 原生支持,更灵活 兼容性要求高 新项目,不考虑IE
媒体查询 精确控制 代码量大 简单页面

六、我的终极建议

  1. 中小型项目:直接用rem方案(本文方案)
  2. 大型复杂项目:rem+媒体查询结合使用
  3. 全新项目:可以考虑vw方案

记住一个原则:不要为了技术而技术,选择最适合项目需求的方案!

⭐ 写在最后

请大家不吝赐教,在下方评论或者私信我,十分感谢🙏🙏🙏.

✅ 认为我某个部分的设计过于繁琐,有更加简单或者更高逼格的封装方式

✅ 认为我部分代码过于老旧,可以提供新的API或最新语法

✅ 对于文章中部分内容不理解

✅ 解答我文章中一些疑问

✅ 认为某些交互,功能需要优化,发现BUG

✅ 想要添加新功能,对于整体的设计,外观有更好的建议

✅ 一起探讨技术加qq交流群:906392632

最后感谢各位的耐心观看,既然都到这了,点个 👍赞再走吧!

​

相关推荐
To_OC9 小时前
从一头雾水到跑通全流程:我用一个周末啃透了JWT登录鉴权
前端·后端·http
excel11 小时前
研究 Vue 3 源码的收获
前端·vue.js
可乐鸡翅yeah_13 小时前
业务中 M3U8 水印相关坑,硬水印和动态水印区别
前端·网络·数据库·ffmpeg·m3u8在线
lerhxx13 小时前
AI 应用如何高效优雅地恢复中断?—— "连接解耦 + 状态持久化"
前端·javascript
计算机魔术师13 小时前
METR 演示 AI 智能体如何篡改 Inspect 评估记录以掩盖不当行为
前端
前端snow14 小时前
ai agent --- 异步处理之 Rabbit MQ
前端
念何架构之路14 小时前
zap扩展生态与总结
java·前端·数据库
独孤九剑打醒他14 小时前
【原创开源】【概念设计】源 - 栅 - 漏 - 栅 - 源 横向双栅 MOS,低压交流多值逻辑芯片探索
前端·其他·架构·开源·硬件工程
mantou13215 小时前
我给 AI Agent 做了个「油猴」:让 Claude Code / Codex 直接用你已登录的浏览器
前端·javascript·后端
默_笙15 小时前
🍕 一个主编、三个工种、两本手册:搭一支 AI 调研队
前端·javascript