将feDropShadow添加到SVG中的垂直线会使其消失
我有以下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 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/宽度/高度,以确保过滤器适用于所有元素
另一种(不那么优雅的)解决方案是将过滤器应用于
,并使用其中的隐藏节点为组提供正确的宽度或高度:
可能重复的只需添加搜索关键字:这也会影响女性形态
扩张
和侵蚀
可能重复的只需添加搜索关键字:这也会影响