首页 > 其他分享 >移动端安全区域适配方案

移动端安全区域适配方案

时间:2024-04-16 13:12:45浏览次数:25  
标签:方案 区域 适配 safe bottom area inset 视口 移动

前言

什么是安全区域?

自从苹果推出了惊艳的iPhone X,智能手机界就正式步入了全面屏的新纪元。然而,这一革新也带来了一个特别的问题——那就是屏幕顶部的“刘海”和底部的“黑条”区域。这些区域犹如手机的“神秘面纱”,遮挡了一部分屏幕,给开发者带来了新的挑战。

Android似乎对iPhone的设计情有独钟,纷纷效仿这种全面屏的潮流。于是,越来越多的Android手机也开始有了这个安全区域的概念。

在这个背景下,移动端安全区域适配变得尤为重要。开发者们需要巧妙地调整应用的布局和界面,确保内容不会被这些特殊区域遮挡,同时保持应用的美观和易用性。

安全区域(safe area)

安全区域定义为视图中未被导航栏、选项卡栏、工具栏或视图控制器可能提供的其他视图覆盖的区域。

如上图所示,安全区域为中间蓝色部分,也就是说我们在页面布局时应该保证页面内容在蓝色安全区域内。

所以对于这类机型,你如果不特殊处理,那么它将会是这样的:

这样就会导致底部输入框的交互受影响

网页布局方式(viewport-fit)

在处理安全区域之前,我们需要先来了解viewport-fit属性,这是解决问题的关键。

iOS带来问题的同时也带来了解决问题的方法,为了适配 iPhoneX等全面屏机型 对现有 viewport meta 标签进行了扩展,用于设置视觉视口的大小来控制裁剪区域。

用法

<meta name="viewport" content="width=device-width,initial-scale=1, user-scalable=0, viewport-fit=cover">

属性值

该属性包含三个值:

  • auto:该值不会影响初始布局视口,并且整个网页都是可见的。 UA 在视口之外绘制的内容是未定义的。它可以是画布的背景颜色,或者 UA 认为合适的任何其他颜色。(默认值,与contain表现一致)
  • contain:初始布局视口和视觉视口设置为设备显示屏中内接的最大矩形。 UA 在视口之外绘制的内容是未定义的。它可以是画布的背景颜色,或者 UA 认为合适的任何其他颜色。
  • cover:初始布局视口和视觉视口设置为设备物理屏幕的外接矩形。

区别

在非矩形显示器上(比如手表)设置视口边界框的大小时,我们必须考虑以下因素:

  • 由于视口边界框的面积大于显示器的面积而导致的剪切区域
  • 视口边界框与显示区域之间的间隙

contain

当使用viewport-fit: contain时,初始视口将应用于显示器的最大内接矩形。

cover

当使用viewport-fit: cover时,初始视口将应用于显示器的外接矩形。

env

为了解决安全区域问题,iOS 11 新增了一个新的 CSS 函数env()和四个预定义的环境变量

  • safe-area-inset-left:安全区域距离左边边界距离

  • safe-area-inset-right:安全区域距离右边边界距离

  • safe-area-inset-top:安全区域距离顶部边界距离

  • safe-area-inset-bottom:安全区域距离底部边界距离

iOS 11 中提供的 env() 函数名为 constant()。从 Safari 技术预览版 41 和 iOS 11.2 beta 开始,constant() 已被删除并替换为 env()。如有必要,您可以使用 CSS 后备机制来支持这两个版本,但以后应该更喜欢使用 env()。 —— 来自webkit文档

上面的意思是从iOS12开始不再支持使用constant函数,所以为了兼容处理,我们应该这样写:

body {
  padding-bottom: constant(safe-area-inset-bottom); /* 兼容 iOS < 11.2 */
  padding-bottom: env(safe-area-inset-bottom); /* 兼容 iOS >= 11.2 */
}

使用该函数的前提是必须设置meta标签viewport-fit=cover ,并且对于不支持 env() 的浏览器,浏览器将会忽略它。

适配安全区域

第一步:

修改页面布局方式

<meta name="viewport" content="width=device-width,initial-scale=1, user-scalable=0, viewport-fit=cover">

第二步:

底部适配

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

这样安全区域问题就解决了!

标签:方案,区域,适配,safe,bottom,area,inset,视口,移动
From: https://www.cnblogs.com/songyao666/p/18137857

相关文章

  • 适配器模式
    1、适配器模式原理适配器模式的英文翻译是AdapterDesignPattern。顾名思义,这个模式就是用来做适配的,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。对于这个模式,有一个经常被拿来解释它的例子,就是USB转接头充当适配器,把两种......
  • RTX 腾讯通停止服务,有哪些平滑升级迁移替代方案?
    RTX腾讯通,作为腾讯公司于2003年推出的企业即时通讯软件,曾经在政企单位中得到广泛应用。然而,自2015年后,这款软件就未曾更新,近期腾讯将RTX腾讯通官网的域名更改为跳转到企业微信官网,这意味RTX腾讯通正式停止服务。尽管如此,由于本地化部署的特点,已安装用户仍可继续使用。但面临授权文......
  • 防止form表单重复提交的几种方案
    form重复提交场景场景1:在网络延迟的情况下让用户有时间点击多次submit按钮导致表单重复提交。具体行为:在网络比较慢的情况下,用户连续快速的点击多次提交按钮。场景2:表单提交后用户点击【刷新】按钮导致表单重复提交。具体行为:用户点击了提交按钮,然后点击浏览器上的【刷新】按钮......
  • VMware Tanzu Kubernetes Grid Integrated Edition (TKGI) 1.19 - 运营商 Kubernetes
    VMwareTanzuKubernetesGridIntegratedEdition(TKGI)1.19-运营商Kubernetes解决方案Kubernetes-basedcontainersolutionwithadvancednetworking,aprivatecontainerregistry,andlifecyclemanagement请访问原文链接:https://sysin.org/blog/vmware-tkgi/,查......
  • 重启React Native老项目的奇幻之旅:填坑实录与解决方案分享
    这两天为了重启五年前基于ReactNative(版本0.59.9)开发的老项目,经过各种填坑查询等操作,最终把它成功地运行起来了。在这篇文章中,我将详述那些遭遇的挑战以及对应的解决方案,以期为同样面临此类困境的开发者提供宝贵的经验参考。这个项目涉及到的环境基本版本信息如下:react:16.......
  • 02、VXLAN部署方案
    VXLAN部署方案目前,设备支持通过单机方式和控制器方式来部署VXLAN网络。单机方式:传统网络部署方式,按照网络规划登录到每台设备上进行配置。云计算数据中心中,此方式无法协同云平台实现网络的自动化部署。控制器方式:在大二层网络中,为了方便控制与部署引入了控制器。控制器是统......
  • frp i/o timeout 解决方案
    通过防火墙,开启端口1.安装防火墙安装iptables-services:2.防火墙基本操作查看版本:firewall-cmd--version显示状态:firewall-cmd--state查看所有打开的端口:netstat-anp开启防火墙systemctlstartfirewalld关闭防火墙systemctlstopfirewalld开启防火墙servicefirew......
  • 2466. 统计构造好字符串的方案数
    题目链接:本题其实是爬楼梯这道题的变式。题目要求长度在\(\rmlow\simhigh\)之间的好字符串个数,那我直接把所有长度的好字符串个数搞出来,再取长度在这个区间的相加就完事了。设\(f[i]\)表示构造长为\(i\)的字符串的方案数,也即长为\(i\)的好字符串的个数。看最后一步......
  • 数据库SQL注入攻击以及解决方案
    数据库SQL注入攻击以及解决方案--数据库SQL注入攻击selectcount(*)from表whereLoginID='lqwvje'andpwd='123'--拿上面的一个经常用的用户登入实例正常情况下是没有问题count>0即可以登入成功--用户名一但输入了数据库特殊字符如一下一段代码那就可以正常登入......
  • MindSpore运行报错RuntimeError: Unsupported device target GPU解决方案
    问题背景在运行MindSpore程序时,设置device_target为GPU,结果运行时报错:RuntimeError:UnsupporteddevicetargetGPU.Thisprocessonlysupportsoneofthe['CPU'].PleasecheckwhethertheGPUenvironmentisinstalledandconfiguredcorrectly,andcheckwhethercu......