【H5在混合开发中的兼容问题】如何同时适配:ios的安全区域/沉浸式开发下的安卓状态栏

原来的ios安全区域适配方案

在meta中设置: viewport-fit=cover 下面是一段在umi中的配置,仅举例,不使用umi的情况可以自己看加到具体位置。

metas: [
    {
      name: 'viewport',
      content: 'width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no, viewport-fit=cover'
    },
  ],

代码中使用:(直接使用css样式)

 height: calc(100vh - constant(safe-area-inset-top)); /* 兼容 iOS<11.2 */
 height: calc(100vh - env(safe-area-inset-top)); /* 兼容iOS>= 11.2 */

那现在新的问题出现了,如果你们的安卓使用了沉浸式开发的主题,状态栏(工具栏)就和你的页面重合了

解决方案:

  1. 安卓端添加状态栏高度到userAgent中,或者也可以通过bridge通信给到H5,最好是dp的单位,H5侧拿过来可以直接当做px使用。
  2. 在初始化的代码中:
export default function initSetStyleProperty(): void {
  document.documentElement.style.setProperty(
    '--android-status-bar-height',
    `${0}px`,
  );

const { userAgent } = window.navigator;
if (/android/i.test(userAgent)) { // 这里是判断安卓环境的代码,可以使用
    const statusBarHeightRegex = /statusBarHeight=(\d+)/;
    const match = statusBarHeightRegex.exec(userAgent);
    if (match) {
      document.documentElement.style.setProperty(
        '--android-status-bar-height',
        `${match[1]}px`,
      );
    }
  }
}
  1. 使用
height: calc(100vh - constant(safe-area-inset-top) - var(--android-status-bar-height));
height: calc(100vh - env(safe-area-inset-top) - var(--android-status-bar-height));

完美解决问题,避免使用js来判断环境再去设置样式的复杂操作。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,针对您的问题,以下是一个解决方案的实例,供参考: 1. 首先,在html定义一个select标签,并给它一个类名,例如“select-style”: ```html <select class="select-style"> <option value="option1">Option 1</option> <option value="option2">Option 2</option> <option value="option3">Option 3</option> </select> ``` 2. 然后,在CSS定义该类名的样,包括一些兼容性的处理: ```css .select-style { -webkit-appearance: none; /* 去掉ios默认样 */ -moz-appearance: none; /* 去掉firefox默认样 */ appearance: none; /* 去掉其他浏览器默认样 */ background-image: url('path/to/arrow-icon'); /* 添加自定义的下拉箭头图标 */ background-size: 12px; /* 设置图标大小 */ background-repeat: no-repeat; /* 不重复显示图标 */ background-position: 95% center; /* 将图标放置在下拉框的右侧间位置 */ padding: 8px; /* 设置内边距 */ border: 1px solid #ccc; /* 设置边框 */ } ``` 3. 最后,使用JavaScript监听下拉框的变化,并动态修改其选项的样: ```javascript var select = document.querySelector('.select-style'); select.addEventListener('change', function() { var selectedOption = this.options[this.selectedIndex]; selectedOption.style.backgroundColor = '#ccc'; selectedOption.style.color = '#fff'; }); ``` 以上就是一个简单的解决方案,它可以使下拉框在ios显示正常,同时也可以在其他浏览器兼容。需要注意的是,不同的页面可能需要根据自己的实际情况进行一些微调,例如调整箭头图标的位置和大小等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值