kan*_*gax 51 svg clipping shadow svg-filters
我正在使用的SVG通过feGaussianBlur过滤器有一个投影.
阴影本身正确显示,但在顶部和底部边缘被切除.
像这样:
有问题的SVG是:
<?xml version="1.0" standalone="no" ?>
<!DOCTYPE svg
PUBLIC '-//W3C//DTD SVG 1.1//EN'
'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
<svg height="600" version="1.1" width="700" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs/>
<filter id="SVGID_0">
<feGaussianBlur in="SourceGraphic" stdDeviation="6.6"/>
<feOffset dx="0" dy="0"/>
<feMerge>
<feMergeNode/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
<path d="M 0 83 Q 0 83 0 83 Q 0 83 6 79.5 Q 12 76 17 71 Q 22 66 30.5 57.5 Q 39 49 54 36 Q 69 23 82.5 16.5 Q 96 10 120 4.5 Q 144 -1 170.5 0 Q 197 1 218 16.5 Q 239 32 253.5 51 Q 268 70 278 83.5 Q 288 97 299 110 Q 310 123 320 129.5 Q 330 136 338 136.5 Q 346 137 355 129.5 L 364 122" stroke-linecap="round" style="stroke: #005e7a; stroke-width: 30; fill: none; filter: url(#SVGID_0);" transform="translate(50 50)" />
</svg>
Run Code Online (Sandbox Code Playgroud)
裁剪似乎在Chrome(30),Firefox(25)和Opera(12)中持续发生.
我可以看到它不是一个视图限制,因为它设置为600x700.
我还可以在devtools检查器中看到<path>元素的边界框,它几乎就像是切断阴影的东西:
如果是这样的话:
如果它不是边界框,是什么导致这种情况以及如何避免这种剪辑?
Mic*_*any 86
您需要增加过滤器区域的大小.
<filter id="SVGID_0" y="-40%" height="180%">
Run Code Online (Sandbox Code Playgroud)
工作得很好.过滤器区域的静默默认值为:x =" - 10%"y =" - 10%"width ="120%"height ="120%" - 大模糊通常会被剪裁.(您的阴影不会被水平剪切,因为您的宽度约为您身高的2.5倍 - 因此10%会导致更宽的水平滤镜区域).此外,y滤镜区域似乎被计算为好像路径具有零像素笔划,因此它忽略了笔划宽度.(不同的浏览器有不同的行为,他们是否认为笔划是边界框的一部分,用于过滤区域计算.)
(更新:从评论中提升观察值)
请注意,如果您的特定形状为零宽度或零高度(例如水平或垂直线),则必须指定filterUnits="userSpaceOnUse"
过滤器声明的一部分并明确指定过滤器区域(x userSpaceUnits(通常是像素)中的,y,width height),可以创建足够的空间来显示阴影.
正如上面的评论中所述,我的修复是向filter
shadow svg标记添加一个属性.
filterUnits="userSpaceOnUse"
Run Code Online (Sandbox Code Playgroud)
最终产出:
<filter id="dropshadow" height="130%" width="130%" filterUnits="userSpaceOnUse">
Run Code Online (Sandbox Code Playgroud)
这使阴影在其容器外绝对定位和可见.
如果在HTML内使用它,则只需使用CSS属性即可解决此问题。
svg {
overflow: visible !important;
}
Run Code Online (Sandbox Code Playgroud)
我没有检查其他浏览器,但是chrome overflow: hidden
在svg标签上默认具有。
有点晚了,但我希望对您有所帮助。
归档时间: |
|
查看次数: |
12608 次 |
最近记录: |