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

方案一: 设置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
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

X W F

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

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

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

打赏作者

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

抵扣说明:

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

余额充值