将feDropShadow添加到SVG中的垂直线会使其消失

将feDropShadow添加到SVG中的垂直线会使其消失,svg,svg-filters,dropshadow,Svg,Svg Filters,Dropshadow,我有以下SVG文档: <svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 21 484" xmlns="http://www.w3.org/2000/svg"> <defs> <filter id="dropShadow"> <feDropShadow dx="4" dy="0" stdDeviation="4"></feDropShadow>

我有以下SVG文档:

  <svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 21 484" xmlns="http://www.w3.org/2000/svg">
  <defs>
    <filter id="dropShadow">
      <feDropShadow dx="4" dy="0" stdDeviation="4"></feDropShadow>
    </filter>
  </defs>
  <g id="Artboard" stroke-width="5" stroke="#FF0000" fill="#000000" stroke-linecap="round">
    <path style="filter: url(#dropShadow)" d="M7.5,8.5 L7.5,471.5" id="path-1"></path>
  </g>
</svg>

在Firefox中,当我打开SVG文档时,它只是显示一条非常细(不是5宽)的垂直线。在Chrome中,它不显示任何内容(在codepen中也不显示,此处:)

我不太确定我在这里做得不对,但这与过滤器有关,因为如果我从
路径定义中删除
过滤器:url(#dropShadow)
,该行将按预期显示。

如果形状没有高度或宽度,则无法使用

如果适用图元的几何图形没有宽度或高度,例如水平线或垂直线,则不应使用关键字objectBoundingBox,即使该线在查看时由于笔划宽度非零而具有实际厚度,因为笔划宽度在边界框计算中被忽略。如果适用图元的几何体没有宽度或高度,并且指定了objectBoundingBox,则将忽略给定的效果(例如渐变或过滤器)

filterUnits的默认值是objectBoundingBox单位,因此您需要将其更改为userSpaceOnUse,即


线阴影
一条红色线条,宽度为5px,厚度为5px,圆顶,有阴影。这突出了PURP-1017中记录的回归。
如果形状没有高度或宽度,则无法使用

如果适用图元的几何图形没有宽度或高度,例如水平线或垂直线,则不应使用关键字objectBoundingBox,即使该线在查看时由于笔划宽度非零而具有实际厚度,因为笔划宽度在边界框计算中被忽略。如果适用图元的几何体没有宽度或高度,并且指定了objectBoundingBox,则将忽略给定的效果(例如渐变或过滤器)

filterUnits的默认值是objectBoundingBox单位,因此您需要将其更改为userSpaceOnUse,即


线阴影
一条红色线条,宽度为5px,厚度为5px,圆顶,有阴影。这突出了PURP-1017中记录的回归。

在处理过滤器时,不同的浏览器以不同的
笔划处理
Chrome
将笔划视为具有零像素的值,因此不将其包含在过滤区域中。
因此,为了使结果在不同的浏览器中看起来相同,最好将
path
替换为
stroke width=“5”
,一个宽度为5px的矩形,没有
stroke
stroke=“none”

此外,过滤器区域的默认值为:
x=“-10%”y=“-10%”``width=“120%”``height=“120%”
-通常会截断较大的模糊大小

默认情况下,这些值以百分比形式指定

为了更容易地计算
过滤区域
操作的大小,请指定
filternits=“userSpaceOnUse”的值,然后可以指定
过滤区域的所有尺寸(以像素为单位)


在处理过滤器时,不同的浏览器以不同的
笔划处理
Chrome
将笔划视为具有零像素的值,因此不将其包含在过滤区域中。
因此,为了使结果在不同的浏览器中看起来相同,最好将
path
替换为
stroke width=“5”
,一个宽度为5px的矩形,没有
stroke
stroke=“none”

此外,过滤器区域的默认值为:
x=“-10%”y=“-10%”``width=“120%”``height=“120%”
-通常会截断较大的模糊大小

默认情况下,这些值以百分比形式指定

为了更容易地计算
过滤区域
操作的大小,请指定
filternits=“userSpaceOnUse”的值,然后可以指定
过滤区域的所有尺寸(以像素为单位)


在大多数情况下,切换到
userSpaceOnUse
是正确的答案,但有以下限制:

  • 过滤效果区域将应用于画布的-10%到120%,而不是元素的边界框(使用更多内存和处理时间)
  • 对于大型动态SVG(如d3创建的SVG),很难计算所需的过滤器x/y/宽度/高度,以确保过滤器适用于所有元素
  • 另一种(不那么优雅的)解决方案是将过滤器应用于
    ,并使用其中的隐藏节点为组提供正确的宽度或高度:


    在大多数情况下,切换到
    userSpaceOnUse
    是正确的答案,但有以下限制:

  • 过滤效果区域将应用于画布的-10%到120%,而不是元素的边界框(使用更多内存和处理时间)
  • 对于大型动态SVG(如d3创建的SVG),很难计算所需的过滤器x/y/宽度/高度,以确保过滤器适用于所有元素
  • 另一种(不那么优雅的)解决方案是将过滤器应用于
    ,并使用其中的隐藏节点为组提供正确的宽度或高度:

    
    
    可能重复的只需添加搜索关键字:这也会影响女性形态
    扩张
    和侵蚀
    可能重复的只需添加搜索关键字:这也会影响