Vue项目适配移动端 + 适配PC端

一、适配PC端

参考文档:https://www.cnblogs.com/wuqilang/p/13491766.html

1、 在 /src/assets 目录下新增 js 文件夹,在js文件夹中新增 flexible.js

在这里插入图片描述

(function flexible(window, document) {
    var docEl = document.documentElement;
    var dpr = window.devicePixelRatio || 1;
  
    // adjust body font size
    function setBodyFontSize() {
      if (document.body) {
        document.body.style.fontSize = 12 * dpr + "px";
      } else {
        document.addEventListener("DOMContentLoaded", setBodyFontSize);
      }
    }
    setBodyFontSize();
  
    // set 1rem = viewWidth / 19.2
    function setRemUnit() {
      var rem = docEl.clientWidth / 19.2;  // 这里默认是10等份,手动改为19.2,此时1rem=1920/19.2即100px。(设计稿是1920px*1080)
      docEl.style.fontSize = rem + "px";
    }
  
    setRemUnit();
  
    // reset rem unit on page resize
    window.addEventListener("resize", setRemUnit);
    window.addEventListener("pageshow", function (e) {
      if (e.persisted) {
        setRemUnit();
      }
    });
  
    // detect 0.5px supports
    if (dpr >= 2) {
      var fakeBody = document.createElement("body");
      var testElement = document.createElement("div");
      testElement.style.border = ".5px solid transparent";
      fakeBody.appendChild(testElement);
      docEl.appendChild(fakeBody);
      if (testElement.offsetHeight === 1) {
        docEl.classList.add("hairlines");
      }
      docEl.removeChild(fakeBody);
    }
  })(window, document);

2、在 /src/app.vue中引入flexible.js

<script>
import './assets/js/flexible.js'
export default {
  name: 'App'
}
</script>

3、测试代码

<template>
  <div class="hello">
    <div class="box">测试</div>
  </div>
</template>

<script>
</script>

<style scoped>
.box {
  background-color: skyblue;
  /* 1920px设计图中应该是100px */
  font-size: 1rem; 
  /* 宽度占50% */
  width: 9.6rem;
}
</style>

4、测试效果

3.1 在 1920px 的屏幕中,html根元素的font-size: 100px;1rem = 100px;宽度为9.6rem = 9.6 * 100 = 50% * 1920;

在这里插入图片描述
3.2 在 2560px 的屏幕中,html根元素的font-size: 133.333px; 1rem = 133.333px;宽度为9.6rem = 9.6 * 133.333 = 50% * 2560px;

在这里插入图片描述
二、适配移动端

参考文档:https://blog.csdn.net/viewyu12345/article/details/83153718

1、在 cmd 窗口中执行如下命令,安装依赖包

npm install lib-flexible --save

在这里插入图片描述

2、在 /package.json 中可以看到安装成功

在这里插入图片描述
3、在 /src/main.js 中引入 lib-flexible

在这里插入图片描述
4、来到 /node_modules/lib-flexible/flexible.js ,修改源码

修改前

    function refreshRem(){
        var width = docEl.getBoundingClientRect().width;
        if (width / dpr > 540) {
            width = 540 * dpr;
        }
        var rem = width / 10;   // 在750px的设计图中,1rem=750/10=75px
        docEl.style.fontSize = rem + 'px';
        flexible.rem = win.rem = rem;
    }

修改后

    function refreshRem(){
        var width = docEl.getBoundingClientRect().width;
        if (width / dpr > 540) {
            width = 540 * dpr;
        }
        var rem = width / 7.5;   // 在750px的设计图中,1rem=750/7.5=100px
        docEl.style.fontSize = rem + 'px';
        flexible.rem = win.rem = rem;
    }

5、测试代码

<template>
  <div class="hello">
    <div class="box">测试</div>
  </div>
</template>

<script>
</script>

<style scoped>
.box {
  background-color: skyblue;
  /* 在750px的设计图中字体大小是100px;因为是两倍图的关系,对应到iPhone 6/7/8中字体大小是50px; */
  font-size: 1rem;
  /* 宽度占50% */
  width: 3.75rem;
}
</style>

6、测试效果(以750px的设计图为准,注意这是两倍图,满屏750px=7.5rem)

6.1 在iPhone 6/7/8中,html根元素的font-size: 50px;即1rem = 50px=375 / 7.5;宽度为3.75rem = 3.75 * 50 = 50% * 375;
在这里插入图片描述
6.2 在iPhone 5/SE中,html根元素的font-size: 42.6667px;即1rem = 42.6667px=320 / 7.5;宽度为3.75rem = 3.75 * 42.6667 = 50% * 320;
在这里插入图片描述
6.3 在360px的屏幕中,html根元素的font-size: 48px;即1rem = 48px=360 / 7.5;宽度为3.75rem = 3.75 * 48 = 50% * 360;
在这里插入图片描述

  • 0
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要将Vue PC端项目适配移动端,可以使用以下步骤: 1. 首先,在开发环境中安装postcss-px-to-viewport插件。可以通过以下命令进行安装:`npm install postcss-px-to-viewport --save-dev`。这个插件可以帮助将像素单位转换为视口单位,实现移动端适配。 2. 在项目根目录中添加postcss.config.js配置文件。可以在配置文件中设置插件的相关参数,如需要转换的单位、设计稿的视口宽度、单位转换后保留的精度等。配置如下: ```javascript module.exports = { plugins: { 'postcss-px-to-viewport': { unitToConvert: 'px', viewportWidth: 1920, unitPrecision: 5, propList: ['*'], viewportUnit: 'vw', fontViewportUnit: 'vw', selectorBlackList: [], minPixelValue: 1, mediaQuery: false, replace: true, exclude: undefined, include: undefined, landscape: false, landscapeUnit: 'vw', landscapeWidth: 1920 } } }; ``` 这个配置会将指定的CSS属性值转换为vw单位,从而实现移动端适配。 3. 在Vue项目的main.js文件中引入lib-flexible库。可以通过以下代码进行引入:`import 'amfe-flexible';`。这个库可以自动设置页面的根字体大小,以适应不同设备的屏幕尺寸。 4. 在vue.config.js文件中配置postcss-pxtorem插件,用于将像素单位转换为rem单位。可以按照以下配置进行设置: ```javascript module.exports = { css: { loaderOptions: { postcss: { plugins: [ require('postcss-pxtorem')({ rootValue: 37.5, propList: ['*'] }) ] } } }, }; ``` 这个配置会将像素单位转换为rem单位,其中rootValue设置为37.5可以方便地将设计稿的像素值转换为rem值。 通过以上步骤,你的Vue PC端项目就可以适配移动端了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Vue移动端 / PC端适配解决方案](https://blog.csdn.net/weixin_48862362/article/details/121518364)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [手把手教你实现VuePC端移动端适配](https://blog.csdn.net/Orange71234/article/details/131329898)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值