H5在全屏webview中双端适配刘海屏

2023-11-03 02:10

本文主要是介绍H5在全屏webview中双端适配刘海屏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ios适配

在这里插入图片描述
在这里插入图片描述

补充:

上面的px单位和我们在web中的px单位虽然一样,但是web所需的px实际为iOS中的pt值,px转pt需要根据设备的ppi(Pixels Per Inch:像素密度进行转换):
px:pixel像素,是屏幕上的显示的基本地,并不是长度单位,这个点可大可小,点小的话就很清晰,我们称之为“分辨率高”,反之就是"分辨率低",所以像素是一个相对单位。
pt:point准确的说死一个专用印刷单位“镑”,大小为1/72英寸,是一个长度单位,也是绝对长度。

通过上面表可以看到ios中的px转pt根据设备的ppi大概是3:1/2:1/1:1转换
转换完可以看到:

  • 4.7寸:6、6s、7、8,状态栏的高度为20pt,导航栏的高度为44pt
  • 5.5寸:6p、7p、8p,状态栏的高度为18pt,导航栏的高度为44pt
  • 刘海屏X,XR,XS,XSmax,11,状态栏的高度为44pt,导航栏的高度为44pt
iOS适配方案
Apple官方适配方案

在iphonex之后苹果引入了“safe area(安全区)”,安全区指屏幕内不受圆角,齐刘海,底部小条等元素影响的可视窗口。
在这里插入图片描述

从ios11开始,为了适配刘海屏,Apple对html的viewport mate标签做了扩展

<meta name="viewport" content="viewport-fit=cover">

viewport-file=cover可设置为auto,contain,cover三种状态
auto:
contain:
cover:页面完全充满屏幕

iOS11同时新增了一个特性,constant(safe-area-inset-x),这是Webkit的一个css函数,用于获取安全区域与边界的距离,有四个预定义的变量(单位px)

  • safe-area-inset-left:安全区域距离左边界距离,横屏时适配
  • safe-area-inset-right:暗转区域距离右边界距离,横屏时适配
  • safe-area-inset-top:安全区域距离顶部边界距离,竖屏下刘海屏为44px,iphone6系列20px,竖屏刘海适配关键。
  • safe-area-inset-bottom:安全区域距离底部边界距离,竖屏下为34px,竖屏小黑条适配关键。

最终实现方案:

  • 首先通过设置让页面充满全屏。
  • 通过webkit内置的css函数。获取安全区域与各边之间的间距,然后通过padding/margin/绝对定位等方式,让页面展示在安全区域内

补充:

  • webkit在iOS11中新增csss Function:env()替代constant(),文档推荐使用env(),而constant()从safari Techology Preview41和iOS11.2Bate开始会被弃用
  • 在不支持env()的浏览器中,会自动忽略这一样式规则,不影响网页正常的渲染,我们可以两种都使用。

适配代码:

@supports((height:constant(safe-area-inset-top)) or (height:env(safe-area-inset-top))) and (-webkit-overflow-scrolling:touch){.fullscreen{/* 适配齐刘海 */padding-top: 20;padding-top: constant(safe-area-inset-top);padding-top: env(safe-area-inset-top);/* 适配底部小黑条 */padding-bottom: 0;padding-bottom: costant(safe-area-inset-bottom);padding-bottom: env(safe-area-inset-bottom);}
}

使用@support查询机型是否支持constant/env实现兼容代码隔离
个别安卓也会成功进入这个判断,因此加上-webkit-overflow-scrolling:touch的判断可以有效的规避安卓机

补充:
@supports:您可以制定依赖于浏览器中的一个或多个特定的css功能的支持声明,这被称为特性查询,该规则可以放在代码的顶层,也可以嵌套在任何其他条件规则中。
通俗点说:如果当前容器浏览器支持这些css属性,那么下面的css语句就生效,如果不支持,那就不生效

机型区分适配
/* iphone x / xs / 11 pro*/
@media only screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) {...
}
/* iphone xr / 11 */
@media only screen and (device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) {...
}
/* iphone xs max / 11 pro max */
@media only screen and (device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) {...
}

补充:
@media:可用于基于一个或多个媒体查询的结果来应用样式表的一部分,使用它可以指定一个媒体查询和一个css块,当且仅当该媒体查询与正在使用其内容的设备匹配时,该css块才能用于该文档

这个方案的缺点是,工作量比较大。而且每当发布新款产品的时候还要重复修改,不推荐使用

参考:https://www.ldsun.com/h5-fullscreen-webview-adaptation-notch-screen/

这篇关于H5在全屏webview中双端适配刘海屏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/334842

相关文章

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求,要求做一款播放器,发现能力上跟EasyPlayer.js基本一致,满足要求: 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏(单屏/全屏) 多分屏(2*2) 多分屏(3*3) 多分屏(4*4) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏

H5漂流瓶社交系统源码

一个非常有创意的H5漂流瓶社交系统源码,带完整前端h5和后台管理系统。 环境:Nginx 1.20.1-MySQL 5.6.50-PHP-7.3 代码下载

鸿蒙开发5.0【Picker的受限权限适配方案】

Picker由系统独立进程实现,应用可以通过拉起Picker组件,用户在Picker上选择对应的资源(如图片、文档等),应用可以获取Picker返回的结果。 类型受限权限使用的picker音频ohos.permission.READ_AUDIO,ohos.permission.WRITE_AUDIOAudioViewPicker文件ohos.permission.READ_DOCUMENT,oh

【SGU】271. Book Pile(双端队列模拟)

一摞书,2个操作,一个操作是在书堆上加一本,第二个将前K个书翻转 看别人用Splay树做的,但是可以用双端队列模拟,因为K个书之后的书位置已经定下来了,所以只需要记录在队列头加书还是尾加书 #include<cstdio>#include<string>#include<algorithm>#include<queue>#include<stack>#include<cstrin

Openharmony 图片自适应全屏显示

前言: Deveco_studio 4.1 release 版本 我们想要图片全屏显示,并且不出现黑白边,可以参考以下代码 这段代码会自适应你的容器大小,你的容器时全屏,图片就会全屏 @Entry@Componentstruct Index {@State message: string = 'Hello World';build() {Column() {}.width('100%'

ios免签H5

1、windows下载mobileconfig文件制作工具,可在csdn搜索iPhone_Mobileconfig_Tool下载安装;IOS 从APP Store 下载Apple Configurator 2 2、用申请的域名SSL证书给mobieconfig文件签名,最好下载Apache证书,里面包含 AE86211.crt 服务器端用于签名的证书 AE86211.key 服务器端用于签

android 的webView加载h5,和h5的交互(java和JavaScript的交互)

Android提供了一个很强大的WebView控件用来处理Web网页,而在网页中,JavaScript又是一个很举足轻重的脚本。本文将介绍如何实现Java代码和Javascript代码的相互调用。(通俗点说就是,点击那个Web页面的按钮啥的,可以传到原生app;或者原生app调用Web页面的js方法) 如何实现 实现Java和js交互十分便捷。通常只需要以下几步。 WebView

android屏幕适配的问题

这里主要是介绍两种方法:恰巧这两种方法都是出自同一个大神的手笔,当然我这里不做详细的介绍了,大神的博客里面有详细的介绍 1  百分比 洋神的博客:http://blog.csdn.net/lmj623565791/article/details/46767825 github :https://github.com/hongyangAndroid/android-percent-suppor

影响画布微信小程序canvas及skyline和webview用户界面布局的关键流程

影响微信小程序画布canvas及skyline和webview用户界面布局的关键流程 目录 影响微信小程序画布canvas及skyline和webview用户界面布局的关键流程 一、微信小程序canvas开发流程 1.1、官方指南 1.2、客制化开发 第一步:在 WXML 中添加 canvas 组件 第二步:获取 Canvas 对象和渲染上下文 第三步 画布#ID选择器执行回调——

独立双端App《瓦格相机》的开发过程分享

前言 Hello大家好,我是灯灯,独立开发者灯灯,也是天天学藏语的灯灯,哈哈哈... 好了屁话少说,今天和大家分享一下最近自己独立制作一款应用的经验历程,希望能对刚刚起步的新手们、还有独立开发者们有所帮助。 什么样的应用 我想做的是一款能够将照片转换成文字拼成的图片应用,也就是,图片中的每一个像素点都将会被文字取代,同时对应色彩、密集程度等。 之所以想做这样的应用是因为早在我高中的时候,