filter导致的定位问题

42 阅读1分钟

背景

项目使用uniapp开发的小程序,最近在对快手小程序进行兼容时,发现了一个问题——picker弹出不是从底部出来的
使用picker组件二次封装的自定义组件,在点击picker时,底部弹出的弹出框定位并不是从底部弹出,而是相对于组件的使用位置

排查

  1. 一开始我以为是picker的弹出框可能是基于外层的元素定位,便把所有外层的元素全部注释,运行之后,picker是从底部弹出了,功能正常。
  2. 然后再由内到外逐层开放,最后在其中一层父元素中,发现了端倪,当这层元素开放时,picker的弹出不是从底部了,而是相对于该元素的底部。
  3. 我便定位到该元素的样式,通过对样式也进行同样的方式排查,先注释,再逐个开放,最后在一个属性上面又复现问题了,就是filter image.png

解决

本来使用这个属性是要给盒子加个阴影的,只能换成box-shadow

再次复现

  1. 自定义组件使用中,又又又发现了这个问题
  2. 通过再再次排查发现我又踩了一坑,在组件外层元素中使用了transform,这个属性也会导致position定位变成相对于使用了transform属性的元素
  3. 原本使用transform是用来位移的,改成了用margin来进行位移