HTML5 移动端页面适配 iOS 系统刘海屏

2023-11-01 17:30

本文主要是介绍HTML5 移动端页面适配 iOS 系统刘海屏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. Apple官方适配方案

在 iphone X 之后引入了一个新概念:“safe area(安全区域)”,安全区域指屏幕内不受圆角、齐刘海、底部小黑条等元素影响的可视窗口。如下图:
在这里插入图片描述从 iOS11 开始 ,为了适配刘海屏,Apple 公司对 HTML 的 viewport meta 标签做了扩展

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

viewport-fit 属性

含义
contain可视窗口完全显示网页内容 (左图)
cover网页内容完全覆盖可视窗口 (右图)
auto默认值,跟 contain 表现一致

在这里插入图片描述

适配方法:
  • 首先通过设置 < meta name=“viewport” content=“viewport-fit=cover” > 让页面充满全屏;
  • 通过 Webkit 内置的CSS函数,获取安全区域与各边之间的间距,然后通过 padding / margin / 绝对定位 等方式,让页面元素展示在安全区域内;
    注意: Webkit 在 iOS11 中新增 CSS Functions: env( ) 替代 constant( ),文档中推荐使用 env( ),而 constant( ) 从Safari Techology Preview 41 和 iOS11.2 Beta开始会被弃用。在不支持 env( ) 的浏览器中,会自动忽略这一样式规则,不影响网页正常的渲染。为了达到最大兼容目的,我们可以 constant( ) 和 env( ) 同时使用。
    env()函数 MDN文档说明
body{padding-top: constant(safe-area-inset-top); /* iOS 11.0 */padding-top: env(safe-area-inset-top); /* iOS 11.2 */   padding-bottom: constant(safe-area-inset-bottom);padding-bottom: env(safe-area-inset-bottom);padding-left: constant(safe-area-inset-left);padding-left: env(safe-area-inset-left);padding-right: constant(safe-area-inset-right);padding-right: env(safe-area-inset-right);
}

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

@supports ((height: constant(safe-area-inset-top)) or (height: env(safe-area-inset-top))) and (-webkit-overflow-scrolling: touch) {.fullscreen {/* 适配齐刘海 */padding-top: 20px;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);}
}

非齐刘海的ios手机适配:

@supports (-webkit-overflow-scrolling: touch) {/* 适配ios 非齐刘海机型 */
}
补充:通过 JavaScript 获取刘海屏安全区域高度

在 JavaScript 中读取env函数值,需要使用 CSS自定义属性。
传送门:CSS中 自定义属性(变量)详解

首先设置:

:root {--sat: env(safe-area-inset-top);--sar: env(safe-area-inset-right);--sab: env(safe-area-inset-bottom);--sal: env(safe-area-inset-left);
}

通过以下方法,读取到 CSS 自定义变量

getComputedStyle(document.documentElement).getPropertyValue("--sat")

2. 机型区分适配

/* 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) {...
}

缺点:工作量有点大,且每年9月份发布会后要及时更新新版本适配代码。

3. jsBridge方案

Android机器厂商百花齐放,各厂商的机型也是眼花缭乱。该方案同时适合 Android 和 IOS

  • 客户端获取状态栏高度后,H5通过JSBridge交互拿到状态栏高度,设置页面样式避开齐刘海区域。
  • 混合开发,顶部导航采用app端的。

这篇关于HTML5 移动端页面适配 iOS 系统刘海屏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Linux查询服务器系统版本号的多种方法

《Linux查询服务器系统版本号的多种方法》在Linux系统管理和维护工作中,了解当前操作系统的版本信息是最基础也是最重要的操作之一,系统版本不仅关系到软件兼容性、安全更新策略,还直接影响到故障排查和... 目录一、引言:系统版本查询的重要性二、基础命令解析:cat /etc/Centos-release详

更改linux系统的默认Python版本方式

《更改linux系统的默认Python版本方式》通过删除原Python软链接并创建指向python3.6的新链接,可切换系统默认Python版本,需注意版本冲突、环境混乱及维护问题,建议使用pyenv... 目录更改系统的默认python版本软链接软链接的特点创建软链接的命令使用场景注意事项总结更改系统的默

基于Python Playwright进行前端性能测试的脚本实现

《基于PythonPlaywright进行前端性能测试的脚本实现》在当今Web应用开发中,性能优化是提升用户体验的关键因素之一,本文将介绍如何使用Playwright构建一个自动化性能测试工具,希望... 目录引言工具概述整体架构核心实现解析1. 浏览器初始化2. 性能数据收集3. 资源分析4. 关键性能指