micro-app
micro-app copied to clipboard
子应用中使用 getBoundingClientRect不应该获取基座的布局信息
历史 issue 中之前有过 patch 这个方法,后来又去掉了。 这个问题会导致子应用中创建的需要挂到 body 上的元素位置计算错误,很多组件库 popover 的场景会有这个问题:
- 创建 popover 之前使用 getBoundingClientRect 获取需要弹出的位置(这个是相对于最外层基座的布局信息)。
- 增加 absolute 元素,样式为第一步计算出的位置。
- 挂载元素到 body 下(这个时候会挂载到子应用的容器下,与第一步计算出的位置对不上了)。
从第一步到第三步都是在子应用内部执行,对元素的处理理论上应该要保持一致的。
(或者增加一个选项,可以让用户配置是否启用^^)
可以描述一下具体场景或者提供一个demo吗
可以描述一下具体场景或者提供一个demo吗
具体场景比如子应用里有一个input,我要在点击 input 的时候弹出一个下拉弹框,这个弹框的顶部和左侧要与 input 对齐。 按我上面描述的步骤来计算这个弹框的absolute位置并挂载的话,就会发现下拉弹框弹出的位置不对。因为计算的时候是基于最外层body得到的 left 和 top,但是挂载的位置是 micro app 内部的body。
这是在某个ui库出现的问题吗
我也有这个问题,用的 vite 打包采用esm形式,获取的body是真实的body,导致页面下拉框出现偏差 用的UI库是 https://arco.design/vue/component/select
我也有这个问题,用的 vite 打包采用esm形式,获取的body是真实的body,导致页面下拉框出现偏差 用的UI库是 https://arco.design/vue/component/select
这个问题是下拉框的位置是absolute定位设置的,位置本身没有问题,但micro-app元素或者其再上层的元素也使用了定位,导致出现偏差,并不是getBoundingClientRect导致的
@lkiarest @hzfvictory 将micro-app元素或者其上层元素的定位absolute、relative去掉,看一下位置是否正常
@lkiarest @hzfvictory 将micro-app元素或者其上层元素的定位absolute、relative去掉,看一下位置是否正常
去掉后正常。 但是去掉后对页面的UI产生一定影响 这个还有其他解决的方式嘛 我目前是改的UI控件的挂载容器 但是太多的话成本就很高了
@lkiarest @hzfvictory 将micro-app元素或者其上层元素的定位absolute、relative去掉,看一下位置是否正常
我的意思是按 issue 中描述的执行流程来理解,计算的容器位置和添加的容器理论上是一致的,如果改样式来适配的话有点 hack 的感觉 ~~
遇到了相同的问题,请问有解决方案吗