vue.js 3.2.20: 用rem实现移动端和pc的兼容
一,用vue实现浏览器兼容的目标:
1, 主要为了实现按照设计稿给出的宽度来设计页面,
通常设计稿会给出750px或640px的宽度,
我们在设置页面上元素宽度时要把象素转为rem,
这样实现不管浏览器的宽度是多少,
页面的表现要一致
另外当pc端浏览时,把内容居中显示即可(这个视业务需求定,如pc页面显示和移动页面显示不一致有时会另开发一套前端)
2, demo的地址:
https://gitee.com/liuhongdi/remdemo
说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest
对应的源码可以访问这里获取: https://github.com/liuhongdi/
或: https://gitee.com/liuhongdi
说明:作者:刘宏缔 邮箱: 371125307@qq.com
二,编写代码:
1,main.js
import { createApp } from 'vue'import App from './App.vue'
//判断是否移动端的函数
const isMobileFunc = () => {
let flag = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i);
if (flag === null) {
return 0;
} else {
return 1;
}
};
//设置html的字号大小,作为rem的计算依据
const setHtmlFontSize = () => {
let designWidth = 750;
const htmlDom = document.getElementsByTagName('html')[0];
let htmlWidth = document.documentElement.clientWidth || document.body.clientWidth;
if (isMobileFunc() === 1) {
//移动端
htmlDom.style.fontSize = `${htmlWidth / designWidth}px`;
} else {
//非移动端:
//console.log('htmlWidth:'+htmlWidth);
let dest = htmlWidth * 0.36;
if (dest < 360) {
dest = 360;
}
htmlDom.style.fontSize = `${dest / designWidth}px`;
}
};
window.onresize = setHtmlFontSize;
setHtmlFontSize();
createApp(App).mount('#app')
2,App.vue
<template><!--非移动端时显示-->
<div v-if="ismobile == 0" style="width:100%;height:100vh;display: flex;justify-content: center;">
<div style="width:36%;min-width:360px;height:100%;overflow: hidden;background: #ffff00;">
<Home />
</div>
</div>
<!--移动端时显示-->
<Home v-if="ismobile == 1" />
</template>
<script>
import {ref} from "vue";
//import HelloWorld from './components/HelloWorld.vue'
import Home from './components/Home.vue'
export default {
name: 'App',
components: {
Home
},
setup() {
//是否移动端
const ismobile = ref(0);
//判断是否移动端的函数
const isMobileFunc = () => {
let flag = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i);
if (flag === null) {
return 0;
} else {
return 1;
}
};
if (isMobileFunc() === 1) {
ismobile.value = 1;
} else {
ismobile.value = 0;
}
return {
ismobile,
isMobileFunc,
};
},
}
</script>
<style>
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
/*text-align: center;*/
color: #2c3e50;
/*margin-top: 60px;*/
}
body {
display: block;
margin: 0px;
}
</style>
3,Home.vue
<template><div style="width:100%;height:100%;">
<div style="margin-top: 30rem;margin-left: 225rem;width:300rem;height:400rem;background: #ff0000;">
<span style="font-size: 60rem;">首页</span><br/>
<span style="font-size: 50rem;">首页</span><br/>
<span style="font-size: 40rem;">首页</span><br/>
<span style="font-size: 30rem;">首页</span><br/>
<span style="font-size: 20rem;">首页</span><br/>
<span style="font-size: 10rem;">首页</span>
</div>
<div style="margin-top: 30rem;width:750rem;height:486rem;background: #ff00ff;">
<img src="@/assets/img/godzilla.jpg" style="width:700rem;margin-left:25rem;">
</div>
</div>
</template>
<script>
export default {
name: "Home"
}
</script>
<style scoped>
</style>
三,测试效果:
pc浏览器:
iphonex
ipad:
四,查看vue的版本:
liuhongdi@lhdpc:/data/vue/remdemo$ npm list vueremdemo@0.1.0 /data/vue/remdemo
├─┬ @vue/cli-plugin-babel@4.5.13
│ └─┬ @vue/babel-preset-app@4.5.13
│ └── vue@3.2.20 deduped
└─┬ vue@3.2.20
└─┬ @vue/server-renderer@3.2.20
└── vue@3.2.20 deduped
以上是 vue.js 3.2.20: 用rem实现移动端和pc的兼容 的全部内容, 来源链接: utcz.com/z/378783.html