1. uniapp的跨平台特性
uniapp是一款基于Vue框架开发的跨平台开发工具,不仅支持多种前端端技术,包括小程序、H5、APP等多个终端平台,还支持不同终端平台之间的互相转化。这些跨平台的特性带来了许多优势,比如节省了开发者的时间和成本,提高了开发效率等等。
但是,由于不同终端平台会存在字体、分辨率等等差异,为uniapp的开发带来了一些挑战,需要开发者进行特殊处理。
2. uniapp的字体适配方案
2.1 rem适配方案
rem是一种相对单位,相对于根元素的字体大小。我们可以使用这个单位,配合viewport单位来进行字体的适配。具体实现如下:
// main.js
import Vue from 'vue';
import App from './App';
// 设置html根元素的字体大小
(function() {
var w = document.documentElement.clientWidth || document.body.clientWidth;
var docEl = document.documentElement;
docEl.style.fontSize = (w / 375) * 16 + 'px'; // 假设设计稿宽度为375px,16为默认字体大小
})();
new Vue({
render: h => h(App)
}).$mount('#app');
这里我们获取设备宽度,计算出1rem所对应的像素值,然后根据设计稿的宽度来确定默认字体大小。
需要注意的是,在使用rem适配方案时,要保证所有的尺寸单位都要用rem,否则会出现适配错位的情况。
2.2 viewport适配方案
viewport单位是根据视口来计算的,1vw表示1%的视口宽度。我们可以通过这个单位来适配字体大小。具体实现如下:
// main.js
import Vue from 'vue';
import App from './App';
// 设置html根元素的字体大小
(function() {
var viewportWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
var fontSize = parseFloat(window.getComputedStyle(document.documentElement).fontSize);
var scale = viewportWidth / 375; // 假设设计稿宽度为375px
document.documentElement.style.fontSize = fontSize * scale + 'px';
})();
new Vue({
render: h => h(App)
}).$mount('#app');
这里我们获取当前视口的宽度,根据设计稿的宽度来计算缩放比例,再乘以当前的字体大小,得到最终应该设置的字体大小。
需要注意的是,在使用viewport适配方案时,要保证中的viewport设置正确,否则会出现适配错位的问题。
3. uniapp的字体适配实现
下面我们来看一下如何在uniapp中实现字体的适配,以rem适配方案为例:
// App.vue
<template>
<div class="test">
<div class="text">测试文字</div>
</div>
</template>
<style>
.test {
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.text {
font-size: 1rem;
}
</style>
<script>
export default {
name: 'App',
mounted() {
this.$nextTick(function () {
// 设置html根元素的字体大小
var w = document.documentElement.clientWidth || document.body.clientWidth;
var docEl = document.documentElement;
docEl.style.fontSize = (w / 375) * 16 + 'px'; // 假设设计稿宽度为375px,16为默认字体大小
})
}
}
</script>
这里我们在App.vue中使用了一个文本框,将它的字体大小设置为1rem。
需要注意的是,在实际开发中,不同的终端需要有不同的字体大小,因此我们需要针对不同的终端平台进行处理。
比如,我们可以在main.js中针对不同端的设计稿宽度,进行字体大小的设置。具体实现如下:
// main.js
import Vue from 'vue';
import App from './App';
// 根据不同的终端平台设置字体大小
(function() {
var w = document.documentElement.clientWidth || document.body.clientWidth;
var docEl = document.documentElement;
switch (uni.getSystemInfoSync().platform) {
case 'android':
docEl.style.fontSize = (w / 360) * 16 + 'px';
break;
case 'ios':
docEl.style.fontSize = (w / 375) * 16 + 'px';
break;
case 'h5':
docEl.style.fontSize = (w / 750) * 16 + 'px';
break;
case 'mp-dd':
case 'mp-weixin':
case 'mp-baidu':
docEl.style.fontSize = (w / 375) * 16 + 'px';
break;
default:
// 这里给一个默认值
docEl.style.fontSize = (w / 375) * 16 + 'px';
break;
}
})();
new Vue({
render: h => h(App)
}).$mount('#app');
这里我们在判断不同的终端平台后,根据设计稿的宽度来设置不同的字体大小。
4. uniapp的字体适配总结
字体适配是uniapp跨平台开发中的一项重要工作。开发者需要针对不同的终端平台,选择合适的适配方案,并进行相应的设置,才能保证字体大小在不同平台上表现一致。
根据不同平台的视口大小和字体大小进行调整是常用的适配方式,我们可以通过设置根元素的字体大小,再通过rem或者viewport等单位来进行字体的适配。
需要注意的是,不同的终端平台会存在不同的设备像素比和DPR,因此要在实际开发中进行灵活调整,并多进行测试,以保证字体的适配效果达到最优。