问答

firefox中rotate+overflow:hidden导致伪元素无法正常drop-shadow

作者:admin 2021-04-17 我要评论

项目中使用drop-shadow+translate+overflow:hidden的方法改变svg图标的颜色 .icon-refresh { width: 20px; height: 20px; overflow: hidden; //transform: rotat...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

项目中使用drop-shadow+translate+overflow:hidden的方法改变svg图标的颜色

.icon-refresh {
  width: 20px;
  height: 20px;
  overflow: hidden;
  //transform: rotate(90deg);
}

.icon-refresh::after {
  content: "";
  width: 20px;
  height: 20px;
  display: block;
  background: transparent url("~@/assets/icons/autorenew-black-48dp.svg") no-repeat
    center/100%;
  filter: drop-shadow(0 20px red);
  transform: translateY(-20px);
}

以上代码能够正常生效,图片.png原图为黑色现在变成了红色。
但是在Firefox中,当加上rotate后,结果会变形甚至是消失,例如rotate(30deg)会变成图片.png
rotate(45deg)会变成图片.pngrotate(85deg)会变成图片.png
如果去掉overflow:hidden,又不会出现变形图片.png
关闭浏览器所有附加组件仍然存在这个问题,应该可以排除插件的原因。
开发者工具中样式如下:
图片.png
图片.png
请问这是什么原因?

###

我试了一下,目前使用 perspective 属性去设置视距的话,是可以正常显示的。

.icon-refresh::after {
  /* ... */
  transform: perspective(500px) translateY(-20px); /* 增加了视距设置 */
}

chrome-firefox


至于原因是什么我也没能定位,视距无论设置为多少(perspective>=1px)都是生效的,那看起来可能是 Firefox 的渲染机制的问题?

不过从 Firefox 开发者工具的样式查看器中可以看到,相较于其他浏览器的渲染结果多了 ::marker 这个伪元素,这是个相对新的元素,也有可能是翻车的原因之一。

firefox-marker

题主后面如果找到明确的原因了,记得回复我一下,还是挺感兴趣的。

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • nginx响应速度很慢

    nginx响应速度很慢

  • 点击选中的多选框,会在已选那一栏显示

    点击选中的多选框,会在已选那一栏显示

  • PHP 多态的理解

    PHP 多态的理解

  • 关于C语言中static的问题

    关于C语言中static的问题

腾讯云代理商
海外云服务器