Web移动端实现自适应缩放界面的方法汇总

本文总结了三种移动端Web实现自适应缩放的方案:1) 使用transform/scale,但会导致position:fixed元素出现问题;2) 利用zoom缩放,但在iPad上的Safari不生效,需特殊处理;3) 通过viewport-scale,需解决margin:auto偏移和fixed布局显示问题。针对iPad固定定位不支持和微信浏览器横竖屏切换问题,提出了兼容适配方案。
摘要由CSDN通过智能技术生成

方案一: 设置tranform/scale
首先设置内容固定宽度、自动高度(以下举例)

  width: 375px;  height: auto;

通过获取窗口的宽度与固定宽度相除,获得缩放比例
const scaleValue=window.innerWidth / 375
在html层,添加一段script:

<script dangerouslySetInnerHTML={
   {
    __html: this.getScript() }}></script>

添加一段设置zoom值的函数:

 getScript() {
   
    return `
      const zoomValue=window.innerWidth / 375;
      document.documentElement.style.transform="scale("+zoomValue+")";
      document.documentElement.style.transformOrigin="left top";
     ;
  }

注:
以上也可以直接写script,我上面返回一段html是因为项目是通过服务端渲染的。
样式的设置必须在界面加载之前,否则会因界面显示变更出现闪现问题。
因为添加了服务端渲染,所以无法在界面一开始初始时,无法获取window、document等对象。而上面html的注入,对服务端渲染机制的一个黑科技~
上面的方案完成后,看看效果。然后坑出来了:
项目设置的absolue元素width 100%失效了 – 可以设置固定的宽度解决

弹框position=fixed位置飞到天边去了 – 这个无法规避。

网上找到了一篇文章 CSS3 transform对普通元素的N多渲染影响 ,介绍了transform的一堆坑。
我这个项目一些布局需要position=fixed,所以tranform不适合~放弃
这个坑的其它介绍可以参考下:
transform限制position:fixed的跟随效果

关于在transform下的子元素设置fixed无效的困惑

总结:
position:fixed不支持,所以想做标题栏置顶,上面方案是无法实现的。

ipad有遗留问题:微信浏览器,横竖屏切换时,有些机型在打开一瞬间,横向拖动有空白问题。这个问题无法处理~

以上方案因为使用了scale,同时窗口的宽高window.innerHeight无法准确获取,需要除以比例,比如: window.innerHeight / (window.innerWidth / 375)

方案二: 设置zoom
在上一个方案的基础上,尝试zoom缩放:

 getScript
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

X W F

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值