IOS移动端横竖屏适配与刘海适配

本文介绍了如何在iOS11及以后版本中进行iPhone X及以上设备的刘海屏和横屏适配,重点关注safeAreaLayoutGuide和safeAreaInsets。通过设置viewport-fit属性和使用CSS的env()、constant()函数来避免内容被屏幕边缘和Home Indicator遮挡。同时提到了@supports规则用于针对特定设备的样式调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

iphoneX手机取消了实体Home键,取而代之的是主界面底部不显眼的横条“Home Indicator”。也就是从 iPhone X 开始出现了刘海和底部的黑条的区域,当网页底部fixed 元素时候,一部分元素可能就被这个横条遮挡住,横屏时又可能被刘海挡住,怎么适配解决呢?

左侧是被遮盖图,右侧是修改bug后的图

 

在iOS11 之后有这么一个概念safeArea(安全区域),这里主要探讨一下safeArea相关的两个概念,safeAreaLayoutGuide和safeAreaInsets。
在官网上有这么两张图片:

 安全区域指的是一个可视窗口范围,处于安全区域的内容不受圆角(corners)、齐刘海(sensor housing)、小黑条(Home Indicator)影响。

具体适配方案如下:

     1.从iOS11开始,为了适配刘海屏,Apple公司对HTML的viewport meta标签做了扩展,新增 viewport-fit 属性,使得页面内容完全覆盖整个窗口:

<meta name="viewport" content="width=device-width, viewport-fit=cover" />

只有设置了 viewport-fit=cover,才能使用 env()。

viewport-fit 有3个值:

  • contain: 可视窗口完全包含网页内容
  • cover:网页内容完全覆盖可视窗口
  • auto:默认值,跟 contain 表现一致

    2.限定安全区

iOS11 新增特性,Webkit 的一个 CSS 函数,用于设定安全区域与边界的距离,有四个预定义的变量:

  • safe-area-inset-left:安全区域距离左边边界的距离
  • safe-area-inset-right:安全区域距离右边边界的距离
  • safe-area-inset-top:安全区域距离顶部边界的距离
  • safe-area-inset-bottom:安全区域距离底部边界的距离
   .nav{
            position: fixed;
            left: 0;
            bottom: 0;
            display: flex;
            justify-content: space-evenly;
            align-items: center;
            width: 100%;
            height: 0.98rem;
            font-size: 0.2rem;
            text-align: center;
            background-color:rgba(0,0,0,.8);
            padding-bottom:constant(safe-area-inset-bottom); /*兼容 iOS < 11.2 */
            padding-bottom:env(safe-area-inset-bottom); /*兼容 iOS > 11.2 */ 
        }

注意:

  • 当 viewport-fit=contain 时 env() 是不起作用的,必须要配合 viewport-fit=cover 使用。对于不支持env() 的浏览器,浏览器将会忽略它。
  • env() 跟 constant() 需要同时存在,而且顺序不能换。
左侧未设置,右侧设置后的效果

    3.横屏

 从上图可见,横屏对页面内容有影响。

解决方案:

     body{
            font-family: PingFang;
            font-weight: 400;
            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); 
            background-color: #fff;
        }

 当然还可以使用 @supports
  一般只希望 iPhoneX 才需要新增适配样式,可以配合 @supports 编写样式:

@supports (bottom: env(safe-area-inset-bottom)) {
      div {
        margin-bottom: env(safe-area-inset-bottom);
      }
    }

还有哪些方式,欢迎补充。

智能网联汽车的安全员高级考试涉及多个方面的专业知识,包括但不限于自动驾驶技术原理、车辆传感器融合、网络安全防护以及法律法规等内容。以下是针对该主题的一些核心知识解析: ### 关于智能网联车安全员高级考试的核心内容 #### 1. 自动驾驶分级标准 国际自动机工程师学会(SAE International)定义了六个级别的自动驾驶等级,从L0到L5[^1]。其中,L3及以上级别需要安全员具备更高的应急处理能力。 #### 2. 车辆感知系统的组成与功能 智能网联车通常配备多种传感器,如激光雷达、毫米波雷达、摄像头和超声波传感器等。这些设备协同工作以实现环境感知、障碍物检测等功能[^2]。 #### 3. 数据通信与网络安全 智能网联车依赖V2X(Vehicle-to-Everything)技术进行数据交换,在此过程中需防范潜在的网络攻击风险,例如中间人攻击或恶意软件入侵[^3]。 #### 4. 法律法规要求 不同国家和地区对于无人驾驶测试及运营有着严格的规定,考生应熟悉当地交通法典中有关自动化驾驶部分的具体条款[^4]。 ```python # 示例代码:模拟简单决策逻辑 def decide_action(sensor_data): if sensor_data['obstacle'] and not sensor_data['emergency']: return 'slow_down' elif sensor_data['pedestrian_crossing']: return 'stop_and_yield' else: return 'continue_driving' example_input = {'obstacle': True, 'emergency': False, 'pedestrian_crossing': False} action = decide_action(example_input) print(f"Action to take: {action}") ``` 需要注意的是,“同学”作为特定平台上的学习资源名称,并不提供官方认证的标准答案集;建议通过正规渠道获取教材并参加培训课程来准备此类资格认证考试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值