移动端屏幕适配

本文介绍了移动端适配的三种方案:手写rem、使用postcss-pxtorem插件和vw/vh单位。详细讲解了rem布局的实现,包括设置动态html字体大小的js函数。还提到了lib-flexible库的使用,以及如何通过postcss配置将px转换为rem。此外,文章提及了vw和vh视窗单位的使用,并提供了一个安装依赖的示例。最后,讨论了postcss-px-to-viewport的安装和配置。

移动端适配方案

有三种:分别是手写rem、插件安装、vw和vh

rem的概念

rem是指相对于根元素的字体大小的单位,1rem等于html根元素font-size的px值

手写rem布局

<div class='head'>头部</div>
<style>
	.head {
		width:7.5rem;
		height:0.88rem
	}
</style>
<script>
	rem()
	// 页面大小发生变化就会触发这个函数
	window.onresize = function () {
		rem()
	}
	function rem() {
		// 获取html的宽度
		let hh = document.documentElement.clientWidth
		// 获取body的宽度
		let bh = document.body.clientWidth
		// 让宽度 赋值为 html或者body的宽度 
		// IE浏览器认为body为最大的 而其他的浏览器认为html为最大的
		let h = hh || bh
		// 给html设置动态的fontSize属性
		document.documentElement.style.fontSize = (h / 750 * 100) + 'px'
	}
</script>

rem适配方案

- 推荐使用以下两个工具:

1. postcss-pxtorem 是一款 postcss 插件,用于将单位转化为 rem

2. lib-flexible 用于设置 rem 基准值(设置1rem等于多少px)

安装依赖

cnpm install lib-flexible postcss-pxtorem --save-dev

在main.js中导入

 import 'lib-flexible/flexible'; 

postCss配置:
创建.postcssrc.js
这是个基础的,有需要的可以自行修改

module.exports = {
  plugins: {
    autoprefixer: {
      overrideBrowserslist: ['Android 4.1', 'iOS 7.1', 'Chrome > 31', 'ff > 31', 'ie >= 8']
    },
    'postcss-pxtorem': {
      rootValue: 75,
      propList: ['*']
    }
  }
}

因为我们用了 Vant 的组件,需要按照 rootValue: 37.5 来写样式
注意

这里会报错 postCss 需要8的版本(但是postCss 还没有8的版本)
所以这里建议对postcss-pxtorem进行降级

降级命令 npm install postcss-pxtorem@5.1.1 --save

vw和vh

vw 是视图宽度
vh 是视图高度
100vw 就是全屏的宽度

安装依赖

npm install postcss-px-to-viewport -D

### ECharts 移动端屏幕适配解决方案 为了实现 ECharts 在移动设备上的良好展示效果,需考虑不同屏幕尺寸下的图表布局与样式调整。一种常见做法是在初始化图表时动态计算容器大小,并设置响应式的宽高比例。 对于移动端的自适应配置不生效问题,在确保引入了正确版本库文件的基础上,还需注意浏览器兼容性和 CSS 样式冲突等因素[^2]。具体到 Vue 项目中,则推荐采用工程化方式分离 PC 和移动端逻辑,防止因全局样式影响而造成显示异常[^3]。 以下是基于上述原则构建的一个简单示例: ```javascript // 动态计算元素尺寸函数 methods: { // initWidth 表示设计稿中的标准宽度,默认为1920px calculateSize(val, initWidth = 1920) { const nowClientWidth = document.documentElement.clientWidth; return val * (nowClientWidth / initWidth); }, initChart() { myChart.resize(); // 确保每次窗口改变都能重新渲染 let option = { grid: { containLabel: true }, // 让坐标轴刻度线和标签自动适应容器边界 legend: { left: `${this.calculateSize(30)}px`, top: &#39;top&#39;, textStyle: { fontSize: this.calculateSize(16)} }, xAxis: [{ type: &#39;category&#39;, boundaryGap: false, axisLabel: { interval: 0, rotate: 45 } }], yAxis: [{type: &#39;value&#39;}], series : [ { name:&#39;销量&#39;, type:&#39;line&#39;, data:[120, 132, 101, 134, 90, 230, 210] } ] }; myChart.setOption(option); } } ``` 此代码片段展示了如何利用 `calculateSize` 方法根据实际视窗宽度调整字体和其他组件的位置参数;同时设置了网格属性使图形能够更好地贴合边框[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值