当前位置: 首页 > news >正文

在ios上z-index不起作用问题的总结

最近在维护一个H5老项目时,遇到一个问题,就是在ios上z-index不起作用,在安卓上样式都是好的。
项目的架构组成是vue2.x + vux + vuex + vue-router等
用的UI组件库是vux
在页面中有一个功能点,就是点选择公司列表的时候,会出现这个页面上面浮现一个a弹框页面,这个a弹框页面里面有搜索框,可以输入公司名进行搜索,然后出现公司列表,点击其中的一个公司,就算进行选择了。
主要是基于vux这个UI组件库的特性造成了这个问题;基础代码如下:

<template><div class="select-all"><div class="companyList"><popup></popup></div></div>
</template><script>
import { Popup } from 'vux';
export default {components: {Popup,},
};
</script>

打包之后,在页面上运行之后,会发现在页面中的页面布局如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>页面</title>
</head>
<body><div class="select-all"><div class="companyList"><div>...</div><!-- 显示的列表页 --><div><div class="vux-popup-content vux-popup-content-show"><div>公司列表</div></div></div></div></div><!-- 蒙层 --><div class="vux-popup-mask vux-popup-mask-show"></div>
</body>
</html>

会发现蒙层在body元素中,而显示的弹窗列表在另外的很深的html中,不在一个层级中。

这个z-index样式是vux组件库默认设置的

.vux-popup-mask{z-index:500;
}

于是我给vux-popup-content这个类名设置的是:

.vux-popup-content{z-index:501;
}

然后在安卓中是有效果的,在ios中无效。

首先在html中,vux-popup-mask和vux-popup-content不在一个层级中,不知道是不是因为这个原因。那我怎么解决的呢?
我参考了这这两种做法:

方法1:transform
div {z-index: 2;transform: translateZ(2px)
}
方法2:teleport
// vue
<teleport to="body"><div></div>
</teleport>// 使用vant允许指定dom的组件<van-popup teleport="body"></van-popup>

我借鉴了第二种方法:
加了v-transfer-dom属性
代码如下:

<template><div class="select-all"><div class="companyList" v-transfer-dom><popup></popup></div></div>
</template><script>
import { Popup, TransferDom } from 'vux';
export default {directives:{TransferDom},components: {Popup,},
};
</script>

通过v-transfer-dom可以把内容元素vux-popup-content移动到紧挨着body元素下面,这样就可以和vux-popup-mask处于一个层级里面;

我们可以看一下打包运行后的代码,如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>页面</title>
</head>
<body><div class="select-all"><div>...</div></div><!-- 弹窗内容区 --><div class="v-transfer-dom companyList"><div>...</div><!-- 显示的列表页 --><div><div class="vux-popup-content vux-popup-content-show"><div>公司列表</div></div></div></div><!-- 蒙层 --><div class="vux-popup-mask vux-popup-mask-show"></div>
</body>
</html>

可以看到元素已经移到了外面,所以这个时候设置的z-index: 501 就生效了。

http://www.lryc.cn/news/278568.html

相关文章:

  • 力扣labuladong一刷day59天动态规划
  • pyenv环境找不到sqlite:No module named _sqlite3
  • Histone H3K4me2 Antibody, SNAP-Certified™ for CUTRUN
  • 我用 Laf 开发了一个非常好用的密码管理工具
  • windows项目部署
  • http首部
  • 2024.1.8 Day04_SparkCore_homeWork
  • 09.简单工厂模式与工厂方法模式
  • DHCP,怎么在Linux和Windows中获得ip
  • 读写锁(arm)
  • 【第33例】IPD体系进阶:市场细分
  • response 拦截器返回的二进制文档(同步下载excel)如何配置
  • 为什么要使用云原生数据库?云原生数据库具体有哪些功能?
  • 05- OpenCV:图像操作和图像混合
  • 人脸识别(Java实现的)
  • Maven 依赖管理项目构建工具 教程
  • 供应链+低代码,实现数字化【共赢链】转型新策略
  • [力扣 Hot100]Day3 最长连续序列
  • 【办公技巧】Word功能区灰色显示不能编辑,怎么破?
  • 全志V853开发板原理图
  • 【解决】Unity Project 面板资源显示丢失的异常问题处理
  • Hyperledger Fabric Docker 方式多机部署生产网络
  • 高效降压控制器FP7132XR:为高亮度LED提供稳定可靠的电源
  • Spring Boot - Application Events 的发布顺序_ApplicationEnvironmentPreparedEvent
  • 华为HCIE课堂笔记第十三章 IPv6地址配置
  • 计算机网络-VLAN间通信
  • vue3的福音框架arco.design
  • BSP视频教程第29期:J1939协议栈CAN总线专题,源码框架,执行流程和应用实战解析,面向车通讯,充电桩,模组通信等(2024-01-08)
  • Java lambda表达式如何自定义一个toList Collector
  • 【hcie-cloud】【18】华为云Stack灾备服务介绍【容灾解决方案介绍、灾备方案架构介绍、管理组件灾备方案介绍、高阶云服务容灾简介、缩略词】【下】