在Safari中交换CSS投影滤镜

r6l8ljro  于 2022-11-19  发布在  其他
关注(0)|答案(1)|浏览(152)

我有一个透明的PNG图像元素,我想在其中应用一个根据特定条件改变颜色的下拉阴影。我正在一个绑定了Vue 3的类选择器中触发属性更改:
第一个
当页面第一次呈现时,会显示正确的投影,但是当条件改变时,投影颜色不会改变(奇怪的是,有时会改变)。设置了正确的条件类--只是当条件改变时,实际上并没有应用过滤器。
我尝试过的事情:

  • 在设置期望的滤波器之前加上filter: none;
  • 将CSS选择器从视图移动到main.css
  • false条件更改为filter: none;(始终有效),以及
  • 在下面的更新中列出的事情。

Safari似乎在从一个已声明的过滤器更改为另一个已声明的过滤器时遇到问题。此行为出现在Safari 16.1中,但可能也适用于其他版本。在Firefox中,预期的过滤器更改始终有效。
是否有一种方法可以应用滤镜更改而无需多次渲染:
old filter --> no filter --> new filter

更新:

我添加了一个条件源代码选择器来强制重新加载<img>,但这并没有解决这个问题(在Firefox中仍然可以正常工作)。

:src="conditional ? require('@/assets/image0.png') : require('@/assets/image1.png')"/>
rhfm7lfc

rhfm7lfc1#

我相信我已经找到了一个解决这个问题的方法。通过包含下面的转换,阴影在Safari中(在Firefox中也是如此)可以按照预期的方式呈现。

transform: translateZ(0);

这个转换将元素的呈现转移到硬件加速(而不是浏览器中)。因此,这在Safari和Firefox中都能正常工作(我还没有测试过其他浏览器):

.trueCondition {
  transform: translateZ(0);
  filter: drop-shadow(0 0 5px #FF0000);
}
.falseCondition {
  transform: translateZ(0);
  filter: drop-shadow(0 0 5px #00FF00);
}

相关问题