【问题标题】:SVG with drop-shadow blurry on mobile browser移动浏览器上带有阴影模糊的 SVG
【发布时间】:2014-10-10 16:38:28
【问题描述】:

我正在努力在尽可能多的平台上制作带有阴影的 SVG 图标。

我为此使用了以下简单的 CSS:

.test{
  width: 14px;
  height: 14px;
  background-image: url("../images/test.svg");
  background-repeat: no-repeat;
  opacity: 0.8;
  -webkit-filter: drop-shadow(1px 1px 0px #E0E0E0);
}

在 Chrome、Firefox 和 IE 等桌面浏览器上运行良好。 但在移动浏览器上,问题开始了:在 Chrome 中,图标变得模糊,而在 Firefox 中,投影只是被忽略了。删除阴影后,Chrome 中的图标会再次清晰,所以我认为它与阴影有一些共同点。

有人遇到过同样的问题,并找到了解决办法吗?

【问题讨论】:

  • 请在crbug.com 提交一个错误,包括一个测试用例以及它影响的版本的更多详细信息。
  • 我只是偶然发现了同样的问题,但似乎没有其他人知道它......
  • 是的,我很惊讶缺乏有关此错误的信息,尤其是在几年前就被标记了..!?

标签: css svg blurry drop-shadow


【解决方案1】:

刚刚找到了答案。
由于生成 SVG 过滤器的方式会出现此问题:在应用过滤器之前,会创建相应元素的位图图像,然后对其进行操作并在其上分层。你可以找到一个很好的解释here

要在 HDPI 屏幕上显示清晰的 svg 图像,您可以尝试使用 effect 上的 filterRes-属性,它为计算的 svg 效果提供像素分辨率,更多关于 here
像这样使用它:

<filter id="dropshadow" height="170%" filterRes="200">
  <feGaussianBlur in="SourceAlpha" stdDeviation="20"/>
  <feOffset dx="0" dy="2" result="offsetblur"/>
  <feMerge> 
    <feMergeNode/>
    <feMergeNode in="SourceGraphic"/>
  </feMerge>
</filter>
<path id="icon" fill="#fff" style="filter:url(#dropshadow)" d="..."></path>
</svg>

假设您将background-size: contain 添加到您的CSS - 绘制的容器大概是14px x 14px。要为视网膜显示器渲染具有足够分辨率的阴影(例如因子 2),您应该为filterRes 取一个健康的30 值。这并不理想,但它似乎是目前唯一可行的选择。有点打败了使用 svg 的原因。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-22
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
  • 2017-11-17
  • 2017-01-23
相关资源
最近更新 更多