css - 如何通过 CSS 将阴影过滤器应用于 SVG 特定元素/路径

标签 css svg svg-filters

我想通过 CSS 对内联放置的 SVG 中的特定元素/路径应用阴影过滤器,我不需要需要对整个图形进行阴影处理,只是一个元素里面。

.shadow {
  fill: red;
  
  -webkit-filter: 
    drop-shadow( 3px 3px 2px rgba(0,0,0,.7) );
          filter: 
    drop-shadow( 3px 3px 2px rgba(0,0,0,.7) );
}
  <svg height="150" width="150">
    <g>
<path d="M0,0 C-72,132 -72,-26 100,100"></path>
    </g>
    <g class="shadow" >
    <circle class="shadow" cx="100" cy="100" r="20"></circle>
    </g>
  </svg>

正如您在上面看到的,我正在尝试对 SVG 的红色圆圈元素应用阴影,但它不起作用。

四处搜索我还没有找到任何关于此的具体信息,only few comments在其他 SVG 相关问题中,简单地说明它不适用于单个 SVG 元素,但没有太多解释。

更新

正如 @azeós 指出的那样在评论中,它使用 Firefox(v.43.0.2)正确呈现,因此这是 Chrome 特定的问题。有没有办法在不按照评论中的建议修改 SVG 代码的情况下制作这个跨浏览器?

最佳答案

2020-04 更新:我在这个问题上做了一些实验,因为我也找不到这方面的任何信息,而且结果非常不一致。

TL;DR:SVG 投影非常不一致,但 HTML 投影可靠地工作(在 IE11 之外)。如果你想要 SVG 投影,you're going to have use a polyfill或者只是在 SVG 本身内做投影。

Codepen 实验: http://codepen.io/staypuftman/pen/GoNoMq

Chrome 81 + 金丝雀 83:

Chrome 和 Edge Canary 都没有在 SVG 对象投影的上下文中正确地尊重 filter-webkit-filter 但在简单的 div 上工作

enter image description here

Firefox 75 + Firefox 53(量子之前):

对于 SVG 和 HTML 对象看起来都不错。

enter image description here

Safari 13+

Safari 曾短暂地在早期版本上有过阴影,但现在又放弃了。

enter image description here

Safari 10.1 - 11

Safari 已在 10.1(可能还有 10.0)系列中解决了这个问题。

enter image description here

Safari 9.x

SVG CSS 投影不显示并且 div 投影由于某种原因具有较低的不透明度

enter image description here

Edge(Chromium 版本)

没有 SVG 阴影,但 HTML 效果很好。

enter image description here

IE11

没有。

enter image description here

关于css - 如何通过 CSS 将阴影过滤器应用于 SVG 特定元素/路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34460182/

相关文章:

pdf - 将 SVG 嵌入到带有嵌入字体的 PDF 中

svg - 如何使用d3.js在圆弧内沿textPath对齐/结束文本?

d3.js - SVG 过滤器中的 feTurbulence 可以旋转吗?

html - CSS 在 Chrome 和 Firefox 上的工作方式不同

html - 重叠超过 2 个 html 元素

jquery - 如何在中间延迟两次更改背景颜色?查询

CSS 宽度 : not working in label

javascript - 如何在svg中动态显示文本

svg - 当我在 SVG 过滤区域中指定正 x/y 时,为什么我的内容会消失?

svg - 如何使用 SVG 过滤器在 SVG 中创建 Material 设计阴影