html5解决华为原生浏览器底部栏兼容问题

ops/2024/12/29 9:40:12/
htmledit_views">

前言

我们之前开发的H5网页,有客户反馈页面底部被浏览器下方的工具栏遮住了,经过测试发现目前只有华为原生x5浏览器底部栏出现这个兼容问题,它遮住了底部页面,造成了这个样式兼容问题。

可以看出:在华为浏览器中下方工具条的高度不算在浏览器自身bom高度上,而是算网页dom的一部分。更通俗地理解可以为,它就是个z-index:无限高;position:fixed;bottom:0的<div/>

那么随之而来的几种解决思路是:

1、x5内核强制“开启全屏”

有没有那么一种设置,可以让这个浏览器组件像ios或vivo、oppo等其它类型手机的浏览器一样正常算在其自身高度内?进行百度答案搜寻后,并没有。但是,有个x5内核强制“开启全屏”的meta设置:

html">// 开启x5内核浏览器的全屏模式
<meta name="x5-fullscreen" content="true">

相对应的,还有个亲测也是可以的:

html">// 据称是uc浏览器开始全屏模式,但是我在x5内核中测试也是可以的
<meta name=”full-screen” content=”yes”>

本来很开心地看到页面完美地如期展现。但是几番操作,发现这种方法不稳定,主要有两个问题:

  • 全屏模式下,x5浏览器会自动开启一个悬浮按钮,来进行“全屏-非全屏”状态的切换。这个是设计图之外的东西,在一定程度上对设计图的实现造成了破坏,且会给用户带来迷茫感。

  • 全屏模式的保持并不稳定。在某些路由跳转时刻、某些布局下,会退出全屏模式,没有根治样式兼容性缺陷。

2、处理交互障碍

也就是说,这个缺陷带来的问题是,用户看不到底部内容,且无法通过下拉显示(因为它不是不存在,而是被一个更高层的div盖住了),那么我们就把底部内容的padding-bottom增高:

javascript">.footer{padding-bottom: 95px; // 因为95px是后面讲到的,在移动浏览器中实际算出的距离差,所以不需要换算为rem,直接使用即可。
}

撑起下部被遮挡部分;或者将document的height增高,同样达到撑起被遮挡部分的作用。

javascript">document,.root{height: calc(100vh + 95px);
}

但是这样带来的问题是,用户现在确实可以通过下拉页面,最终看到底部内容。但依旧不是在一屏以内。

这种改进方式和产品、设计的初始预期出入较大,很容易被否掉,后期还是要改。且作为一名有良好“产品感”的html" title=前端>前端攻城狮,本身应该也很难接受这种调整方案。

3、将非全屏模式下,底部工具栏占用的空间减掉

就是算出在“全屏和非全屏模式”下,由于底部虚拟工具栏的出现,而造成 浏览器视窗的高度差。将其作为底部组件距离下的距离值即可。

这种解决方式主要有一点需要考虑:改虚拟工具栏,在多台设备上的高度是否统一。

若不统一,那么此方法不可行,更难受的是,那么就面临着此题无解的尴尬局面。于是我找测试人员借来4台华为设备,通过计算发现高度几乎完全一致,其值大概是95px,那么我们通过ua判定是否为x5内核,如果是x5内核下,则设置底部组件的style为:

javascript">style={{position: `fixed`,width: `100%`,left: 0,bottom: navigator.userAgent.toLowerCase().includes(`qqbrowser`) ? `95px` : 0,
}}

综合考虑三种方式,最终选择最后一种方式,他相对第一种比较稳定,相对第二种对交互侵入性最小,是目前最适合的答案。 

但是因为x5内核并没有给出一个方法获取虚拟工具栏的实际高度,且发现其在多台设备上高度确有2px的差距,所以这点也算是隐患。

关于优联html" title=前端>前端

        武汉优联html" title=前端>前端科技有限公司由一批从事html" title=前端>前端10余年的专业人才创办,是一家致力于H5html" title=前端>前端技术研究的科技创新型公司,为合作伙伴提供专业高效的html" title=前端>前端解决方案,合作伙伴遍布中国及东南亚地区,行业涵盖广告,教育, 医疗,餐饮等。有效的解决了合作伙伴的html" title=前端>前端技术难题,节约了成本,实现合作共赢。可进行Webhtml" title=前端>前端、微信小程序、小游戏,2D/3D游戏,动画交互与UI广告设计等各种技术研发。


http://www.ppmy.cn/ops/145890.html

相关文章

数据分析与应用:如何分析7日动销率和滞销率?

目录 0 需求描述 1 数据准备 1.1 订单明细表 1.2 商品信息表 2 SQL实现 3 问题分析与总结 3.1 计算 7 日动销率和滞销率主要有以下方法总结 按商品数量计算 按销售额计算 按销售数量计算 3.1 提高商品 7 日动销率和降低滞销率的方法&#xff1f; 优化商品管理 加强…

【Golang 面试题】每日 3 题(六)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/UWz06 &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏…

逻辑控制语句

一、逻辑控制语句 条件判断 if循环 for、while 二、条件判断 if 1、语法 if 条件:条件为真的操作条件为真的操作 else:条件为假的操作条件为假的操作 data_01 int(input("数字: "))if data_01 > 10:print("ok!!!")print("正确!!!")prin…

Gitlab17.7+Jenkins2.4.91实现Fastapi/Django项目持续发布版本详细操作(亲测可用)

一、gitlab设置&#xff1a; 1、进入gitlab选择主页在左侧菜单的下面点击管理员按钮。 2、选择左侧菜单的设置&#xff0c;选择网络&#xff0c;在右侧选择出站请求后选择允许来自webhooks和集成对本地网络的请求 3、webhook设置 进入你自己的项目选择左侧菜单的设置&#xff…

华为仓颉编程语言的应用案例分析

一、华为仓颉语言简介 1.1 仓颉语言的设计背景 华为仓颉&#xff08;Cangjie&#xff09;语言是华为自主研发的新一代编程语言&#xff0c;旨在满足分布式系统和高并发场景下的编程需求。其设计初衷是解决传统开发模式中难以处理复杂分布式任务、效率低下以及协作困难的问题。…

静态路由配置包括DHCP

✍作者&#xff1a;柒烨带你飞 &#x1f4aa;格言&#xff1a;生活的情况越艰难&#xff0c;我越感到自己更坚强&#xff1b;我这个人走得很慢&#xff0c;但我从不后退。 &#x1f4dc;系列专栏&#xff1a;网路安全入门系列 目录 静态路由二&#xff0c;静态路由配置1.静态路…

Python爬虫(一)- Requests 安装与基本使用教程

文章目录 前言一、简介及安装1. 简介2. 安装 Requests2.1 安装2.2 检查安装是否成功 二、使用 Requests 发送 HTTP 请求1. 发送 GET 请求2. 发送 POST 请求3. 发送 PUT 请求4. 发送 DELETE 请求5. 发送 HEAD 请求6. 发送 OPTIONS 请求 三、传递参数1. GET 请求传递 URL 参数1.1…

JPA 基本查询(五)

JPA 查询Exists示例 JPA教程 - JPA 查询Exists示例 如果子查询返回任何行&#xff0c;则EXISTS条件返回true。 以下代码显示如何在JPQL中使用带有子查询的EXISTS运算符。 List l em.createQuery("SELECT e FROM Professor e WHERE EXISTS " "(SELECT p FROM …