首页 > 其他分享 >H5页面移动端适配问题小计-1

H5页面移动端适配问题小计-1

时间:2025-01-09 22:14:46浏览次数:1  
标签:工具栏 bottom 适配 小计 height inset H5 resize 页面

在开发H5页面时,iOS Safari浏览器常常会遇到页面内容被底部工具栏遮挡的问题。这不仅影响用户体验,还可能导致一些功能无法正常使用。最典型的就是safari将底部的工具栏也认为是视窗的一部分,所以会出现底部被遮挡的情况:  

1. 使用CSS调整页面高度

1.1 通过CSS媒体查询调整高度

可以通过CSS媒体查询来检测设备屏幕宽度,为iOS设备设置特定的样式。例如,当屏幕宽度小于767px时,为页面底部添加额外的padding,以避免被底部工具栏遮挡。
@media screen and (max-width: 767px) {
  .safari_only {
    padding-bottom: 120px; /* 解决Safari浏览器底部遮挡问题 */
  }
}
在HTML中,给需要调整的元素添加相应的类名:
<div class="safari_only">
  <!-- 页面内容 -->
</div>

1.2 使用计算属性调整高度

另一种方法是使用CSS的calc函数,通过计算属性减去底部工具栏的高度,来调整页面的高度。
.QYZXIOS {
  background: rgba(40, 44, 52, 0.6);
  z-index: 999;
  height: calc(100vh - 75px); /* 使用计算属性减去底部工具栏的高度 */
  width: 100%;
  padding: 10% 7%;
  position: fixed;
  top: 0;
  left: 0;
}
在JavaScript中,可以通过检测用户代理字符串来判断是否为iOS设备,并动态添加相应的类名。
data() {
  return {
    isClass: '',
  };
},
created() {
  this.isAndroidOrIOS();
},
methods: {
  isAndroidOrIOS() {
    var u = navigator.userAgent;
    var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; // Android终端
    var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); // iOS终端
    if (isAndroid) {
      this.isClass = "android";
      console.log("android>>>>");
      return this.isClass;
    }
    if (isiOS) {
      console.log("ios>>>>");
      this.isClass = "ios";
      return this.isClass;
    }
    return false;
  }
}

2. 使用JavaScript动态调整高度

2.1 监听窗口大小变化

可以通过监听页面的resize事件,动态调整页面的高度。
const ref = useRef<HTMLDivElement>(null);

const resize = () => {
  if (ref.current) {
    ref.current.style.height = `${window.innerHeight}px`;
  }
};

useEffect(() => {
  resize();
  window.addEventListener('resize', resize);
  return () => {
    window.removeEventListener('resize', resize);
  };
}, []);
在HTML中,设置ref
<div className="root" ref={ref}>
  <!-- 页面内容 -->
</div>

2.2 使用-webkit-fill-available

另一种方法是使用CSS属性-webkit-fill-available,该属性可以自动填满剩余的空间
html {
  height: -webkit-fill-available;
}

body {
  min-height: 100vh;
  min-height: -webkit-fill-available;
}

3. 兼容iPhone X及更高版本的安全区(推荐,代码改动小)

对于iPhone X及其更高版本,需要适配安全区,以确保页面内容不会被刘海和底部栏遮挡。

3.1 设置viewport-fit=cover

<head>中添加以下meta标签,使得页面内容完全覆盖整个窗口:
<meta name="viewport" content="width=device-width, viewport-fit=cover">

3.2 限定页面主体内容在安全区域内

body {
  padding-bottom: constant(safe-area-inset-bottom);
  padding-bottom: env(safe-area-inset-bottom);
}

3.3 fixed元素的适配

/* 原吸底元素增加以下样式 */
{
  margin-bottom: constant(safe-area-inset-bottom);
  margin-bottom: env(safe-area-inset-bottom);
}

/* 加一个空的颜色块 */
{
  position: fixed;
  bottom: 0;
  width: 100%;
  height: constant(safe-area-inset-bottom);
  height: env(safe-area-inset-bottom);
  background: hsla(0, 0%, 100%, 0.9); 
}

总结

通过上述方法,可以有效解决H5页面在iOS Safari浏览器中被底部工具栏遮挡的问题。开发者可以根据具体需求选择适合的方案,提升用户体验。如果遇到其他问题,欢迎在评论区补充,共同探讨解决方案。

标签:工具栏,bottom,适配,小计,height,inset,H5,resize,页面
From: https://www.cnblogs.com/little-sheep10/p/18662967

相关文章

  • salesforce零基础学习(一百四十二)在Formula字段中如何通过Datetime字段显示Local Time(
    背景:我们需求是显示DateTime类型的Time信息,比如我们想要在report中基于HourOfCreatedDate进行分组,从而想要了解到一段时间内什么时间是数据创建的高峰期,不同的runninguser可能时区不同,比如中国时区是GMT+8,日本的时区是GMT+9,美国可能不同的州对应的时区也不同,而且涉及到冬令......
  • PD快充适配器如何把电压输出高电压9V12V15V20V28V36V48V呢?
    PD快充适配器电压输出9V12V15V20V28V36V48V等电压来PD快充适配器如何把电压输出高电压9V12V15V20V28V36V48V呢?很简单只需要用一颗泛海微的FS8025B就可以把快充充电器电压输出9V12V15V20V28V36V48V等高电压出来。​一、引言随着科技的飞速发展,快充技术已成为现代设备充电的......
  • 低功耗蓝牙芯片CH57x,CH58x,CH59x回读codeflash及dataflash数据
    一、读取Codeflash数据芯片内部程序是有加密的,不支持外部工具直接读取,因此只能通过内部接口读取,而ISP烧录器工具在烧录时,默认会擦除8k的数据,因此只能读到8k以后的codeflash部分:方式:烧录一份不超过8k的程序,烧录器烧录时不能勾选清空codeflash,保留8k以后的原固件数据,程序主体可......
  • VMware ESXi 8.0U3c macOS Unlocker & OEM BIOS 标准版和厂商定制版,已适配主流品牌服
    VMwareESXi8.0U3cmacOSUnlocker&OEMBIOS标准版和厂商定制版ESXi8.0U3c标准版,Dell(戴尔)、HPE(慧与)、Lenovo(联想)、Inspur(浪潮)、Cisco(思科)、Hitachi(日立)、Fujitsu(富士通)、NEC(日电)定制版、Huawei(华为)OEM定制版请访问原文链接:https://sy......
  • 移动端开发:响应式设计与适配技巧
    移动端开发:响应式设计与适配技巧引言随着智能手机和平板电脑的普及,越来越多的用户选择通过移动设备访问网站和应用程序。为了确保良好的用户体验,开发者需要采用响应式设计(ResponsiveDesign)和技术来适应不同尺寸屏幕的显示需求。本文将探讨移动端开发中的响应式设计理念及......
  • 11.07实验8:适配器模式
    本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解适配器模式的动机,掌握该模式的结构; 2、能够利用适配器模式解决实际问题。[实验任务一]:双向适配器 实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。实验要求: 1.画出对应的类图; 2.提交源......
  • 【WCH蓝牙系列芯片】-基于CH592开发板—BLE_USB程序中低功耗模式下,USB设备的拔插唤醒
    -------------------------------------------------------------------------------------------------------------------------------------在CH592EVT例程中,有一个BLE_USB程序,是蓝牙与USB合用例程,通过USB模拟340设备转发蓝牙数据。在正常使用中,蓝牙和USB设备都可以一起运......
  • 开源flux适配昇腾NPU分享,体验120亿参数AI文生图模型
    这一期我们分享一位开源开发者参与flux适配昇腾NPU的实践经验,欢迎广大开发者对华为技术栈适配进行讨论。开源适配实践flux是一个AI图像生成模型,有120亿参数量,具有大量的用户基础,可以根据命令行输入的文字去生成对应的图片。本次适配使用的flux模型权重文件是schnell版本。下面......
  • 掌握设计模式--适配器模式
    适配器模式(AdapterPattern)适配器模式是一种结构型设计模式,用于将一种接口转换为客户端期望的另一个接口,使得原本因接口不兼容而无法一起工作的类可以协同工作。适配器为中间者,连接着两个互不相容的接口,从而实现接口的适配。核心思想:在不改变现有代码的情况下,将一个类的接口转换......
  • H5流媒体播放器EasyPlayer.js安卓播放器如何实现视频源快速切换?
    随着流媒体技术的迅速发展,H5流媒体播放器已成为现代网络视频播放的重要工具。其中,EasyPlayer.js视频流媒体播放器作为一款功能强大的H5播放器,凭借其全面的协议支持、多种解码方式以及跨平台兼容性,赢得了广泛的关注和应用。那么EasyPlayer.js安卓播放器应如何实现视频源快速切换......